我有一个我正在尝试解决的问题: - 具有 2 个类的不平衡数据集 - 一个类使另一个类相形见绌(923 对 38) - 当数据集按原样用于训练 RandomForestClassifier 时,f1_macro 得分保持在 0.6 中的 TRAIN 和 TEST - 0.65 范围
昨天在研究该主题时,我自学了重采样,尤其是 SMOTE 算法。它似乎为我的 TRAIN 分数创造了奇迹,因为在将数据集与它们平衡后,我的分数从 ~0.6 上升到 ~0.97。我应用它的方式如下:
我一开始就将我的 TEST 集与其余数据分开(整个数据的 10%)
我只在 TRAIN 集上应用了 SMOTE(班级余额 618 与 618)
我已经在 TRAIN 集上训练了一个 RandomForestClassifier,并实现了 f1_macro = 0.97
使用 TEST 集进行测试时,f1_macro 分数保持在 ~0.6 - 0.65 范围内
我会假设发生的情况是,TEST 集中的保留数据包含观察结果,这与 TRAIN 集中少数类的 SMOTE 前观察有很大不同,最终教会模型很好地识别 TRAIN 集中的案例,但是使模型与测试集中的这些少数异常值失去平衡。
处理这个问题的常用策略是什么?常识表明我应该尝试在 TRAIN 集中捕获一个非常具有代表性的少数类样本,但我认为 sklearn 没有任何自动化工具可以实现这一点?