我是靠谱客的博主 悦耳冰棍,最近开发中收集的这篇文章主要介绍sklearn中决策树初始化 DecisionTreeClassifier 的参数说明,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

criterion

        特征选择标准,可选参数,默认是gini,可以设置为entropy。gini是基尼指数,entropy是信息熵(香农熵)

  • ID3算法使用的是 信息熵
  • C4.5用的信息增益比
  • CART算法使用的则是 基尼指数

        注意,sklearn 中实现的决策树是 CART 的,那怕你该参数为 entropy,也只是几乎等同与 ID3 ,请参考这个讨论 python sklean中的决策树是用的哪一种决策树算法?

       

splitter

        特征划分点选择标准,可选参数,默认是best,可以设置为random。best参数是根据某种标准选择最佳的切分特征,例如gini、entropy。random随机的在部分划分点中找局部最优的划分点。默认的”best”适合样本量不大的时候,而如果样本数据量非常大,此时决策树构建推荐”random”。

       

max_features

        划分时考虑的最大特征数,可选参数,默认是None。寻找最佳切分时考虑的最大特征数(n_features为总共的特征数),有如下6种情况:

  • 如果max_features是整型的数,则考虑max_features个特征;

  • 如果max_features是浮点型的数,则考虑int(max_features * n_features)个特征;

  • 如果 max_features 设为 auto,那么max_features = sqrt(n_features);

  • 如果 max_features 设为 sqrt,那么max_featrues = sqrt(n_features),跟auto一样;

  • 如果 max_features 设为 log2,那么max_features = log2(n_features);

  • 如果 max_features 设为 None,那么max_features = n_features,也就是所有特征都用。

        一般来说,如果样本特征数不多,比如小于50,我们用默认的”None”就可以了,如果特征数非常多,我们可以灵活使用刚才描述的其他取值来控制划分时考虑的最大特征数,以控制决策树的生成时间。

       

max_depth

        决策树最大深度,可选参数,默认是None。这个参数是这是树的层数的。如果这个参数设置为None,那么决策树在建立子树的时候不会限制子树的深度。一般来说,数据少或者特征少的时候可以不管这个值。或者如果设置了 min_samples_slipt 参数,那么直到少于min_smaples_split个 样本为止。如果模型样本量多,特征也多的情况下,推荐限制这个最大深度,具体的取值取决于数据的分布。常用的可以取值10-100之间。

       

min_samples_split

        内部节点再划分所需最小样本数,可选参数,默认是2。这个值限制了子树继续划分的条件。

  • 如果 min_samples_split 为整数,那么在切分内部结点的时候,min_samples_split作为最小的样本数,也就是说,如果样本已经少于 min_samples_split 个样本,则停止继续切分。
  • 如果min_samples_split为浮点数,那么 min_samples_split 就是一个百分比,ceil(min_samples_split * n_samples),数是向上取整的。

        如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。

       

min_samples_leaf

        默认是1 ,在一个叶节点上所需的最小样本数。在任何深度上的分裂点只有在它在每个左右分支中至少留下min_samples_leaf训练样本时才会被考虑。

        上面三个参数主要用来约束树的复杂度,可以理解成剪枝

min_weight_fraction_leaf

        叶子节点最小的样本权重和,可选参数,默认是0。这个值限制了叶子节点所有样本权重和的最小值,如果小于这个值,则会和兄弟节点一起被剪枝。一般来说,如果我们有较多样本有缺失值,或者分类树样本的分布类别偏差很大,就会引入样本权重,这时我们就要注意这个值了。

       

max_leaf_nodes

        最大叶子节点数,可选参数,默认是None。通过限制最大叶子节点数,可以防止过拟合。如果加了限制,算法会建立在最大叶子节点数内最优的决策树。如果特征不多,可以不考虑这个值,但是如果特征分成多的话,可以加以限制,具体的值可以通过交叉验证得到。

       

class_weight

:类别权重,可选参数,默认是None,也可以字典、字典列表、balanced。指定样本各类别的的权重,主要是为了防止训练集某些类别的样本过多,导致训练的决策树过于偏向这些类别。类别的权重可以通过{class_label:weight}这样的格式给出,这里可以自己指定各个样本的权重,或者用balanced,如果使用balanced,则算法会自己计算权重,样本量少的类别所对应的样本权重会高。当然,如果你的样本类别分布没有明显的偏倚,则可以不管这个参数,选择默认的None。

       

random_state

        可选参数,默认是None。随机数种子。

       

min_impurity_split

        节点划分最小不纯度,可选参数,默认是1e-7。这是个阈值,这个值限制了决策树的增长,如果某节点的不纯度(基尼系数,信息增益,均方差,绝对差)小于这个阈值,则该节点不再生成子节点。即为叶子节点 。

       

presort

        数据是否预排序,可选参数,默认为False,这个值是布尔值,默认是False不排序。一般来说,如果样本量少或者限制了一个深度很小的决策树,设置为true可以让划分点选择更加快,决策树建立的更加快。如果样本量太大的话,反而没有什幺好处。问题是样本量少的时候,我速度本来就不慢。所以这个值一般懒得理它就可以了。

       

最后的碎碎念

        当样本数量少但是样本特征非常多的时候,决策树很容易过拟合,一般来说,样本数比特征数多一些会比较容易建立健壮的模型如果样本数量少但是样本特征非常多,在拟合决策树模型前,推荐先做维度规约,比如主成分分析(PCA),特征选择(Losso)或者独立成分分析(ICA)。这样特征的维度会大大减小。再来拟合决策树模型效果会好。其中特征选择就是我在做的一个工作

最后

以上就是悦耳冰棍为你收集整理的sklearn中决策树初始化 DecisionTreeClassifier 的参数说明的全部内容,希望文章能够帮你解决sklearn中决策树初始化 DecisionTreeClassifier 的参数说明所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部