使用SVM处理不平衡的多类数据集的最佳方法


9

我正在尝试在相当不平衡的数据上使用SVM构建预测模型。我的标签/输出有三个类别,正,中性和负。我会说正面的例子约占我数据的10-20%,中立的约占50-60%,负数约占30-40%。我正在尝试平衡类,因为与类之间的错误预测相关的成本并不相同。一种方法是对训练数据进行重采样并生成一个相等的数据集,该数据集比原始数据集更大。有趣的是,当我这样做时,我倾向于对其他类别做出更好的预测(例如,当我平衡数据时,我增加了正面类别的示例数量,但在样本预测之外,负面类别的表现更好)。任何人都可以大致解释为什么会这样吗?如果我增加否定类别的榜样数量,我会从样本预测(例如更好的预测)中得到与肯定类别相似的东西吗?

关于如何通过对错误分类施加不同的成本或使用LibSVM中的类权重来解决不平衡数据的其他想法也非常开放,尽管我不确定如何正确选择/调整那些数据。

Answers:


6

与对数据进行重采样相比,对每种类别的模式的裕量松弛变量具有不同的惩罚是一种更好的方法。无论如何,它在渐近上都等同于重采样,但是易于实现和连续而不是离散,因此您拥有更多的控制权。

但是,选择权重并非易事。原则上,您可以算出理论上的权重,其中要考虑误分类成本和培训之间的差异,而这两种差异设置的是操作先验课程的概率,但不会给出最佳效果。最好的办法是通过交叉验证使损失最小化(考虑到分类错误的成本),为每个类别选择惩罚/权重。


是否有自动化的方法来实现此目的,或者是否存在将这种功能纳入其中的学习者?
Vam 2013年

我通常只是编写一个matlab函数来评估一组特定惩罚的损失,然后使用Nelder-Mead单纯形算法将其最小化。我不知道有这个建于任何库。
Dikran子母

@DikranMarsupial在两类问题中对两个边距松弛变量进行网格搜索是否等同于您对单纯形算法所做的工作?
Spacey 2014年

@Tarantula是的,精确的优化方法相对而言并不重要,关键是要确保您正在针对自己的应用目的优化您真正感兴趣的交叉验证统计信息(即,在操作使用中遇到的相同类频率)并考虑误分类成本(如果已知)。
迪克兰有袋动物2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.