我使用“fitctree”函数(链接:https://de.mathworks.com/help/stats/classificationtree-class.html)在Matlab中开发了一个决策树(集合)。
现在我想在python中重建相同的整体。因此我使用带有“DecisionTreeClassifier”的sklearn库(链接:http://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html)。
在Matlab中,我通过设置来定义每棵树中的最大分割数量: 'MaxNumSplits' - “fitctree”函数中决策拆分的最大数量。 因此,可以定义分支节点的数量。
现在我理解“DecisionTreeClassifier”对象的属性,没有像这样的选项。我对吗?我发现控制每棵树中节点数量的是“max_leaf_nodes”,它显然控制了叶子节点的数量。
其次:“max_depth”完全控制了什么?如果它不是“无”整数“max_depth = int”代表什么?
感谢您的帮助和建议。谢谢!
答案 0 :(得分:3)
据我所知,没有选项可以限制scikit-learn中的分割(节点)总数。但是,您可以将max_leaf_nodes
设置为MaxNumSplits + 1
,结果应该相同。
假设我们的树有n_split
个分割节点和n_leaf
叶节点。如果我们拆分叶节点,我们将其转换为拆分节点并添加两个新叶节点。因此n_splits
和n_leafs
都会增加1.我们通常只从根节点(n_splits=0
,n_leafs=1
)开始,每次拆分都会增加两个数字。因此,叶节点的数量始终为n_leafs == n_splits + 1
。
至于max_depth
;深度是树有多少“层”。换句话说,深度是根和最远叶节点之间的最大节点数。 max_depth
参数限制了此深度。如果节点在树下太远,它会阻止进一步拆分节点。 (在做出决定之前,您可以将max_depth
视为对分割数量的限制。)