我目前正在处理一个预测问题,我尝试使用scikit-learn的DecisionTreeRegressor
来解决这个问题,遇到了以下问题:
当同时指定
max_depth
和max_leaf_nodes
参数来拟合树时,生成的树的深度
为max_depth+1
。当仅指定max_depth
时,生成的树具有正确的深度
。
这是否是DecisionTreeRegressor类
中的一个错误,还是我错过了关于回归树的一些常识?
我在一台Windows机器上工作,使用的是Python 3.7的Jupyter笔记本。Sklearn版本是0.20.3。实际上,我在使用RandomForestRegressor
时发现了这个问题,但也发现了DecisionTreeRegressor
存在相同的问题。
我编写了以下简化的示例,您可以自己尝试。只需取消注释max_leaf_nodes=10
即可。
我还使用graphviz
可视化了这些树,实际上显示了不同深度的树。
感谢任何评论。
回答:
尽管没有文档说明,如果未设置max_leaf_nodes
,将使用DepthFirstTreeBuilder
来拟合底层的树对象;如果设置了,则使用BestFirstTreeBuilder
;这种差异导致生成的树具有不同的深度。
这是一个实现特定的细节,而不是因为决策树的特定特性导致的。
顺便提一下,我要指出,最大叶节点数也会限制最大深度。