机器学习-支持向量机

Machine Learning - SVM

如果使用基于内核数据的 SVM 训练模型,则训练后的模型包含支持向量。现在考虑使用已有的旧数据和少量新数据训练新模型的情况。 所以:

  1. 是否应该将新数据与先前形成的模型的支持向量结合起来形成新的训练集。 (如果是,那么如何将支持向量与新的图形数据结合起来?我正在研究libsvm

或者:

  1. 是否应该将新数据和完整的旧数据组合在一起形成新的训练集而不仅仅是支持向量?

哪种方法更适合再训练,在准确性和记忆方面更可行、更高效?

您必须始终考虑整个新连接的训练集进行再训练。
来自 "old" 模型的支持向量可能不再是支持向量,以防某些 "new points" 最接近决策边界。 SVM 背后有一个必须解决的优化问题,请记住这一点。对于给定的训练集,您可以找到该训练集的最佳解决方案(即支持向量)。一旦数据集发生变化,这样的解决方案可能不再是最优的。
SVM 训练无非是一个最大化问题,其中几何和功能边距是 objective 函数。就像最大化一个给定的函数 f(x)...但是你改变 f(x): 通过 adding/removing 点从训练集你对决策边界有 better/worst 的理解,因为这样的决策边界是通过采样知道的,其中样本确实是你训练集中的模式。
我理解您对时间和内存效率的担忧,但这是一个普遍问题:确实为所谓的 大数据 训练 SVM 仍然是一个开放的研究课题(有一些关于反向传播的提示培训),因为这样的优化问题(以及关于拉格朗日乘数应该成对优化的启发式)在几个工人身上并不容易parallelize/distribute。

LibSVM 使用众所周知的序列最小优化算法来训练 SVM:here 如果您需要有关 SVM 背后的优化问题的更多信息,您可以找到 John Pratt 关于 SMO 算法的文章。

想法 1 已由研究团体检查和评估

任何对更快更智能的方法感兴趣的人 (1) -- 重新使用支持向量并添加新数据 -- 请查看 Dave MUSICANT 和 Olvi MANGASARIAN 发表的关于他们的方法的研究材料 "Active Support Vector Machine"

MATLAB implementation: available from 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

这是对你的问题的纯理论思考。这个想法不错。但是,它需要扩展一点。我在这里纯粹是为了稀疏第一批训练数据的目标。

主要问题——这就是为什么这纯粹是理论上的——是你的数据通常不是线性可分的。那么误分类的点就很重要了。他们会破坏我在下面写的东西。此外,这个想法需要一个线性内核。但是,有可能推广到其他内核

要了解您的方法存在的问题,请查看以下支持向量 (x,y,class)(-1,1,+),(-1,-1,+),(1,0,-)。超平面是一条通过零的垂直线。如果您在下一批中有 (-1,-1.1,-) 点,则最大边距超平面会倾斜。现在可以利用它来进行稀疏化。您计算 - 可以这么说 - 支持向量的两对 ({(-1,1,+),(1,0,-)}, {(-1,-1,+),(1,0,-)}) 之间的最小边距超平面(在 2d 中只有 2 对。更高的维度或非线性内核可能更多)。这基本上是通过这些点的线。然后对所有数据点进行分类。然后将所有错误分类的点添加到任一模型中,并将支持向量添加到第二批。而已。剩下的点不相关。

除了上面提到的C/Nu问题。维度的诅咒显然会在这里杀死你

一张图片来说明。红色:支持向量,第一批,蓝色,非支持向量第一批。绿色新点批次二。 红线第一超平面,误分类蓝点的绿色最小边距超平面,蓝色新超平面(这是一个手工拟合;))