通过更改XGBClassifier

时间:2019-12-13 08:39:44

标签: python xgboost feature-selection xgbclassifier

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

  1. 这对我的数据有什么启示?

既然我必须在生产中使用该模型,那么应该如何处理才能使模型更可靠?

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

3 个答案:

答案 0 :(得分:1)

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

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

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

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

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

答案 1 :(得分:1)

我倾向于认为该模型是否对随机种子敏感,这不是一个很好的模型。使用XGB可以尝试添加更多估算器-有助于使其更稳定。

对于任何带有随机种子的模型,对于每个候选参数选项集(通常已经过滤到候选列表),我倾向于对相同数据针对不同的随机种子运行一堆重复操作,并测量输出。我期望评估指标标准偏差较小(相对于均值),并且每个类别中预测的重叠都非常高。如果这两种情况都不是,我将不接受该模型。如果是这样,我只是随机选择一个候选模型-随机种子是什么都不要紧!

我仍然记录使用的随机种子-仍需要重新创建结果!

答案 2 :(得分:0)

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