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

机器算法验证 机器学习 预测模型 支持向量机 不平衡类
2022-03-07 01:49:12

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

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

1个回答

对每个类的模式的边距松弛变量进行不同的惩罚是比重新采样数据更好的方法。无论如何,它渐近等效于重新采样,但更易于实现和连续,而不是离散,因此您拥有更多控制权。

然而,选择权重并不简单。原则上,您可以计算出一个理论权重,该权重考虑了错误分类成本和训练集与操作先验类概率之间的差异,但它不会给出最佳性能。最好的办法是通过交叉验证最小化损失(考虑到错误分类成本)来选择每个类的惩罚/权重。