当前位置: 首页 > 网络应用技术

机器学习 - 决策树的分类树Python真实战争

时间:2023-03-08 23:45:39 网络应用技术

  您是否听说过“三个元素代码世界”一词

  真的很强吗?

  没错,你没听到错

  Python的数据处理建模确实很高

  因此,Python最重要的设备之一是“ Sklearn”

  让我们看一下Sklearn如何意识到决策树中的分类树

  本文的目录:

  1个概述

  1.1 Sklearn中的决策树

  2决策性分类剂和红酒数据集

  2.1重要参数

  2.1.1标准

  2.1.2 Random_State&Splitter

  2.1.3分支参数

  2.1.4目标重量参数

  2.2重要属性和接口

  决策树是一种非参数监督和学习方法。它可以从一系列特征和标签数据中总结决策规则

  并使用树图的结构提出这些规则来解决分类和回归问题。制定树算法易于理解,并且适用各种数据,并且在解决各种问题时具有良好的性能

  特别是以树型为中心的各种集成算法在各种行业和领域中广泛使用。

  如果您不知道决策树的原则,请阅读作者的博客文章“机器学习 - Wan Zi长文本(1)的决策树的原理”

  Sklearn模块中的决策树是Sklearn.tree

  Sklearn中的决策树类别在“树”模块下。此模块总共包含五个类别:

  如果根据上述过程,分类树的建模过程是:

  下面我们真的想启动代码。通常,大多数关于决策的教程 - 制造树将使用虹膜数据集

  但是使用此数据集不是很好,因为在此数据集中有一个无法清楚地引入的参数。下面我们将谈论

  因此,本文使用红酒数据集

  首先,确保计算机上有机器学习环境。

  然后,我们打开CMD并输入说明:

  创建一个新的“ .ipynb”文件以准备敲门代码

  步骤1:导入所需的袋子

  步骤2:查看数据

  让我们看一下这个红酒数据集的样子

  说明:这意味着该数据集(0、1和2)中有三种类型的标签,也就是说,这些红酒分为三类。

  这是训练集的目标属性。有三种类型,0,1,2

  步骤3:建立一个模型(世界上三行代码线)

  说明:模型得分为0.9259,这非常好。

  步骤4:画这棵树

  说明:上图是决策树选择的一些属性,以及这些属性创建的分类树。

  我们可以打印每个属性的重要性吗?答案还可以

  它更直观吗?

  在这一点上,您是工作吗?

  当然,这仅仅是开始,我们仍然有更重要的工作要做。

  多次运行上述建模代码,您会发现每次分数的值不同。

  那为什么不稳定?这是所有数据集吗?

  这是因为决策树模型的计算步骤

  纯净是根据节点计算的,即,当制定树木正在建造树木时,它们正在通过优化节点来追求优化的树。

  但是,最佳节点可以确保最好的树吗?

  这是一个问题,但是集成的算法解决了这个问题

  Sklearn说,由于一棵树无法保证最好的东西,请建造更多不同的树木,然后尽力而为。

  如何从一组数据集中构建不同的树?

  当每个分支被划分时,不使用整个特征,而是随机选择一部分特征,作为与杂质相关的最佳指标的分支节点选择的节点。

  这样,每棵树都是不同的。

  说明:这里的分数将定为0.925,无论您运行多少次,它都不会改变,因为每次都是您选择的最好的树。

  Random_State用于在分支中设置随机模式的参数,默认没有

  当高维时,随机性将更加明显。低维数据(例如虹膜数据集),几乎不会出现随机性。

  对于Iris Flower数据集,输入任意整数,同一树将始终生长以稳定模型。由于数据集太小,因此数据的质量太高。

  这也回答了为什么我在本文中不使用虹膜花数据集。

  分离器还用于控制决策树中的随机选项。有两个输入值

  输入“最佳”。尽管当分支被拆分时,决策树是随机的,但仍将为分支选择更多重要功能(可以通过属性feature_importances_可以查看重要性)

  输入“随机”,在分支时,决策树将更加随机。这棵树将越来越大,因为它包含更多不必要的信息,并且由于这些不必要的信息而减少了训练集的合适集合。

  这也是防止过度拟合的一种方法。当您预测模型适合时,请使用这两个参数来帮助您减少树木完成后安装的可能性。

  当然,一旦树完工,我们仍然使用修剪参数来防止过度拟合。

  让我们实验:

  说明:我们得到的分数为0.944

  让我们看一下图片

  说明:这棵树如何变得越来越深!

  没有限制,决策树将成长为杂质的最佳指标,或者没有更多的功能。

  这样的决策树经常过度合适,这意味着它在训练集中表现良好,但是在测试集中表现良好。

  我们收集的样本数据不能与整体情况完全相同,因此,当决策树对培训数据有很好的解释时

  它发现的规则必须包含训练样本中的噪声,并且不足以适合未知数据。

  不相信吗?让我们现在看一下我们的模型:

  说明:请参阅,我们的模型是否对训练集太好了,这很容易引起合身。

  那么您如何解决这个问题?

  当我们有一锅植物时,当植物被涂抹时,我们该怎么办?是否有必要切割修剪!

  为了使决策树更好地概括,我们需要切割决策树。

  修剪策略对制定树木的影响是巨大的。正确的修剪策略是优化决策树算法的核心。

  Sklearn为我们提供了不同的修剪策略:

  max_depth:

  将树的最大深度切断所有设置深度的分支。这是使用最广泛的修剪参数,当高维和低样本时非常有效。

  制定树的生长超过一层,对样品的需求将翻倍,因此树的深度可以有效地限制配件。

  在综合算法中,它在实际使用中也非常实用,建议从= 3尝试一下,以查看是否决定增加设定的深度。

  min_samples_leaf&min_samples_split:

  min_samples_leaf是有限的。节点的每个子节点必须至少包含min_samples_leaf训练样本,否则分支部门将不会发生

  或者,分支将沿满足包含min_samples_leaf样品的每个子节点的方向出现。

  返回树中有一个神奇的效果,可以使模型更光滑。

  该参数的数量设置得太小,这将导致拟合。如果太大,它将阻止模型学习数据。

  一般而言,建议使用它从= 5使用。如果叶子节点中包含的样品量发生很大变化,建议将浮点数作为样品量百分比输入浮点数。

  同时,此参数可以确保每个叶子的最小尺寸,并避免回归问题的差异较低。对于小类的分类问题,服用1通常是最佳选择。

  min_samples_split Limited,一个节点必须至少包含min_samples_split训练样本,该样品可以由该节点进行分支,否则将不会发生分支。

  让我们看看一个例子:

  说明:max_depth = 3,min_samples_leaf = 5,min_samples_split =5。观察上图,您会发现深度不超过3,分支后每个节点的样品不少于5,每个节点都分为5在该点处的每个截面的结的结不小于5。

  因此,让我们看看效果如何

  说明:树变得更简单,但是模型得分仍然不错。

  max_features&min_impurity_decrease:

  通常,max_depth用作树的树“ max_features限制分支,并且超过限制数的功能将被放弃。

  类似于max_depth,max_features是用于限制高维数据的修剪参数

  但是,它的方法更加暴力,它直接限制可以使用并强行制作决策树停止参数的功能数量

  由于决策树特征的特征的重要性,强行设置此参数可能会导致模型学习不足。

  如果要防止缩小尺寸过度拟合,建议使用PCA,ICA或功能选择模块。

  min_impurity_decrease限制了信息增益的大小,并且信息增益小于设定值的分支。

  这是版本0.19中更新的功能,使用MIN_IMPURITY_SPLIT版本0.19。

  确认最佳修剪参数:

  那么如何确定每个参数填充什么值?

  目前,我们需要使用超级循环的曲线来做出判断,并继续使用我们已经训练过的决策树模型CLF。

  超级参数的学习曲线是一条使用Super -Requions的值作为水平坐标的线,并且模型的测量指数是垂直坐标的曲线。这是一条用于测量不同参数下模型性能的行。

  在我们构建的决策树中,我们的模型测量指标是得分。

  说明:水平坐标为max_depth,垂直坐标为得分。从图中,我们可以看到,当max_depth占3时,该模型得分最高。

  那么,可以在测试集中改善修剪参数吗?

  没有什么绝对的回答,一切都是为了查看数据本身,呵呵

  有这么多参数,我们是否想逐一绘制学习曲线?这不是很累吗?

  我将在随后的文章中回答这个问题。

  无论如何,修剪参数的默认值将使树无休止地生长

  这些树在某些数据集上可能很大,并且记忆的消耗也非常大。

  因此,如果您手中的数据集很大,您已经预测您还是想切割修剪

  然后预先设置这些参数以控制树的复杂性和大小。

  class_weight&min_weight_fraction_leaf:

  完成样本标签余额的参数。样本不平衡是指一组数据浓度中的一组数据。标签的类型固有地占据很大比例。

  例如,在银行中,有必要确定“拥有信用卡的人会违反合同”是否是vs no(1%:99%)的比例。

  在这种分类情况下,即使模型不做任何事情,结果也可以预测为“否”,准确率可以为99%。

  因此,我们需要使用class_weaight参数来使样本标签的一定平衡,给出少量标签的权重,使模型对少数数字更加偏见,并建模捕获少量类别的方向。

  此参数默认为无,这意味着所有自动给出数据浓度的标签具有相同的权重。

  重量后,样品体积不再简单地记录了数字,而是受输入重量的影响

  因此,此时,需要将分支与Min_ stoge_fraction_leaf(一个重度修剪参数)一起使用。

  另请注意,基于权重(例如MinWeight Fraction_leaf)的权重 - 切割参数将比样本权重(例如Min_Samples_Leaf)的标准较小。

  如果样品是加权的,则更容易地使用基于权重的预制标准优化树结构,从而确保叶子节点至少包含样品重量的一小部分。

  2.2重要属性和接口

  属性是模型训练后可以调用的模型的性质。

  对于制定树木的树木,最重要的是功能重要性,可以查看每个功能对模型的重要性。

  Sklearn中的许多算法都是相似的。例如,我们以前使用过的FIFIT和得分几乎可以使用每个算法。

  除了这两个接口外,还应用并预测了决策树的最常见接口。

  在应用中,测试集返回每个测试样品所在的叶节点的索引,预测输入测试集返回每个测试样品的标签。

  回报的内容非常清楚而且很容易。如果您有兴趣,可以自己尝试。

  我必须在这里提到的是,所有接口都需要输入x_train和x_test的一部分,并且输入功能矩阵必须至少为两个维度矩阵。如果不接受任何尺寸矩阵作为特征矩阵,则不输入sklearn。

  如果您的数据确实只有一个功能,则必须使用Reshape(-1,1)为矩阵添加尺寸;

  如果您的数据只有一个功能和一个示例,请使用Reshape(1,-1)为数据添加尺寸。

  说明:我们得到了每个样品所在的叶子节点的索引

  说明:我们得到了每个样本的分类结果。

  在这一点上,我们已经完成了分类树决策类分类符的所有基础,并用use_graphviz以及制造树木制作了。

  我们解释了决策树的基本过程,分类树的八个参数,一个属性,四个接口以及用于绘图的代码。

  八个参数:

  标准,两个随机相关参数(Random_state,分离器),五个修剪参数(max_depth,min_samples_split,min_sampleaf,max_feature,max_impurity_decrease)。

  一个属性:featureimportans

  四个接口:fifit,得分,申请,预测

  接下来,在连续实验中,各种数据集的实际战斗肯定会变得更加精通!

  本文参考教程:CAI CAI的SK-LARN课程

  如果有不适当的写作或不正确的地方,我希望读者将包含更多

  如果您不了解上述内容,则可以留言并与Mao Mao讨论以共同取得进展!