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

问题描述 投票:1回答:1

我正在使用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

预测为蓝色,实际数据为橙色

我错过了什么吗?

linear-regression xgboost
1个回答
1
投票

我认为问题是模型没有收敛到配置和您选择的数据量的最佳值。 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(我在拟合函数中添加了评估,以了解它是如何变化的)。如果将样本数从7增加到70,则进一步减少到~0.1。

© www.soinside.com 2019 - 2024. All rights reserved.