sklearn DecisionTreeClassifier中min_samples_split和min_samples_leaf之间的差异

时间:2017-09-29 01:25:49

标签: python scikit-learn

我正在浏览sklearn课程DecisionTreeClassifier

查看该类的参数,我们有两个参数 min_samples_split min_samples_leaf 。它们背后的基本思想看起来很相似,您指定了将节点确定为叶子或进一步拆分所需的最小样本数。

为什么我们需要两个参数,一个意味着另一个?是否有任何理由或情景可以区分它们?

4 个答案:

答案 0 :(得分:28)

来自文档:

  

两者之间的主要区别在于min_samples_leaf保证了叶子中的最小样本数量,而min_samples_split可以创建任意小叶子,但min_samples_split在文献中更为常见

为了掌握这篇文档,我认为你应该区分 leaf (也称为外部节点)和内部节点< / strong>即可。内部节点将具有进一步的分割(也称为),而叶子根据定义是没有任何子节点的节点(没有任何进一步的分割)。

min_samples_split指定拆分内部节点所需的最小样本数,而min_samples_leaf指定 leaf所需的最小样本数< / em> node。

例如,如果min_samples_split = 5,并且内部节点上有7个样本,则允许拆分。但是,让我们说分裂结果有两个叶子,一个有1个样本,另一个有6个样本。如果min_samples_leaf = 2,则不允许拆分(即使内部节点有7个样本),因为得到的叶子之一将少于叶子节点所需的最小样本数。

正如上面提到的文档所述,min_samples_leaf保证每个叶子中的样本数量最少,无论min_samples_split的值是多少。

答案 1 :(得分:2)

两个参数都会产生相似的结果,不同之处在于观点。

min_samples_split 参数将评估节点中的样本数,如果该数目小于最小值,则将避免拆分,并且该节点将成为叶子。

min_samples_leaf 参数在生成节点之前进行检查,也就是说,如果可能的拆分导致子样本较少,则将避免拆分(因为该子样本的最小数量) (如果尚未到达叶子),则该节点将被叶子替换。

在所有情况下,当我们在一个叶子中有一个以上类别的样本时,根据训练中达到的样本,最终类别将最有可能发生。

答案 2 :(得分:0)

在决策树中,可以设置许多规则来配置树的结局方式。大约有更多面向设计的规则,例如max_depth。 Max_depth更像是在建造房屋时,建筑师会询问您要在房屋上铺几层。

其他一些规则是“防御性”规则。我们经常称它们为停止规则。 min_samples_leaf和min_samples_split属于这种类型。已经提供的所有解释都很好。我的想法:构建树时规则相互影响。例如,min_samples_leaf = 100,您很可能最终得到树,其中所有终端节点都远大于100,因为其他规则插入阻止了树的扩展。

答案 3 :(得分:0)

min_sample_split告知最小编号以上。的样品要求。拆分内部节点。如果采用整数值,则将min_samples_split视为最小值。如果为float,则显示百分比。默认情况下,它取“ 2”值。

min_sample_leaf是在叶节点处所需的最小样本数。如果采用整数值,则将--min_samples_leaf视为最小值。如果为float,则显示百分比。默认情况下,它的值为“ 1”。