sklearn.tree.DecisionTreeRegressor:树的深度大于max_leaf_nodes!= None

时间:2019-05-14 14:07:22

标签: python machine-learning scikit-learn decision-tree

我目前正在处理一个预测问题,当我遇到以下问题时,我试图用scikit-learns DecisionTreeRegressor解决这个问题:

  

在拟合同时指定参数max_depth和   max_leaf_nodes,结果树的depthmax_depth+1。   当拟合仅指定max_depth的树时,结果树   有correct depth

这可能是DecisionTreeRegressor class中的错误,还是我缺少有关回归树的一些常识?

我正在python 3.7 jupyter笔记本中的Windows机器上工作。 Sklearn版本为0.20.3。 实际上,我在RandomForestRegressor上遇到了这个问题,但是发现DecisionTreeRegressor遇到了同样的问题。

我写了下面的简化示例,因此您可以尝试一下。只需取消注释max_leaf_nodes=10

我还使用graphviz可视化了树木,实际上显示了不同深度的树木。

import numpy as np
from sklearn.tree import DecisionTreeRegressor

X = np.random.rand(10,4)
y = np.random.rand(10,1)


tree = DecisionTreeRegressor(max_depth = 2,
                             #max_leaf_nodes = 10 
                             )
tree.fit(X,y)

print(tree.tree_.max_depth)

感谢您的任何评论。

1 个答案:

答案 0 :(得分:1)

尽管未记录,但如果未设置max_leaf_nodes,则将使用DepthFirstTreeBuilder来容纳基础树对象;如果是,则将使用BestFirstTreeBuilder;这种差异导致生成了不同深度的树木。

这是特定于实现的细节,而不是因为决策树的特定特征。

顺便说一句,我要注意的是,最大叶节点数也限制了最大深度。