SMOTE过采样和交叉验证

5
我正在使用Weka处理一个二元分类问题,数据集存在严重的不平衡性(其中90%属于一类,10%属于另一类)。我首先对整个数据集应用了SMOTE算法(http://www.cs.cmu.edu/afs/cs/project/jair/pub/volume16/chawla02a-html/node6.html),以平衡类别,然后对新获得的数据进行了10折交叉验证。我发现结果过于乐观,F1值约为90%。

这是由于过度采样导致的吗? 在应用SMOTE算法的数据上执行交叉验证是否是不好的做法? 有没有解决这个问题的方法?

2个回答

12

我认为你应该先将数据拆分成测试和训练部分,然后仅对训练部分执行SMOTE操作,再在没有合成样本的数据集的一部分上测试算法,这将更好地展现算法的性能。


你无法想象有多少人做错了这件事情...我完全同意你的看法。 - mammask

2
根据我的经验,手动划分数据集不是处理这个问题的好方法。当您有一个数据集时,您应该对每个分类器进行交叉验证,其中您的交叉验证中的1个折叠是测试集_您不应在其上实现SMOTE_,而您有9个其他折叠作为训练集,其中必须具有平衡的数据集。将此操作重复10次。然后,您将比手动划分整个数据集获得更好的结果。
显然,如果您在测试集和训练集上都应用SMOTE,则会得到合成的测试集,这将给您带来高精度,但实际上并不正确。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接