使用 xgboost 处理极度不平衡

Posted

技术标签:

【中文标题】使用 xgboost 处理极度不平衡【英文标题】:Dealing with extremely imbalance with xgboost 【发布时间】:2021-05-29 12:42:17 【问题描述】:

我的训练数据有 100 个特征,类别非常不平衡 0:872525,1:3335。我使用 xgboost 构建具有贝叶斯优化的分类模型,以在 learning rate:(0.001,0.1), min_split_loss:(0.10), max_depth:(3,70), min_child_weight:(1:20), max_delta_step: (1,20), 子样本:(0:1), colsample_bytree:(0.5,1), lambda:(0,10), alpha:(0,10), scale_pos_weight:(1,262), n_estimator:(1,20 )。 我还使用 binary:logistics 作为目标模型,使用 roc_auc 作为带有 booster gbtree 的指标。 交叉验证得分为 82.5%。 但是,当我将模型实施到测试数据时,我只得到了分数 Roc_auc:75.2%,pr_auc:15%,log_loss:0.046,混淆矩阵:[[19300 7],[103 14]]。 我需要帮助找到将真阳性提高到 60% 左右的最佳方法,同时容忍假阳性直到实际阳性的 3 倍。

【问题讨论】:

【参考方案1】:

您提到您的数据集非常不平衡。

我建议查看imblearn,它是“一个 python 包,提供了许多数据集中常用的重采样技术,显示出严重的类间不平衡。”例如,这些技术包括过采样和欠采样。

该库的完整文档和示例是here。

如果您在公司处理此数据集 - 您还可以调查获取更多数据或使用规则/启发式方法修剪数据集。

【讨论】:

我知道过采样方法,但是我的数据现在是 750k 行,有 320 个特征,所以我更喜欢类权重以防止增加行。你还有别的想法吗? datascience.stackexchange.com/questions/92776/… 如果没有关于业务问题的上下文,很难给出进一步的建议。例如,有时您可以通过重新构建问题来平衡数据集 - 这可以让您根据规则删除一些实例。检查您的数据是一个很好的开始。

以上是关于使用 xgboost 处理极度不平衡的主要内容,如果未能解决你的问题,请参考以下文章

用于 XGboost、不平衡数据集和最佳迭代次数 (n_iter) 的 RandomizedSearchCV

xgboost 不平衡样本的输出结果怎样划分

XGboost学习总结

在 H2O 随机森林和 xgboost 中使用权重列

XGBoost vs Deep Learning

R语言使用xgboost构建回归模型:vtreat包为xgboost回归模型进行数据预处理(缺失值填充缺失值标识离散变量独热onehot编码)构建出生体重的xgboost模型回归模型