【发布时间】:2023-03-12 03:57:01
【问题描述】:
我有一个要解决的问题: - 具有 2 个类别的不平衡数据集 - 一类使另一类相形见绌(923 对 38) - 当数据集按原样用于训练 RandomForestClassifier 时,f1_macro 得分在 TRAIN 和 TEST 中保持在 0.6 - 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 集中的案例好吧,但是由于 TEST 集中的这几个异常值使模型失去了平衡。
解决这个问题的常用策略是什么?常识表明我应该尝试在 TRAIN 集中捕获一个非常具有代表性的少数类样本,但我认为 sklearn 没有任何自动化工具可以实现这一点?
【问题讨论】:
标签: python scikit-learn dataset resampling oversampling