Xgboost 处理不平衡的分类数据

Posted

技术标签:

【中文标题】Xgboost 处理不平衡的分类数据【英文标题】:Xgboost dealing with imbalanced classification data 【发布时间】:2017-04-19 11:56:23 【问题描述】:

我有一个包含大约 20000 个训练示例的数据集,我想在其上进行二进制分类。 问题是数据集严重不平衡,只有大约 1000 个属于正类。我正在尝试使用 xgboost(在 R 中)进行预测。

我尝试过过采样和欠采样,无论我做什么,预测总是会导致将所有内容分类为多数类。

我尝试阅读这篇关于如何在 xgboost 中调整参数的文章。 https://www.analyticsvidhya.com/blog/2016/03/complete-guide-parameter-tuning-xgboost-with-codes-python/

但它只提到哪些参数有助于处理不平衡的数据集,而不是如何调整它们。

如果有人对调整 xgboost 的学习参数以处理不平衡数据集以及如何为此类情况生成验证集有任何建议,我将不胜感激。

【问题讨论】:

这可能会有所帮助stats.stackexchange.com/questions/171043/… 【参考方案1】:

在 R 中尝试这样的事情

bstSparse <- xgboost(data =xgbTrain , max_depth = 4, eta = 0.2, nthread = 2, nrounds = 200 ,
                 eval_metric = "auc" , scale_pos_weight = 48, colsample_bytree = 0.7,
                 gamma = 2.5,
                 eval_metric = "logloss",
                 objective = "binary:logistic")

其中 scale_pos_weight 是不平衡。我的基线发病率约为 4%。使用超参数优化。也可以在 scale_pos_weight 上试试

【讨论】:

【参考方案2】:

根据XGBoost 文档,scale_pos_weight 参数是处理不平衡类的参数。见,文档here

scale_pos_weight, [default=1] 控制正负的平衡 负权重,对不平衡的类很有用。一个典型值 考虑: sum(negative cases) / sum(positive cases) 见参数 调整以进行更多讨论。另请参阅 Higgs Kaggle 竞赛演示 示例:R、py1、py2、py3

【讨论】:

【参考方案3】:

一种对神经网络有用的技术是在观察中引入一些噪声。 在 R 中有一个“抖动”功能可以做到这一点。 对于您的 1000 个罕见案例,只需对其特征应用少量抖动,即可为您提供另外 1000 个案例。 再次运行您的代码,看看预测现在是否选择了任何正类。 您可以尝试更多添加的情况和/或改变抖动量。 HTH,表弟皮特

【讨论】:

以上是关于Xgboost 处理不平衡的分类数据的主要内容,如果未能解决你的问题,请参考以下文章

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

R语言构建文本分类模型:文本数据预处理构建词袋模型(bag of words)构建xgboost文本分类模型基于自定义函数构建xgboost文本分类模型

R语言构建文本分类模型:文本数据预处理构建词袋模型(bag of words)构建xgboost文本分类模型xgboost模型预测推理并使用混淆矩阵评估模型可视化模型预测的概率分布

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

XGBoost文本多分类记录

XGBoost - n_estimators = 1 等于单树分类器?