首页 > 解决方案 > XGBoost 回归 - 超出训练范围的预测值

问题描述

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

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

在此处输入图像描述

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

标签: pythonregressionxgboost

解决方案


是的,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

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

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

这种现象与 boosting ensembling 及其工作原理有关。


推荐阅读