关于xgboost sklearn api plot_tree()的困惑

时间:2019-03-15 06:01:13

标签: python xgboost

我正在尝试训练一个这样的样本。

X= [ [1 2]
[1 2]
[2 2]]
y = [5, 5 , 8]

我正在尝试使用下面的代码来训练样本

reg=XGBRegressor(max_depth=2,learning_rate=1.0, n_estimators=2,silent=False,objective=‘reg:linear’)
reg.fit(X,y)
plot_tree(reg,num_trees = 0)

然后我在下面有两棵树: trees

然后我输入测试样本X_test = [1,2]时感到困惑,因为

X_test=[1,2]
reg.predict(X_test) #print score = 4.875
Score with the trees structure above: 0.25 + 4.125 = 4.375

为什么?我的操作有什么问题吗?

1 个答案:

答案 0 :(得分:0)

解决方案:使用参数XGBRegressor声明您的base_score=0

根据您对评论的自我回答,xgboost.XGBRegressor(..., base_score)会产生偏见:

  • base_score –所有实例的初始预测得分,全局偏差。

(HTML)文档无济于事,没有告诉您其默认值,但这似乎是base_score = 0.5,至少这是命令行帮助似乎在说的。对于(两类)分类器而言,这很好,但是可以说对于回归器来说是一个可怕的默认值,更糟糕的是它没有被记录。

这似乎是一个合法的错误,请在sklearn上提出。


在不太可能的情况下,使用参数XGBRegressor声明base_score=0并不能解决问题,您可以尝试在fit()predict()上使用以下(文档不足的)参数方法(根据命令行文档):

  • fit(... base_margin=None, ...)
  • predict(..., output_margin=False, base_margin=None)