python - 通过更改 XGBClassifier 的 random_state 来更改模型性能
问题描述
我为我的分类问题训练了一个 XGBClassifier,并使用 optuna 对巨大的网格进行了超参数调整(可能调整了每个可能的参数)。在测试时,random_state 的变化会改变模型性能指标(roc_auc/recall/precision)、feature_importance 甚至模型预测(predict_prob)。
- 这告诉我关于我的数据的什么信息?
由于我必须在生产中使用这个模型,我应该如何解决这个问题以使模型更健壮?
- 使用我们在 cross_validation 期间使用的一个 random_state(例如默认值 0)并在样本外使用它。
- 在 cross_validation 期间,在每个 param_combination 之上,运行一些 random_state(比如 10)并获取 avg 模型性能。
解决方案
我倾向于认为,如果模型对随机种子敏感,它就不是一个很好的模型。使用 XGB 可以尝试添加更多估算器 - 这有助于使其更加稳定。
对于具有随机种子的任何模型,对于每个候选参数选项集(通常已经过滤到候选候选名单),我倾向于对不同随机种子的相同数据运行一堆重复并测量输出的差异。我希望评估指标的标准差很小(相对于均值),并且每个类中预测的重叠度非常高。如果其中任何一个都不是我不接受该模型的情况。如果是这种情况,我只是随机选择一个候选模型——随机种子是什么并不重要!
我仍然记录使用的随机种子 - 这仍然需要重新创建结果!
推荐阅读
- node.js - 如何在 Nest JS 框架中实现 e2e 测试
- mysql - 在mysql表中插入一个json数组
- mysql - 在 SQL 中,我可以得到一组数字的平均值,但只针对那些具有匹配标签的记录?
- excel - 来自不同用户的位于 OneDrive 上的 Excel 工作簿的 Excel 查询
- fpga - FPGA 到 DMA 到 RDMA
- url - 从 odoo 应用程序发送图像时,图像未在电子邮件中正确加载
- reactjs - 显示文本区域单词的图表问题。反应 - Firebase
- c# - 通过 .Net core 3.1 中的 Web 浏览器公开控制台应用程序信息
- java - 如何在 MySQL 中自动生成产品 SKU?
- android - 如何更改后退箭头的颜色