首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于libSVM的支持向量机数据不平衡

基于libSVM的支持向量机数据不平衡
EN

Stack Overflow用户
提问于 2013-09-30 08:42:29
回答 3查看 6.7K关注 0票数 7

当我使用由75%的“真”标签和25%的“假”标签组成的不平衡数据集时,我应该如何在libSVM中设置我的伽马和成本参数?由于数据不平衡,所有预测的标签都设置在“True”上,我得到了一个持续的错误。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-30 09:16:29

类的不平衡与C和γ的选择无关,要解决这个问题,您应该使用class weighting scheme,例如scikit-learn包(构建在libsvm上)。

采用交叉验证的网格搜索方法,选择最佳的Cgamma。您应该在这里尝试大量的值,对于C,在110^15之间选择值是合理的,而gamma范围值的一个简单且好的启发方法是计算所有数据点之间的成对距离,并根据该分布的百分位数选择伽玛--考虑在每个点中放置一个高斯分布,其方差等于1/gamma --如果您选择这样的gamma,这种分布会重叠许多点,那么就会得到非常“平滑”的模型,而使用小的方差会导致过度拟合。

票数 6
EN

Stack Overflow用户

发布于 2013-10-01 11:58:47

不平衡的数据集可以以各种方式处理。类平衡对径向基函数核的gamma等核参数没有影响。

最流行的两种方法是:

  1. 每类使用不同的错误分类惩罚,这基本上意味着更改C。通常最小类的权重较高,常见的方法是npos * wpos = nneg * wneg。LIBSVM允许您使用它的-wX标志来完成此操作。
  2. 对过度表示的类进行子样本,以获得相同数量的正面和负面信息,并按照传统上对平衡集的要求进行培训。请注意,这样基本上忽略了大量数据,这在直觉上是个坏主意。
票数 6
EN

Stack Overflow用户

发布于 2015-05-06 22:34:02

我知道这已经问了很久了,但我想回答它,因为你可能会发现我的答案有用。

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

您可以使用SMOTE (S合成的MyntheticOver-SMOTETeE 29chnique)算法生成少数类的合成数据。这是一个简单的算法,可以很好地处理一些不平衡的数据集。

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

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

  • 您需要做的是使用此算法创建的样本来增强初始数据集,并使用该新数据集对SVM进行培训。您还可以在Python和Matlab等不同语言中找到许多在线实现。
  • 这个算法还有其他扩展,如果你想要的话,我可以告诉你更多的资料。
  • 要测试分类器,需要将数据集拆分为测试和训练,向训练集中添加合成实例(不向测试集添加任何实例),在训练集上对模型进行训练,最后在测试集中进行测试。如果您在测试时考虑生成的实例,那么最终您将得到一个偏颇的(而且更高得离谱的)准确性和回忆。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19089913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档