sklearn DecisionTreeClassifier 中 min_samples_split 和 min_samples_leaf 之间的区别
Posted
技术标签:
【中文标题】sklearn DecisionTreeClassifier 中 min_samples_split 和 min_samples_leaf 之间的区别【英文标题】:Difference between min_samples_split and min_samples_leaf in sklearn DecisionTreeClassifier 【发布时间】:2018-03-10 20:45:39 【问题描述】:我正在上sklearn课程DecisionTreeClassifier。
查看类的参数,我们有两个参数 min_samples_split 和 min_samples_leaf。它们背后的基本思想看起来很相似,您指定了决定一个节点是叶子节点还是进一步分裂所需的最小样本数。
当一个参数暗示另一个时,为什么我们需要两个参数?有什么理由或场景可以区分它们吗?
【问题讨论】:
discuss.analyticsvidhya.com/t/… @Abhishek,感谢您的链接。亚历克斯和链接现在都帮助我理解了它。 这里有另一个关于它的大讨论,包括图表github.com/scikit-learn/scikit-learn/issues/8399 【参考方案1】:来自文档:
两者的主要区别在于
min_samples_leaf
保证一个叶子中的样本数量最少,而min_samples_split
可以创建任意小叶子,尽管min_samples_split
在文献中更常见。
要掌握这篇文档,我认为您应该区分叶(也称为外部节点)和内部节点。内部节点将有进一步的分裂(也称为 children),而叶子根据定义是没有任何子节点的节点(没有任何进一步的分裂)。
min_samples_split
指定分裂一个内部节点 所需的最小样本数,而min_samples_leaf
指定一个叶 节点所需的最小样本数.
例如,如果min_samples_split = 5
,并且内部节点有7个样本,则允许拆分。但是,假设拆分结果是两片叶子,一张有 1 个样本,另一个有 6 个样本。如果min_samples_leaf = 2
,则不允许拆分(即使内部节点有 7 个样本),因为其中一个叶子的样本数量少于叶子节点所需的最小样本数。
正如上面引用的文档所述,min_samples_leaf
保证每个叶子中的样本数量最少,无论min_samples_split
的值如何。
【讨论】:
谢谢@Alex。我现在明白了。 min_samples_split 不保证叶节点中的最小样本,但 min_samples_leaf 可以。 但是在使用 RandomForestClassifier 进行二元分类的情况下,如果叶节点有超过 1 个样本(数据点),比如说两个,如何做出决定,它们属于哪个类? 0级还是1级?他们是 2,我们不能说是 1 类还是 2 类。还是我错了? @ZelelB 根据定义,如果样本最终位于叶节点中,则它们被归类为具有相同的类别。 min_samples_leaf == 2 的动机是什么?【参考方案2】:两个参数会产生相似的结果,不同的是观点。
min_samples_split 参数将评估节点中的样本数量,如果数量小于最小值,将避免拆分,节点将成为叶子。
min_samples_leaf 参数在节点生成之前检查,即如果可能的分裂导致子节点样本较少,则将避免分裂(因为子节点的最小样本数未到达叶子节点),节点将被叶子节点替换。
在所有情况下,当我们的样本在一个叶子中包含多个类时,根据在训练中达到的样本,最终类将最有可能发生。
【讨论】:
【参考方案3】:在决策树中,可以设置许多规则来配置树应该如何结束。粗略地说,还有更多面向“设计”的规则,例如 max_depth。 Max_depth 更像是在你盖房子的时候,建筑师问你房子要几层。
其他一些规则是“防御性”规则。我们经常称它们为停止规则。 min_samples_leaf 和 min_samples_split 属于这种类型。已经提供的所有解释都说得很好。我的分:构建树时规则交互。例如,min_samples_leaf=100,你很可能最终得到所有终端节点都大于 100 的树,因为其他规则开始阻止树扩展。
【讨论】:
【参考方案4】:min_sample_split 告诉上面的最小数量。样品要求。拆分内部节点。如果取整数值,则将 min_samples_split 视为最小值。如果浮动,则显示百分比。默认情况下,它取“2”值。
min_sample_leaf 是叶节点所需的最小样本数。如果取整数值,则将 -min_samples_leaf 视为最小编号。如果浮动,则显示百分比。默认情况下,它取“1”值。
【讨论】:
以上是关于sklearn DecisionTreeClassifier 中 min_samples_split 和 min_samples_leaf 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章