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

mis*_*Not 5 python machine-learning xgboost

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

train是一个熊猫数据框,具有10万行和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)
Run Code Online (Sandbox Code Playgroud)

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

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

我还使用相同的数据尝试了sklearn的RandomForest回归,它确实给出了真实的预测。也许是xgboost实现中的合法错误?

Bla*_*ane 6

此问题已收到多个回复,包括在此线程以及此处此处

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

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

我遇到的其他建议解决方案都没有对我有帮助。总结包括的一些建议解决方案:1) 检查 gamma 是否太高 2) 确保您的目标标签不包含在您的训练数据集中 3) max_depth 可能太小。


小智 0

max_depth =3 会不会太小了,试试把它调大吧,如果我没记错的话,默认值是7。并将silent设置为1,然后你可以监控每个epoch的错误是什么