决策树DecisionTreeClassifier 参数详说

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了决策树DecisionTreeClassifier 参数详说相关的知识,希望对你有一定的参考价值。

参考技术A sklearn.tree.DecisionTreeClassifier ( criterion=’gini’ , splitter=’best’ , max_depth=None , min_samples_split=2 , min_samples_leaf=1 , min_weight_fraction_leaf=0.0 , max_features=None , random_state=None , max_leaf_nodes=None , min_impurity_decrease=0.0 , min_impurity_split=None , class_weight=None , presort=False )

criterion: 选择结点划分质量的度量标准,默认使用‘gini’,即基尼系数,基尼系数是CART算法中采用的度量标准,该参数还可以设置为 “entropy”,表示信息增益,是C4.5算法中采用的度量标准。

splitter: 结点划分时的策略,默认使用‘best’。‘best’ 表示依据选用的 criterion 标准 , 选用最优划分属性来划分该结点,一般用于训练样本数据量不大的场合,因为选择最优划分属性需要计算每种候选属性下划分的结果;该参数还可以设置为“random”,表示最优的随机划分属性,一般用于训练数据量较大的场合,可以减少计算量,但是具体如何实现最优随机划分暂时不太明白,这需要查看该部分的源码。

max_depth: 设置决策树的最大深度,默认为None。None表示不对决策树的最大深度作约束,直到每个叶子结点上的样本均属于同一类,或者少于 min_samples_leaf 参数指定的叶子结点上的样本个数。也可以指定一个整型数值,设置树的最大深度,在样本数据量较大时,可以通过设置该参数提前结束树的生长,改善过拟合问题,但一般不建议这么做,过拟合问题还是通过剪枝来改善比较有效。

min_samples_split: 当对一个内部结点划分时,要求该结点上的最小样本数,默认为2。

min_samples_leaf: 设置叶子结点上的最小样本数,默认为1。当尝试划分一个结点时,只有划分后其左右分支上的样本个数不小于该参数指定的值时,才考虑将该结点划分,换句话说,当叶子结点上的样本数小于该参数指定的值时,则该叶子节点及其兄弟节点将被剪枝。在样本数据量较大时,可以考虑增大该值,提前结束树的生长。

min_weight_fraction_leaf :在引入样本权重的情况下,设置每一个叶子节点上样本的权重和的最小值,一旦某个叶子节点上样本的权重和小于该参数指定的值,则该叶子节点会联同其兄弟节点被减去,即其父结点不进行划分。该参数默认为0,表示不考虑权重的问题,若样本中存在较多的缺失值,或样本类别分布偏差很大时,会引入样本权重,此时就要谨慎设置该参数。

max_features: 划分结点、寻找最优划分属性时,设置允许搜索的最大属性个数,默认为None。假设训练集中包含的属性个数为n,None表示搜索全部n个的候选属性;‘auto’表示最多搜索sqrt(n)个属性;sqrt表示最多搜索sqrt(n)个属性;‘log2’表示最多搜索log2(n)个属性;用户也可以指定一个整数k,表示最多搜索k个属性。需要说明的是,尽管设置了参数 max_features ,但是在至少找到一个有效(即在该属性上划分后, criterion 指定的度量标准有所提高)的划分属性之前,最优划分属性的搜索不会停止。

random_state : 当将参数 splitter 设置为‘random’时,可以通过该参数设置随机种子号,默认为None,表示使用np.random产生的随机种子号。

max_leaf_nodes : 设置决策树的最大叶子节点个数,该参数与 max_depth 等参数参数一起,限制决策树的复杂度,默认为None,表示不加限制。

min_impurity_decrease : 打算划分一个内部结点时,只有当划分后不纯度(可以用 criterion 参数指定的度量来描述)减少值不小于该参数指定的值,才会对该结点进行划分,默认值为0。可以通过设置该参数来提前结束树的生长。

min_impurity_split :  打算划分一个内部结点时,只有当该结点上的不纯度不小于该参数指定的值时,才会对该结点进行划分,默认值为1e-7。该参数值0.25版本之后将取消,由 min_impurity_decrease 代替 。

class_weight: 设置样本数据中每个类的权重,这里权重是针对整个类的数据设定的,默认为None,即不施加权重。用户可以用字典型或者字典列表型数据指定每个类的权重,假设样本中存在4个类别,可以按照 [0: 1, 1: 1, 0: 1, 1: 5, 0: 1, 1: 1, 0: 1, 1: 1] 这样的输入形式设置4个类的权重分别为1、5、1、1,而不是 [1:1, 2:5, 3:1, 4:1]的形式。该参数还可以设置为‘balance’,此时系统会按照输入的样本数据自动的计算每个类的权重,计算公式为:n_samples / ( n_classes * np.bincount(y) ),其中n_samples表示输入样本总数,n_classes表示输入样本中类别总数,np.bincount(y) 表示计算属于每个类的样本个数,可以看到,属于某个类的样本个数越多时,该类的权重越小。若用户单独指定了每个样本的权重,且也设置了 class_weight 参数,则系统会将该样本单独指定的权重乘以 class_weight 指定的其类的权重作为该样本最终的权重。

presort : 设置对训练数据进行预排序,以提升结点最优划分属性的搜索,默认为False。在训练集较大时,预排序会降低决策树构建的速度,不推荐使用,但训练集较小或者限制树的深度时,使用预排序能提升树的构建速度。

以上是关于决策树DecisionTreeClassifier 参数详说的主要内容,如果未能解决你的问题,请参考以下文章

sklearn库学习----决策树(分类树DecisionTreeClassifier)

如何返回在 sklearn 中由 DecisionTreeClassifier 创建的决策树中使用的特征

决策树DecisionTreeClassifier 参数详说

弄清楚为啥 scikit-learn DecisionTreeClassifier 决定从结果决策树中排除一个特征?

Spark DecisionTreeClassifier

决策树的深度取决于啥?