我正在尝试构建一个应用来检测来自网页的广告图像。一旦我发现了那些,我就不会允许那些在客户端显示。
从this Stackoverflow question的帮助中,我认为SVM是实现目标的最佳方法。
所以,我自己编写了SVM和SMO。我从UCI数据存储库获得的数据集有3280个实例(Link to Dataset),其中大约400个实例来自代表广告图像的类,其余代表非广告图像。
现在我正在使用前2800个输入集并训练SVM。但在查看准确率后,我意识到这2800个输入集中的大多数来自非广告图像类。因此,我对该课程的准确性非常高。
那我该怎么办?关于我应该向SVM提供多少输入集以进行训练,以及每个类有多少输入集?
感谢。干杯。 (基本上提出了一个新问题,因为上下文与我之前的问题不同。Optimization of Neural Network input data)
感谢您的回复。 我想检查一下我是否正确得出广告和非广告类的C值。 请给我反馈。
或者您可以看到文档版本here。
你可以在这里看到y1 eqaul到y2的图形
和y1在这里不等于y2
答案 0 :(得分:6)
有两种方法可以解决这个问题。一种是平衡训练数据,因此它包括相同数量的广告和非广告图像。这可以通过对400个广告图像进行过采样或对数千个非广告图像进行欠采样来完成。由于训练时间会随着使用的数据点数量的增加而急剧增加,因此您可能应首先尝试对非广告图像进行欠采样,并创建一个包含400个广告图像和400个随机选择的非广告的训练集。
另一个解决方案是使用加权SVM ,以便广告图片的边距错误比非广告图片的权重更大,对于包libSVM,这是通过{{{ 1}}标志。根据您对数据的描述,您可以尝试权衡广告图片的重量比非广告重7倍。
答案 1 :(得分:4)
训练集所需的大小取决于要素空间的稀疏程度。据我所知,您没有讨论您选择使用的图像功能。在训练之前,您需要将每个图像转换为描述图像的数字(特征)向量,希望能够捕捉到您关注的方面。
哦,除非你重新实现SVM for sport,否则我建议你只使用libsvm,