当我使用由75%的“真”标签和25%的“假”标签组成的不平衡数据集时,我应该如何在libSVM中设置我的伽马和成本参数?由于数据不平衡,所有预测的标签都设置在“True”上,我得到了一个持续的错误。
如果问题不是关于libSVM,而是关于我的数据集,我应该如何从理论机器学习的角度来处理这种不平衡?*我使用的特性数量在4-10之间,而且我有一小部分250个数据点。
发布于 2013-09-30 09:16:29
类的不平衡与C和γ的选择无关,要解决这个问题,您应该使用class weighting scheme,例如scikit-learn
包(构建在libsvm
上)。
采用交叉验证的网格搜索方法,选择最佳的C
和gamma
。您应该在这里尝试大量的值,对于C
,在1
和10^15
之间选择值是合理的,而gamma
范围值的一个简单且好的启发方法是计算所有数据点之间的成对距离,并根据该分布的百分位数选择伽玛--考虑在每个点中放置一个高斯分布,其方差等于1/gamma
--如果您选择这样的gamma
,这种分布会重叠许多点,那么就会得到非常“平滑”的模型,而使用小的方差会导致过度拟合。
发布于 2013-10-01 11:58:47
不平衡的数据集可以以各种方式处理。类平衡对径向基函数核的gamma
等核参数没有影响。
最流行的两种方法是:
C
。通常最小类的权重较高,常见的方法是npos * wpos = nneg * wneg
。LIBSVM允许您使用它的-wX
标志来完成此操作。发布于 2015-05-06 22:34:02
我知道这已经问了很久了,但我想回答它,因为你可能会发现我的答案有用。
正如其他人所提到的,您可能需要考虑对少数类使用不同的权重,或者使用不同的错误分类惩罚。然而,有一种更聪明的方法来处理不平衡的数据集。
您可以使用SMOTE (S合成的MyntheticOver-SMOTETeE 29
chnique)算法生成少数类的合成数据。这是一个简单的算法,可以很好地处理一些不平衡的数据集。
在算法的每一次迭代中,SMOTE考虑少数类的两个随机实例,并在中间添加一个相同类的人工示例。该算法一直将样本注入数据集,直到两个类变得平衡或其他一些标准(例如,添加一定数量的示例)。下面可以找到一幅图片,描述该算法在2D特征空间中对简单数据集所做的工作。
将权值与少数类相关联是该算法的特例。当您将权重$w_i$与实例i相关联时,基本上是在实例i之上添加额外的$w_i - 1$实例!
https://stackoverflow.com/questions/19089913
复制相似问题