Xgboost 处理不平衡分类数据

Xgboost dealing with imbalanced classification data

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

我已经尝试过采样和欠采样,无论我做什么,预测总是以某种方式导致 classifiying 一切都是大多数 class。

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

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

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

一种对神经网络有用的技术是在观察中引入一些噪声。 在 R 中有 'jitter' 函数来执行此操作。 对于您的 1000 个罕见案例,只需对其特征应用少量抖动,即可再获得 1000 个案例。 运行 再次输入您的代码,看看预测现在是否有任何积极因素 class。 您可以尝试添加更多案例 and/or 来改变抖动量。 HTH, cousin_pete

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

scale_pos_weight, [default=1] Control the balance of positive and negative weights, useful for unbalanced classes. A typical value to consider: sum(negative cases) / sum(positive cases) See Parameters Tuning for more discussion. Also see Higgs Kaggle competition demo for examples: R, py1, py2, py3

在 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 也可以试试