【发布时间】:2021-01-03 08:10:06
【问题描述】:
在使用 RandomForestRegressor 时,我发现了一些奇怪的东西。为了说明问题,这里举一个小例子。我在测试数据集上应用了 RandomForestRegressor 并绘制了森林中第一棵树的图形。这给了我以下输出:
Root_node:
mse=8.64
samples=2
value=20.4
Left_leaf:
mse=0
samples=1
value=24
Right_leaf:
mse=0
samples=1
value=18
首先,我希望根节点的值为(24+18)/2=21。但不知何故它是20.4。
但是,即使这个值是正确的,我如何获得 8.64 的 mse?
在我看来应该是:1/2[(24-20.4)^2+(18-20.4)^2]=9.36(假设根值 20.4 是正确的)
我的解决方案是:1/2[(24-21)^2+(18-21)^2]=9。如果我只使用 DecisionTreeRegressor,这也是我得到的。
RandomForestRegressor 的实现有问题还是我完全错了?
这是我的可重现代码:
import pandas as pd
from sklearn import tree
from sklearn.ensemble import RandomForestRegressor
import graphviz
# create example dataset
data = {'AGE': [91, 42, 29, 94, 85], 'TAX': [384, 223, 280, 666, 384], 'Y': [19, 21, 24, 13, 18]}
df = pd.DataFrame(data=data)
x = df[['AGE','TAX']]
y = df[['Y']]
rf_reg = RandomForestRegressor(max_depth=2, random_state=1)
rf_reg.fit(x,y)
# plot a single tree of forest
dot_data = tree.export_graphviz(rf_reg.estimators_[0], out_file=None, feature_names=x.columns)
graph = graphviz.Source(dot_data)
graph
和输出图:
【问题讨论】:
标签: python machine-learning scikit-learn random-forest