通过更改XGBClassifier的random_state更改模型性能

问题描述 投票:0回答:2

我针对分类问题训练了XGBClassifier,并使用optuna在巨大的网格上进行了超参数调整(可能调整了每个可能的参数)。在测试期间,random_state的更改会更改模型性能指标(roc_auc / recall / precision),feature_importance甚至模型预测(predict_prob)。

  1. 这告诉我有关我的数据的什么信息?

由于我必须在生产中使用此模型,因此我应该如何解决这个问题以使模型更可靠?

  1. 在交叉验证期间使用一个random_state(假设默认值为0),并在样本外也使用它。
  2. 在交叉验证期间,在每个param_combination的顶部,运行几个random_state(例如10)并获得avg模型性能。
python xgboost feature-selection xgbclassifier
2个回答
0
投票

random_state参数仅在每次运行模型时帮助复制结果。由于您使用的是cross_validation,假设它是k倍,那么您所有的数据都将投入训练和测试,而CV分数将始终是您决定的折数的平均值。我相信您可以设置任何random_state并引用CV的结果。


0
投票

这是我的两分钱。用一粒盐来回答这个问题。

XGB分类器是一种增强算法,它自然取决于随机性(例如,随机森林也是如此)。因此,更改种​​子会从本质上改变模型的训练及其输出。不同的种子也会改变CV分割并进一步改变结果。

此外,boosting旨在减少方差,因为它使用了多个模型(装袋),同时它减少了偏差,因为它基于先前模型的误差训练了每个后续模型(boosting部分)。但是,提升模型原则上可能会过拟合。实际上,如果您的基础学习者不弱,则很容易使数据过拟合,并且以后的模型也不会存在任何残差或错误。

现在,对于您的问题,您应该首先确认您没有对数据过度拟合模型。

然后,您可能想要修复一定数量的种子(您仍然希望能够再现结果,因此修复它们很重要)并平均从种子中获得的结果。

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