您是否听说过“三个元素代码世界”一词
真的很强吗?
没错,你没听到错
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讨论以共同取得进展!