【发布时间】:2019-03-15 06:01:12
【问题描述】:
我对 xgboost 回归器预测的分数似乎存在差异感到困惑。
我在三样本训练集上训练模型:
X = [[1 2],
[1 2],
[2 2]]
y = [5, 5, 8]
...使用此代码:
reg = XGBRegressor(n_estimators=2,max_depth=2,learning_rate=1.0, silent=False,objective=‘reg:linear’)
reg.fit(X,y)
plot_tree(reg, num_trees=0)
...这给了我两棵树,根据这个情节:plot of two trees
但是当我用测试样本X_test = [1,2] 进行预测时,我会感到困惑,因为:
X_test = [1,2]
reg.predict(X_test)
# print score = 4.875
但是上面绘制的树结构的分数应该是:0.25 + 4.125 = 4.375
为什么?我的操作有什么问题吗?
【问题讨论】:
-
好吧,我找到了答案。每个叶子输出都会添加一个 0.5 的全局偏差。您可以通过在训练时设置 base_score=0 来消除这种偏差。感谢@hcho3。
-
你的问题真的不清楚。令人困惑的是:您只能从三个样本生成一个两树模型?当您尝试预测时它的行为如何?别的东西?为了清楚起见,请编辑问题。另外,如果您回答了自己的问题,请发布您的自我回答。但只有在你首先澄清问题之后。我从中得到的唯一一件事是您的问题不是关于
sklearn api plot_tree(),因为这只是一个绘制您的树的API,并且它工作正常。但是您的问题是关于树本身,而不是绘图 API。 -
啊,我想你的意思是你的困惑是
predict()给你的值和你从绘制的两棵树预测时所期望的值之间存在差异。 -
诚然,如果
xgboost plot_tree()也在图中明确显示base_score偏差(如果非零),那将是一个很好的增强。但总的来说,我认为回归变量中的base_score是个坏消息。顺便说一句,plot_tree与 sklearn 无关,它在xgboost.plotting中实现(并基于graphviz绘图包,而不是matplotlib)
标签: python prediction xgboost