【问题标题】:data imbalance in SVM using libSVM使用 libSVM 的 SVM 中的数据不平衡
【发布时间】:2013-10-06 01:29:24
【问题描述】:

当我使用由 75% 的“真”标签和 25% 的“假”标签组成的不平衡数据集时,我应该如何在 libSVM 中设置我的 gamma 和 Cost 参数?由于数据不平衡,我不断收到将所有预测标签设置为“真”的错误。

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

【问题讨论】:

标签: machine-learning svm libsvm


【解决方案1】:

类不平衡与 C 和 gamma 的选择无关,要解决此问题,您应该使用 class weighting scheme,例如 scikit-learn 包(基于 libsvm

最佳Cgamma 的选择是使用带有交叉验证的网格搜索来执行的。您应该在这里尝试大范围的值,因为C110^15 之间选择值是合理的,而gamma 范围值的简单而良好的启发式方法是计算所有数据点之间的成对距离和根据该分布的百分位数选择 gamma - 考虑在每个点中放置一个方差等于 1/gamma 的高斯分布 - 如果您选择这样的 gamma,该分布会重叠很多点,您将获得非常“平滑”的模型,而使用小的方差会导致过拟合。

【讨论】:

  • 类加权方案意味着C在实际的SVM训练问题中发生了变化,所以类平衡确实C的选择有关,即使它发生在窗帘后面。
  • 这纯粹是语言问题,因为我的意图是选择 C ​​不会解决不平衡问题。这个问题的解决方案但是改变了 C,我在这里看不到真正的矛盾
【解决方案2】:

可以通过多种方式处理不平衡的数据集。类平衡对 RBF 内核的 gamma 等内核参数没有影响。

两种最流行的方法是:

  1. 对每个类使用不同的错误分类惩罚,这基本上意味着更改C。通常最小的类得到更高的权重,一个常见的方法是npos * wpos = nneg * wneg。 LIBSVM 允许您使用其-wX 标志来执行此操作。
  2. 对过度代表的类进行二次抽样,以获得等量的正面和负面,然后像传统的平衡集一样继续训练。请注意,您基本上会以这种方式忽略大量数据,这在直觉上是个坏主意。

【讨论】:

  • 为什么不用oversample较小的那个呢?这不会忽略任何信息
  • @lejlot 使用后一种策略的大多数情况是大规模问题(例如数百万到数十亿个实例),其中忽略部分数据实际上用作降低复杂性的黑客。对较小的集合进行过采样基本上是前一种方法,效率低下(过采样与重新加权完全相同)。
  • 我完全了解这一点,只是想知道您为什么不包括此选项。过采样的主要优点是它是一种通用方法,甚至可以用于不允许您对样本加权(以效率为代价)的模型(及其实现)。
  • 我认为不对少数类进行过度采样的主要原因是,除非您非常小心地控制过程,否则交叉验证或保持测试将毫无用处,因为重复的示例可能会出现多折。我想你可以先提取一个保留集,然后然后对训练集进行过采样。
【解决方案3】:

我知道之前有人问过这个问题,但我想回答它,因为您可能会发现我的回答很有用。

正如其他人所提到的,您可能需要考虑对少数类使用不同的权重或使用不同的错误分类惩罚。但是,有一种更聪明的方法来处理不平衡的数据集。

您可以使用 SMOTES合成 Minority Over-sampling Technique) 算法为少数类生成合成数据。这是一个简单的算法,可以很好地处理一些不平衡的数据集。

在算法的每次迭代中,SMOTE 都会考虑少数类的两个随机实例,并在其间某处添加同一类的人工示例。该算法不断将样本注入数据集,直到两个类达到平衡或其他一些标准(例如添加一定数量的示例)。您可以在下面找到一张图片,该图片描述了该算法对二维特征空间中的简单数据集所做的工作。

将权重与少数类相关联是该算法的一个特例。当您将权重 $w_i$ 与实例 i 相关联时,您基本上是在实例 i 之上添加额外的 $w_i - 1$ 个实例!

  • 您需要做的是使用此算法创建的样本来扩充您的初始数据集,并使用此新数据集训练 SVM。您还可以在网上找到许多不同语言的实现,例如 Python 和 Matlab。

  • 此算法还有其他扩展,如果需要,我可以为您指出更多材料。

  • 要测试分类器,您需要将数据集拆分为测试和训练,将合成实例添加到训练集(请勿添加到测试集),在训练集,最后在测试集上进行测试。如果您在测试时考虑生成的实例,您最终会得到有偏差(而且高得离谱)的准确率和召回率。

【讨论】:

    猜你喜欢
    • 2012-07-09
    • 2013-06-11
    • 2012-07-28
    • 2016-07-17
    • 2012-12-03
    • 2017-05-26
    • 1970-01-01
    • 2020-09-16
    • 2014-04-19
    相关资源
    最近更新 更多