机器学习 - 支持向量机
Posted
技术标签:
【中文标题】机器学习 - 支持向量机【英文标题】:Machine Learning - SVM 【发布时间】:2016-05-26 13:22:23 【问题描述】:如果使用基于内核数据的 SVM 训练模型,则生成的训练模型包含支持向量。现在考虑使用已经存在的旧数据以及少量新数据来训练新模型的情况。 所以:
-
是否应该将新数据与先前形成的模型中的支持向量结合起来形成新的训练集。 (如果是,那么如何将支持向量与新的图形数据结合起来?我正在研究
libsvm
)
或者:
-
是否应该将新数据和完整的旧数据组合在一起,形成新的训练集,而不仅仅是支持向量?
哪种方法更适合再训练,在准确性和记忆力方面更可行和更有效?
【问题讨论】:
【参考方案1】:您必须始终考虑整个新连接的训练集来重新训练。 如果某些“新点”最接近决策边界,则来自“旧”模型的支持向量可能不再是支持向量。在 SVM 背后有一个必须解决的优化问题,请记住这一点。使用给定的训练集,您可以找到该训练集的最佳解决方案(即支持向量)。一旦数据集发生变化,这样的解决方案可能就不再是最优的了。 SVM 训练只不过是一个最大化问题,其中几何和功能边界是目标函数。就像最大化给定函数f(x)...但是你改变了f(x):通过从训练集中添加/删除点你有一个更好的/对决策边界的最差理解,因为此类决策边界是通过采样知道的,其中样本确实是训练集中的模式。 我理解您对时间和内存效率的担忧,但这是一个常见问题:确实为所谓的大数据训练 SVM 仍然是一个开放的研究课题(有一些关于反向传播训练的提示),因为这样的优化问题(以及关于哪些拉格朗日乘数应该成对优化的启发式)不容易并行化/分布在多个工作人员上。
LibSVM 使用著名的序列最小优化算法来训练 SVM:here 如果您需要有关 SVM 背后的优化问题的更多信息,可以找到 John Pratt 关于 SMO 算法的文章。
【讨论】:
所以如果我想关注结果的准确性,你会建议用整个数据重新训练并忽略内存效率? 100% 是的。我现在正在使用 SVM(在 LibSVM 和 Matlab 中),我真的理解您的担忧,但这只是编写更好代码的冲刺;) 谢谢,非常有帮助! :)【参考方案2】:想法 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,亚历山大·范伯格;Active Set Support Vector Regression
; IEEE 神经网络汇刊,卷。 15,没有。 2、2004 年 3 月
【讨论】:
这仅适用于线性 SVM。此外,它似乎不允许添加新数据点和重用 SV:即使是 Matlab 实现也应该考虑到以前的 SVM 模型,但输入参数只是数据矩阵和标签矩阵。作者只是陈述了一种更有效的处理线性 SVM 的方法。从论文“我们注意到 active set 计算策略与 active learning 无关。” 提及严谨研究的来源应该对社区有益。当然,学术界提出了公正的结果,也讨论了弱点。 否决引用是否公平? 有见地的论文,但它是否适合再培训? 如果我没记错的话,这是作为他们在 Dave Musicant、Olvi Mangasarian 的论文中提出的方法中提出的非终止处理来处理的;通过行和列分块实现大规模 SVR (nips99.pdf)【参考方案3】:这是对您问题的纯理论思考。这个想法还不错。但是,它需要扩展一点。我在这里纯粹是为了从第一批中稀疏训练数据的目标。
主要问题 - 这就是为什么这纯粹是理论上的 - 是您的数据通常不是线性可分的。那么误分类点就很重要了。他们会破坏我在下面写的内容。此外,这个想法需要一个线性内核。但是,可能可以推广到其他内核
要了解您的方法存在的问题,请查看以下支持向量 (x,y,class)
:(-1,1,+),(-1,-1,+),(1,0,-)
。超平面是一条穿过零的垂直线。如果您在下一批中有(-1,-1.1,-)
点,最大边距超平面将倾斜。现在可以利用它来进行稀疏化。您可以计算两对支持向量((-1,1,+),(1,0,-)
、(-1,-1,+),(1,0,-)
)之间的最小边距超平面(在 2d 中只有 2 对。更高维度或非线性内核可能更多)。这基本上是通过这些点的线。之后,您对所有数据点进行分类。然后,将任一模型中的所有错误分类点以及支持向量添加到第二批。而已。其余点不相关。
除了上面提到的 C/Nu 问题。维度的诅咒显然会在这里杀死你
一张图片来说明。红色:支持向量,第一批,蓝色,非支持向量,第一批。绿色新点第二批。 红线第一个超平面,绿色最小边距超平面错误分类蓝色点,蓝色新超平面(这是一个手适合;))
【讨论】:
以上是关于机器学习 - 支持向量机的主要内容,如果未能解决你的问题,请参考以下文章