支持向量机分类 - 每个类别的最少输入集数量

4
我正在尝试构建一个应用程序来检测网页中的广告图片。一旦我检测到它们,就不会允许它们在客户端显示。
根据这个Stackoverflow问题,我认为SVM是实现我的目标的最佳方法。
因此,我自己编写了SVM和SMO。我从UCI数据存储库获得的数据集有3280个实例(数据集链接),其中约400个来自代表广告图片的类,其余的则代表非广告图片。
现在,我正在使用前2800个输入集来训练SVM。但是,在查看准确率后,我意识到大多数这些输入集来自非广告图像类。因此,我对该类别的准确性非常高。
那么我该怎么办?我应该给SVM多少输入集进行训练,每个类别应该有多少个?
感谢。干杯。(基本上是因为上一个问题的背景不同,所以我创建了一个新问题。神经网络输入数据的优化)

谢谢回复。 我想确认我是否正确地推导出了广告和非广告类别的C值。 请给我反馈。

enter image description here

或者您可以在这里查看文档版本。

您可以在此处查看y1等于y2的图形 enter image description here

以及y1不等于y2的图形 enter image description here

2个回答

6
有两种方法可以解决这个问题。一种是平衡训练数据,使广告和非广告图像数量相等。这可以通过对 400 张广告图片进行过采样或对成千上万张非广告图片进行欠采样来实现。由于使用的数据点数量会显著增加训练时间,因此您应该首先尝试欠采样非广告图片,并创建一个包含 400 广告图片和 400 随机选择的非广告图片的训练集。
另一种解决方案是使用加权 SVM,使广告图像的边界错误比非广告图像更加重要,对于 libSVM 包来说,可以使用 -wi 标志来实现。根据您对数据的描述,您可以尝试将广告图像的权重设置为非广告图像的 7 倍。

1
你能解释一下为什么要平衡训练数据吗?我以为SVM会选择与训练模式之间距离最大的决策面。那么在这个决策面后面有多少其他训练模式是无关紧要的,为什么会有影响呢?过采样模式又如何帮助呢?(我一直认为加权SVM是用来对不同类别的误分类成本和/或先验概率进行建模的,但OP没有提到成本或先验概率) - Niki
2
@nikie - 硬SVM选择具有最大训练模式分离的决策面。但是,一旦您允许间隔和分类错误(即,当您引入C时),SVM会权衡最大化间隔大小与允许某些点位于间隔或甚至被错误分类。对于不平衡的数据,较小类别的大部分数据点可能会落在间隔区域或更糟。加权它们或平衡数据集基本上可以解决这个问题。 - dmcer
有没有关于加权支持向量机的SMO文档参考资料? - Amol Joshi
你能解释一下去掉偏置项'b'的方法是如何工作的吗?SMO之所以有效,是因为它每次同时改变两个alpha值,从而仍然满足summation(alpha(i)*y(i))=0的条件。如果我们只改变一个alpha值,这个条件就无法满足了。另外,如果您能提供一些关于标准SMO算法文档的参考资料,那就太好了。我无法理解他们在标准SMO算法中是如何推导出L和H值条件的。谢谢。 - Amol Joshi
如果你分别对这些类进行评分,每个类大约95%的正确率听起来还不错。但是,我想你想要超过Kushmerick '99年的数字(所以+97%)?为了进一步提高准确性,你可以尝试使用不同的核和核超参数进行实验。你现在使用的是哪种核? - dmcer
显示剩余27条评论

4
你所需的训练集大小取决于特征空间的稀疏程度。就我所见,您没有讨论您选择使用哪些图像特征。在训练之前,您需要将每个图像转换为一组数字(特征向量),以描述该图像,希望捕捉到您关心的方面。
另外,除非您是为了娱乐而重新实现SVM,否则我建议直接使用libsvm

我不理解你所说的特征空间稀疏性以及它如何决定我的训练集大小。让我在这里稍微澄清一下。1. 是的,我只是进行文本分析来预测图像是否为广告/非广告图像。2. 我被迫不使用互联网上的这些库,并在我们自己的系统上实现SVM。我已经编写了大部分SVM代码,并可以测试其输出的准确性。谢谢。 - Amol Joshi
1
让我尝试表述更清楚一些。你如何从图像得到输入到 SVM 的数字向量呢?你肯定不会只是将图像中每个像素的红色、绿色和蓝色颜色传递给它吧? - Vebjorn Ljosa
我正在进行文本分析,以获取该图像的不同属性。使用已经存在于UCI存储库中的训练集,我正在训练我的SVM。 现在的问题是广告训练集数量仅为400,而非广告训练集数量约为2800。那么现在我该怎么办?我应该给SVM多少输入集来进行训练,每个类别又应该有多少个? - Amol Joshi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接