据我所知,从广义上讲,有三种处理二进制不平衡数据集的方法:
选项 1:
- 随机创建 k 折交叉验证样本(或者使用分层 k 折更好地创建 k 折样本:https ://scikit-learn.org/0.16/modules/generated/sklearn.cross_validation.StratifiedKFold.html )。
- 对于每个折叠,在“训练”和“测试”集上分别应用重采样技术(上采样、下采样或两者的组合)。
- 使用“传统”指标进行评估:例如 ROC 曲线的 AUC(TP 率与 FP 率)。
选项 2:
- 随机创建 k 折交叉验证样本(或者甚至更好地使用分层 k 折创建 k 折样本)。
- 不要应用任何重采样技术。
- 使用“替代”指标进行评估:例如 Precision-Recall 曲线的 AUC 或 F 分数(Precision 和 Recall 的调和平均值)。
选项 3:
- 使用 XGBoost 之类的东西并调整
scale_pos_weight(https://xgboost.readthedocs.io/en/latest/tutorials/param_tuning.html)。 - 随机创建 k 折交叉验证样本(或者甚至更好地使用分层 k 折创建 k 折样本)。
- 使用“传统”指标进行评估:例如 ROC 曲线的 AUC(TP 率与 FP 率)。
我的主要问题是我是否正确解释了选项。我所说的是否有任何概念上的错误?处理不平衡时,这三种情况使用Stratified k-fold是否合适?使用 XGBoost 和调优时是否不需要应用任何重采样scale_pos_weight?当应用一些重采样(选项 1 和 3)时,使用“传统”指标是否有意义,而使用“替代”指标是否有意义?一般来说,重采样必须分别应用于训练集和测试集?等等。
此外,如果您对 SMOTE 和 ROSE 有任何很好的参考,关于它们如何工作、如何应用它们以及如何将它们与 python 一起使用,那就太好了。