xgboost predict方法为所有行返回相同的预测值

2024-05-15 23:56:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我用Python创建了一个xgboost分类器:

train是一个pandas数据框,有100k行和50个特征列。 目标是熊猫系列

xgb_classifier = xgb.XGBClassifier(nthread=-1, max_depth=3, silent=0, 
                                   objective='reg:linear', n_estimators=100)
xgb_classifier = xgb_classifier.fit(train, target)

predictions = xgb_classifier.predict(test)

但是,经过训练后,当我使用这个分类器预测值时,整个结果数组是相同的数字。知道为什么会这样吗?

数据澄清: 约50个带有数字目标的数字特征

我也尝试过用同样的数据从sklearn进行随机森林回归,它确实给出了现实的预测。可能是xgboost实现中的合法错误?


Tags: 数据目标pandas分类器train数字特征max
3条回答

此问题已收到多个响应,包括此线程以及herehere

我对XGBoost和LGBM都有类似的问题。对我来说,解决方案是增加训练数据集的大小。

我在一台本地机器上使用一个大型稀疏数据集(200000行和7000列)的随机样本(约0.5%)进行训练,因为我没有足够的本地内存用于该算法。结果对我来说,预测值的数组只是目标变量平均值的数组。这对我来说说明这个模型可能不合适。一个不合适模型的解决方案是在更多的数据上训练模型,所以我尝试在内存更大的机器上进行分析,问题得到了解决:我的预测数组不再是一个平均目标值数组。另一方面,问题可能只是我所看到的预测值片段是从信息很少的训练数据(如0和nan)中预测出来的。对于信息量很小的训练数据,预测目标特征的平均值是合理的。

我遇到的其他建议解决方案对我都没有帮助。总结一些建议的解决方案包括: 1) 检查伽马是否过高 2) 确保目标标签未包含在培训数据集中 3) 最大深度可能太小。

最大深度不会太小,如果我没记错的话,默认值是7。将silent设置为1,然后可以监视每个阶段的错误

其中一个原因是您通过参数gamma提供了一个很高的惩罚。比较你的训练反应变量的平均值,并检查预测是否接近这个值。如果是,则该模型对预测限制过多,以使列车rmse和val rmse尽可能接近。你的预测是最简单的,伽马值更高。所以你会得到最简单的模型预测,比如训练集的平均值,或者简单的预测。

相关问题 更多 >