gpt4 book ai didi

python - 使用 SMOTE 时验证集性能不佳

转载 作者:太空狗 更新时间:2023-10-30 02:47:09 25 4
gpt4 key购买 nike

我想用 2 个类进行分类。当我在没有 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)。我在 Python 中使用 scikit-learn 和 this algorithm 工作对于 SMOTE。

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

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

enter image description here


编辑: 我读到问题可能在于创建了 Tomek 链接。因此I wrote some code to remove the Tomek links .尽管这不会提高分类分数。

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

ADASYN: Adaptive Synthetic Sampling Approach for Imbalanced Learning

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

最佳答案

重叠可能是原因。如果给定您拥有的变量,类之间存在重叠,则 SMOTE 将生成影响可分离性的合成点。正如您所指出的,可以生成 Tomek 链接以及其他损害分类的点。我建议您尝试 SMOTE 的其他变体,例如 Safe-SMOTE 或 Bordeline-SMOTE。您可以在以下位置找到他们的描述:

http://link.springer.com/chapter/10.1007/11538059_91

http://link.springer.com/chapter/10.1007/978-3-642-01307-2_43

关于python - 使用 SMOTE 时验证集性能不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17088051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com