机器学习 - SVM

3
如果使用核数据的 SVM 训练模型,生成的训练模型将包含支持向量。现在考虑使用已有的旧数据加上一小部分新数据来训练新模型的情况。
那么: 1. 新数据应该只是与先前形成的模型中的支持向量相结合以形成新的训练集吗?(如果是,那么如何将支持向量与新图形数据相结合?我正在使用 libsvm) 2. 还是应该将新数据和完整的旧数据组合在一起形成新的训练集,而不仅仅是支持向量?
哪种方法更适合重新训练,更易于实现,并且从精度和内存使用效率方面更为高效呢?
3个回答

4
您必须始终重新训练整个新拼接的训练集。如果某些“新点”最靠近决策边界,则来自“旧”模型的支持向量可能不再是支持向量。在SVM后面,有一个必须解决的优化问题,请记住这一点。对于给定的训练集,您可以找到该训练集的最佳解(即支持向量)。一旦数据集发生变化,这种解决方案可能不再是最优的。
SVM训练只是一个最大化问题,其中几何和功能边缘是目标函数。就像最大化给定函数f(x)一样...但是然后您更改f(x):通过添加/删除训练集中的点,您对决策边界有了更好/更坏的理解,因为这样的决策边界是通过采样获得的,其中样本确实是来自您的训练集的模式。
我理解您对时间和内存效率的关注,但这是一个常见的问题:事实上,针对所谓的大数据训练SVM仍然是一个开放的研究课题(有关反向传播训练的一些提示),因为这样的优化问题(以及哪些拉格朗日乘数应该成对优化)不容易并行化/分布在几个工作者之间。
LibSVM使用著名的顺序最小优化算法来训练SVM:这里您可以找到John Pratt关于SMO算法的文章,如果需要进一步了解SVM背后的优化问题。

那么您建议重新使用整个数据进行训练,如果我想专注于结果的准确性,就忽略内存效率? - codeninja
是的,我现在正在使用LibSVM和Matlab中的SVM,我真正理解你的担忧,但这只是为了编写更好的代码而进行的一次冲刺。 - AlessioX
谢谢,这非常有帮助! :) - codeninja

2

Idea 1已经被研究社区审查和评估

任何对更快、更智能方法(1)感兴趣的人——重复利用支持向量并添加新数据——请查阅Dave MUSICANT和Olvi MANGASARIAN发表的研究材料,介绍了他们的方法称为"Active Support Vector Machine"

MATLAB实现:可从http://research.cs.wisc.edu/dmi/asvm/下载

PDF:
[1] O. L. Mangasarian, David R. Musicant; Active Support Vector Machine Classification; 1999
[2] David R. Musicant, Alexander Feinberg; Active Set Support Vector Regression; IEEE TRANSACTIONS ON NEURAL NETWORKS, VOL. 15, NO. 2, MARCH 2004


这仅适用于线性SVM。此外,它似乎不允许添加新数据点并重复使用SV:即使Matlab实现应考虑先前的SVM模型,但输入参数仅为数据矩阵和标签矩阵。作者只是陈述了一种更有效处理线性SVM的方法。从论文中可以看出,“我们注意到活动集计算策略与主动学习无关。” - AlessioX
这是一篇有见地的论文,但它是否适合重新培训呢? - codeninja
如果我没记错的话,这个问题已经被解决了,作为Dave Musicant和Olvi Mangasarian在他们的论文《通过行和列分块实现大规模支持向量回归》(nips99.pdf)中提出的一种非终止处理方法。 - user3666197

1
这是对你问题的一个纯理论思考。这个想法并不坏,但需要进一步扩展。我在这里只关注从第一批次开始稀疏化训练数据的目标。
主要问题——这就是为什么这只是纯理论——是您的数据通常不是线性可分的。那么误分类点非常重要。它们会破坏我下面写的内容。此外,这个想法需要一个线性核。然而,可能可以推广到其他核函数。
为了理解你的方法存在的问题,让我们看一下以下支持向量 (x,y,class): (-1,1,+),(-1,-1,+),(1,0,-)。超平面是通过零点的竖直线。如果在下一个批次中出现点 (-1,-1.1,-),最大间隔超平面将会倾斜。这可以用于稀疏化。你需要计算两对支持向量({(-1,1,+),(1,0,-)}, {(-1,-1,+),(1,0,-)})之间的最小间隔超平面(仅在二维中有两对,高维或非线性核可能更多)。这基本上是通过这些点的线。然后你对所有数据点进行分类。然后将所有错误分类的点以及支持向量添加到第二个批次中。就这样。剩余的点不可能是相关的。
除了上面提到的C/Nu问题之外,维度诅咒显然也会在这里给你带来麻烦。
一个用来说明的图片。红色:支持向量,批次一;蓝色:非支持向量批次一;绿色:新点批次二。 红线为第一个超平面,绿色为最小间隔超平面,它误分类了蓝点,蓝色为新超平面(手动拟合);)

enter image description here


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