xgboost线性回归(gblinear)错误的预测

时间:2019-04-03 10:54:03

标签: linear-regression xgboost

我正在使用python xgboost库,并且无法使用 gblinear booster 获得一个简单的工作示例:

M = np.array([
    [1, 2],
    [2, 4],
    [3, 6],
    [4, 8],
    [5, 10],
    [6, 12],
])

xg_reg = xgb.XGBRegressor(objective ='reg:linear', booster='gblinear')

X, y = M[:, :-1], M[:, -1]
xg_reg.fit(X,y)

plt.scatter(range(-5, 20), [xg_reg.predict([i]) for i in range(-5, 20)])
plt.scatter(M[:,0], M[:,-1])
plt.show()

enter image description here

预测结果显示为蓝色,实际数据显示为橙色

我想念什么吗?

1 个答案:

答案 0 :(得分:0)

我认为问题在于模型无法根据您选择的配置和数据量收敛到最佳状态。 GBM不会使用增强模型直接拟合目标,而是拟合梯度,然后将预测的一部分(分数等于学习率)添加到上一步的预测中。

因此,显而易见的改进方法是:提高学习速度,增加迭代次数,增大数据大小。

例如,您的代码的这种变体已经给出了更好的预测:

X = np.expand_dims(range(1,7), axis=1)
y = 2*X

# note increased learning rate!
xg_reg = xgb.XGBRegressor(objective ='reg:linear', booster='gblinear', learning_rate=1)
xg_reg.fit(X, y, verbose=20, eval_set=[(X,y)])

plt.scatter(range(-5, 20), [xg_reg.predict([i]) for i in range(-5, 20)], label='prediction')
plt.scatter(X[:20,:], y[:20], label='target')
plt.legend()
plt.show()

这将导致训练数据的度量值为0.872(我已在fit函数中添加了评估以查看其变化)。如果您将样本数量从7增加到70,则可以进一步降低到〜0.1。