我想用 2 个类进行分类。当我在没有打击的情况下进行分类时,我得到:
Precision Recall f-1
0,640950987 0,815410434 0,714925374
当我使用smote时:(以200%和 k = 5 对少数类进行过采样)
Precision Recall f-1
0,831024643 0,783434343 0,804894232
如您所见,这很好用。
但是,当我在验证数据(没有任何合成数据)上测试这个训练有素的模型时
Precision Recall f-1
0,644335755 0,799044453 0,709791138
这太可怕了。我使用随机决策森林进行分类。
有谁知道为什么会这样?任何关于额外测试的有用提示,我都可以尝试获得更多见解,也欢迎。
更多信息:我不接触大多数班级。我在 Python 中使用 scikit-learn 和这个用于 smote 的算法。
测试数据(具有合成数据)的混淆矩阵:
相同模型的验证数据上的混淆矩阵(真实数据,非 SMOTE 生成)
编辑:我读到问题可能在于创建了 Tomek Links 的事实。因此,我编写了一些代码来删除tomek 链接。虽然这并没有提高分类分数。
Edit2:我读到问题可能在于重叠太多。对此的解决方案是更智能的合成样本生成算法。因此我实施
ADASYN:不平衡学习的自适应综合采样方法
我的实现可以在这里找到。它的表现比smote差。