确定 sklearn 决策树中的拆分数量

Posted

技术标签:

【中文标题】确定 sklearn 决策树中的拆分数量【英文标题】:Determine the amount of splits in a decision tree of sklearn 【发布时间】:2018-09-15 06:47:56 【问题描述】:

我在 Matlab 中使用“fitctree”函数开发了一个决策树(集成)(链接:https://de.mathworks.com/help/stats/classificationtree-class.html)。

现在我想在 python 中重建相同的集合。因此,我使用带有“DecisionTreeClassifier”的 sklearn 库(链接:http://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html)。

在 Matlab 中,我通过设置定义了每棵树中的最大拆分数量: 'MaxNumSplits' - “fitctree”函数中的最大决策拆分数。 因此可以定义分支节点的数量。

现在我了解了“DecisionTreeClassifier”对象的属性,没有这样的选项。我对吗?我发现控制每棵树中节点数量的只是“max_leaf_nodes”,它显然控制了叶节点的数量。

其次:“max_depth”究竟控制什么?如果不是“None”,整数“max_depth = int”代表什么?

感谢您的帮助和建议。谢谢!

【问题讨论】:

【参考方案1】:

据我所知,在 scikit-learn 中没有限制拆分(节点)总数的选项。但是,您可以将max_leaf_nodes 设置为MaxNumSplits + 1,结果应该是相同的。

假设我们的树有n_split 分裂节点和n_leaf 叶节点。如果我们分裂一个叶子节点,我们把它变成一个分裂节点并添加两个新的叶子节点。所以n_splitsn_leafs 都增加1。我们通常只从根节点开始(n_splits=0n_leafs=1),每次拆分都会增加两个数字。因此,叶子节点的数量总是n_leafs == n_splits + 1

至于max_depth;深度是树有多少“层”。换句话说,深度是根节点和最远叶节点之间的最大节点数。 max_depth 参数限制了这个深度。如果节点离树太远,它可以防止进一步拆分节点。 (您可以将max_depth 视为在做出决定之前对拆分次数的限制。)

【讨论】:

感谢您的回答。你的解释在我看来是合乎逻辑的。我尝试过这个。但是,我没有达到与我在 matlab 中开发的相同的决策树集合。这肯定会受到两个 IDE 之间其他一些小差异的影响。但没关系。我不会浪费时间创建与 Matlab 中完全相同的分类器。 ;)

以上是关于确定 sklearn 决策树中的拆分数量的主要内容,如果未能解决你的问题,请参考以下文章

如何解释sklearn决策树树中的children_left属性_

CART 决策树中的冲突拆分

决策树中特定类的 Sklearn 决策规则

如何在 sklearn 决策树中显示特征名称?

是否可以使用 scikit-learn 指定决策树中的拆分顺序?

从 SKlearn 决策树中检索决策边界线(x,y 坐标格式)