2016-12-05 78 views
1

我有一个20000个训练样例的数据集,我想在其中进行二元分类。 问题是数据集严重不平衡,只有大约1000人处于积极的阶层。我正在尝试使用xgboost(在R中)来做我的预测。Xgboost处理不平衡的分类数据

我已经尝试过采样和欠采样,不管我做什么,不知何故,预测总是导致在分类中作为大多数类的一切。

我尝试阅读本文,了解如何在xgboost中调整参数。 https://www.analyticsvidhya.com/blog/2016/03/complete-guide-parameter-tuning-xgboost-with-codes-python/

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

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

+0

这可能会有帮助http://stats.stackexchange.com/questions/171043/how-to-tune-hyperparameters-of-xgboost-trees – gfgm

回答

0

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

0

XGBoost文档中,scale_pos_weight参数是一个处理不平衡类。参见,文档here

scale_pos_weight,[默认= 1]控制的正平衡, 负权重,用于不平衡的类是有用的。一个典型的价值 考虑:SUM(阴性病例)/总和(阳性)查看参数 调整更多的讨论。还看到希格斯Kaggle竞争演示了 例子:R,PY1,PY2,PY3

0

尝试是这样的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太