Xgboost处理不平衡的分类数据

时间:2016-12-05 06:30:36

标签: r xgboost

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

我已经尝试过采样和欠采样,无论我做什么,不知何故预测总是导致将所有内容归类为大多数类。

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

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

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

3 个答案:

答案 0 :(得分:2)

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

  

scale_pos_weight ,[默认= 1]控制正和的余额   负权重,对非平衡类有用。一个典型的价值   考虑:sum(负数情况)/ sum(正数情况)参见参数   调整更多讨论。另见Higgs Kaggle比赛演示   例子:R,py1,py2,py3

答案 1 :(得分:2)

在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 :(得分:1)

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

相关问题