我想用两个类别进行分类。当我不使用击打进行分类时,我得到( 10倍交叉验证的平均值):
Precision Recall f-1
0,640950987 0,815410434 0,714925374当我使用smote:(超过200%的少数类样本,k= 5) (也是10个交叉验证,这意味着我的测试和训练集中有合成数据。
Precision Recall f-1
0,831024643 0,783434343 0,804894232正如你所看到的,这很有效。
然而,当我在验证数据上测试这个经过训练的模型时(它没有任何合成数据,也没有被用来构造合成数据点)。
Precision Recall f-1
0,644335755 0,799044453 0,709791138这太可怕了。我用随机决策林来分类。
有谁知道为什么会发生这种情况&解决这个问题的方法吗?任何有用的技巧,关于额外的测试,我可以尝试获得更多的洞察力,也欢迎。
更多的信息:我没有触及多数阶级。我在Python中为scikit工作-学习和这种算法为SMOTE。
测试数据(有合成数据)的混淆矩阵:

验证集中的混淆矩阵(既没有任何合成数据,也没有用作创建合成数据的基础):

编辑:,我读到问题可能在于Tomek链接是创建的。因此,我编写了一些代码来删除Tomek链接.虽然这并不能提高分类分数。
Edit2:我读到,问题可能在于有太多的重叠。解决这一问题的方法是一种更智能的合成样本生成算法。因此我实现了
ADASYN:用于不平衡学习的自适应合成抽样方法
。我的实现可以找到这里。它的表现比击打还差。
发布于 2013-06-15 11:29:51
重叠可能是原因。如果给定变量的类之间存在重叠,则SMOTE将生成影响可分性的合成点。正如您所指出的,可以生成Tomek链接以及损害分类的其他点。我建议你尝试其他类型的击打,如安全弹或硼线弹。你可以在以下几个方面找到他们的想法:
91
43
https://stackoverflow.com/questions/17088051
复制相似问题