我目前正在处理一个预测问题,当我遇到以下问题时,我试图用scikit-learns DecisionTreeRegressor
解决这个问题:
在拟合同时指定参数
max_depth
和max_leaf_nodes
,结果树的depth
是max_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)
感谢您的任何评论。
答案 0 :(得分:1)
尽管未记录,但如果未设置max_leaf_nodes
,则将使用DepthFirstTreeBuilder
来容纳基础树对象;如果是,则将使用BestFirstTreeBuilder
;这种差异导致生成了不同深度的树木。
这是特定于实现的细节,而不是因为决策树的特定特征。
顺便说一句,我要注意的是,最大叶节点数也限制了最大深度。