我为我的分类问题训练了XGBClassifier,并使用optuna在巨大的网格上进行了超参数调整(可能调整了每个可能的参数)。在测试期间,random_state的更改会更改模型性能指标(roc_auc / recall / precision),feature_importance甚至模型预测(predict_prob)。
既然我必须在生产中使用该模型,那么应该如何处理才能使模型更可靠?
答案 0 :(得分:1)
这是我的两分钱。用一粒盐来回答这个问题。
XGB分类器是一种增强算法,它自然取决于随机性(例如,随机森林)。
因此,更改种子会从本质上改变模型的训练及其输出。
不同的种子也会改变CV分割并进一步改变结果。
此外,boosting的目的是减少方差,因为它使用了多个模型(装袋),同时降低了偏差,因为它基于先前模型的误差训练每个后续模型(boosting部分)。
但是,提升模型原则上可能会过拟合。
实际上,如果您的基础学习者不弱,则很容易使数据过拟合,并且以后的模型也不会存在任何残差或错误。
现在,对于您的问题,您应该首先确认您没有对数据过度拟合模型。
然后,您可能想要修复一定数量的种子(您仍然希望能够再现结果,因此对它们进行修复很重要),并平均从种子中获得的结果。
答案 1 :(得分:1)
我倾向于认为该模型是否对随机种子敏感,这不是一个很好的模型。使用XGB可以尝试添加更多估算器-有助于使其更稳定。
对于任何带有随机种子的模型,对于每个候选参数选项集(通常已经过滤到候选列表),我倾向于对相同数据针对不同的随机种子运行一堆重复操作,并测量输出。我期望评估指标标准偏差较小(相对于均值),并且每个类别中预测的重叠都非常高。如果这两种情况都不是,我将不接受该模型。如果是这样,我只是随机选择一个候选模型-随机种子是什么都不要紧!
我仍然记录使用的随机种子-仍需要重新创建结果!
答案 2 :(得分:0)
random_state参数仅在每次运行模型时帮助复制结果。 由于您使用的是cross_validation,假设它是k倍,那么您所有的数据都将投入训练和测试,而CV分数将始终是您决定的折数的平均值。我相信您可以设置任何random_state并引用CV的结果。