【发布时间】:2014-02-06 22:48:25
【问题描述】:
我们都知道SVM的目标函数是迭代训练的。为了继续训练,如果我们想继续在同一个训练数据集上,至少我们可以存储迭代中使用的所有变量。
同时,如果我们想在稍微不同的数据集上进行训练,我们应该怎么做才能充分利用之前训练的模型?或者这样的想法有意义吗?我认为如果我们训练一个 K-means 模型是非常合理的。但我不确定它是否仍然对 SVM 问题有意义。
【问题讨论】:
标签: machine-learning svm libsvm
我们都知道SVM的目标函数是迭代训练的。为了继续训练,如果我们想继续在同一个训练数据集上,至少我们可以存储迭代中使用的所有变量。
同时,如果我们想在稍微不同的数据集上进行训练,我们应该怎么做才能充分利用之前训练的模型?或者这样的想法有意义吗?我认为如果我们训练一个 K-means 模型是非常合理的。但我不确定它是否仍然对 SVM 问题有意义。
【问题讨论】:
标签: machine-learning svm libsvm
一般来说这是没有意义的。对于每个训练集向量,SVM 训练是一个optimization process。每个训练向量都有一个相关的系数,结果是0(不相关)或> 0(支持向量)。添加另一个训练向量会带来另一个不同的优化问题。
我能想到的重用之前训练中的信息的唯一方法是从之前的训练中选择支持向量并将它们添加到新的训练集中。我不确定,但这可能会对泛化产生负面影响 - SVM 的VC dimension 与支持向量的数量有关,因此将以前的支持向量添加到新数据集可能会增加支持向量的数量。
显然,还有更多可能性,如lennon310's answer 所述。
【讨论】:
有一些关于这个主题的文献:
alpha-seeding,其中将训练数据分成块。在 ith 块上训练 SVM 后,您可以使用它们来训练带有 (i+1)th 块的 SVM。
Incremental SVM 用作在线学习,您可以在其中使用新示例更新分类器,而不是重新训练整个数据集。
SVM heavy 包含在线 SVM 培训的软件包。
【讨论】:
您所描述的是在线学习算法的作用,不幸的是,SVM 的经典定义是以批处理方式完成的。
但是,有几个 SVM 求解器以在线学习的方式对底层优化问题产生准最优假设。特别是我最喜欢的是 Pegasos-SVM,它可以在线性时间内找到一个很好的接近最优解:
【讨论】: