XGBoost 回归 - 预测值超出训练范围

XGBoost regression - Predicted values out of training bounds

包含各种特征和回归目标(称为 qval)的数据集用于训练 XGBoost 回归器。该值 qval 介于 0 和 1 之间,应具有以下分布:

到目前为止,还不错。但是,当我用 xgb.save_model() 保存模型并用 xgb.load_model() 重新加载它以在另一个数据集上预测这个 qval 时,预测的 qval 超出了 [0,1] 边界,如此处所示。

有人可以解释这是否正常,如果是,为什么会这样?从我的角度来看,可能只是计算 qval 的“方程式”(这里是非常糟糕的词)是在某些数据上训练的,而权重并没有真正考虑到 [0,1] 边界。因此,当将这些“权重”应用于新数据时,结果超出范围。不过不完全确定。

是的,xgboost 可以在训练标签范围之外进行预测。

from sklearn.datasets import make_classification
from sklearn.ensemble import GradientBoostingRegressor

X, y = make_classification(random_state=42)

gbm = GradientBoostingRegressor(max_depth=1,
                                n_estimators=10,
                                learning_rate=1,
                                random_state=42)
gbm.fit(X,y)
preds = gbm.predict(X)
print(preds.min(), preds.max())
# Output
#-0.010418732339562916 1.134566081403055

这可能意味着您的测试集与训练集不同。

对于随机森林和决策树,这不会发生。

这种现象与增强集成及其工作原理有关。