首页 文章

使用SMOTE时验证集的性能不佳

提问于
浏览
3

我想用2个 class 进行分类 . 当我没有SMOTE进行分类时,我得到(平均值为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

这太可怕了 . 我使用随机决策森林进行分类 .

有谁知道为什么会这样,以及解决这个问题的解决方案?任何有关额外测试的有用提示我都可以尝试获得更多见解 .

更多信息:我不接触大多数 class . 我使用scikit-learn在Python中工作,为SMOTE使用this algorithm .

测试数据上的混淆矩阵(具有合成数据):
enter image description here

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

enter image description here


Edit: 我读到问题可能在于Tomek Links的创建 . 因此I wrote some code to remove the Tomek links . 虽然这不会提高分类分数 .

Edit2: 我读到问题可能在于重叠太多的事实 . 对此的解决方案是更智能的合成样本生成算法 . 所以我实施了

ADASYN:不 balancer 学习的自适应合成采样方法

. 我的实现可以找到here . 它比表现更差 .

1 回答

相关问题