Python 通过改变XGBU分类器的随机_状态来改变模型性能

Python 通过改变XGBU分类器的随机_状态来改变模型性能,python,xgboost,feature-selection,xgbclassifier,Python,Xgboost,Feature Selection,Xgbclassifier,我为我的分类问题训练了一个XGBClassifier,并使用optuna在巨大的网格上进行了超参数调优(可能调优了所有可能的参数)。在测试过程中,随机状态的变化会改变模型性能指标(roc\u auc/召回率/精度)、特征重要性甚至模型预测(预测概率) 关于我的数据,这说明了什么 既然我必须在生产中使用这个模型,我应该如何处理这个问题以使模型更加健壮 在交叉验证期间使用一个随机_状态(假设默认值为0),并在样本外使用它 在交叉验证期间,在每个参数组合的顶部,运行几个随机状态(比如10),并获取平均

我为我的分类问题训练了一个XGBClassifier,并使用optuna在巨大的网格上进行了超参数调优(可能调优了所有可能的参数)。在测试过程中,随机状态的变化会改变模型性能指标(roc\u auc/召回率/精度)、特征重要性甚至模型预测(预测概率)

  • 关于我的数据,这说明了什么
  • 既然我必须在生产中使用这个模型,我应该如何处理这个问题以使模型更加健壮

  • 在交叉验证期间使用一个随机_状态(假设默认值为0),并在样本外使用它
  • 在交叉验证期间,在每个参数组合的顶部,运行几个随机状态(比如10),并获取平均模型性能

  • random_state参数有助于在每次运行模型时复制结果。
    由于您使用的是交叉验证,假设它是k倍,那么您的所有数据都将进入训练和测试,CV分数将是您决定的折叠数的平均值。我相信你可以设置任何随机状态并引用CV的结果。

    这是我的两分钱。对答案持保留态度

    XGB分类器是一种boosting算法,它自然依赖于随机性(例如,随机林也是如此)。 因此,改变种子将内在地改变模型的训练及其输出。
    不同的种子也会改变CV分割,并进一步改变结果

    此外,boosting的目的是减少方差,因为它使用多个模型(bagging),同时它在基于先前模型的误差(boosting部分)训练每个后续模型时减少偏差。 但是,原则上,增压模式可能会过度匹配。
    事实上,如果你的基础学习者不是弱者,那么它很容易过度拟合数据,并且不会有任何残差或错误供后续模型建立

    现在,对于您的问题,您应该首先验证您的模型是否与数据过度拟合


    然后你可能想要修正一定数量的种子(你仍然希望能够重现结果,所以修正它们很重要),并平均在种子上获得的结果。

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

    对于具有随机种子的任何模型,对于每个候选参数选项集(通常已筛选为候选候选列表),我倾向于对不同随机种子的相同数据运行一系列重复,并测量输出中的差异。我预计评估指标的标准偏差会很小(相对于平均值),并且每类预测的重叠会很高。如果这两种情况都不是这样,我就不接受这个模型。如果是这样的话,我只需随机选择一个候选模型——不管随机种子是什么


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

    你在训练时做过二次抽样吗?如果是这样的话,你当然会根据你选择的不同种子随机选择不同的变量。不同的重要性结果也可能暗示这一点。是的,子样本是要优化的参数之一。即使存在所有这些随机性,我们应该如何判断我们的模型是否稳健?