使用libSVM的SVM中的数据不平衡

Art*_*uro 7 machine-learning svm libsvm

当我使用由75%'true'标签和25%'false'标签组成的不平衡数据集时,我应该如何在libSVM中设置gamma和Cost参数?由于数据不平衡,我得到一个恒定的错误,即所有预测标签都设置为'True'.

如果问题不在于libSVM,而在于我的数据集,我应该如何从理论机器学习的角度处理这种不平衡?*我使用的功能数量在4-10之间,我有一小组250个数据点.

lej*_*lot 6

类不平衡与选择C和gamma无关,为了解决这个问题,你应该使用类加权方案,例如scikit-learn包中的内容(内置libsvm)

选择最佳Cgamma使用交叉验证的网格搜索执行.你应该在这里品尝种类繁多的值,为C它是合理的选择值110^15同时的简单和良好的启发式gamma范围值是计算你的所有数据点,并根据该分布的百分选择伽马之间成对的距离-想想在每个点放置一个方差等于的高斯分布1/gamma- 如果你选择这样的gamma分布重叠将有很多点你会得到非常"平滑"的模型,而使用小的方差会导致过度拟合.


Mar*_*sen 6

不平衡的数据集可以通过各种方式解决.类平衡对内核参数没有影响,例如gammaRBF内核.

两种最流行的方法是:

  1. 每班使用不同的错误分类处罚,这基本上意味着改变C.通常,最小的类被称重更高,这是一种常见的方法npos * wpos = nneg * wneg.LIBSVM允许您使用其-wX标志执行此操作.
  2. 对超额代表类进行子样本以获得相等数量的正面和负面,并按照传统上的平衡集进行训练.请注意,您基本上忽略了大量数据,这在直觉上是一个坏主意.

  • 为什么不**过采样**而不是?这不会忽略任何信息 (2认同)
  • 我认为不要过度采样少数类的主要原因是,除非你非常小心地控制这个过程,否则它会使交叉验证或保持测试变得无用,因为重复的例子可以多次出现.我想你可以先提取一个保持集,然后*然后*对训练集进行过采样. (2认同)