我正在尝试训练一个这样的样本。
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
为什么?我的操作有什么问题吗?
答案 0 :(得分:0)
解决方案:使用参数XGBRegressor
声明您的base_score=0
根据您对评论的自我回答,xgboost.XGBRegressor(..., 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)