如何继续基于以前的模型训练SVM

时间:2014-01-17 14:50:05

标签: machine-learning svm libsvm

我们都知道SVM的目标函数是经过迭代训练的。为了继续训练,如果我们想继续使用相同的训练数据集,至少我们可以存储迭代中使用的所有变量。

然而,如果我们想要在略有不同的数据集上进行训练,我们应该怎样做才能充分利用以前训练过的模型?或者这种想法有意义吗?我认为如果我们训练K-means模型是非常合理的。但我不确定它是否仍然适用于SVM问题。

3 个答案:

答案 0 :(得分:3)

有一些关于这个主题的文献:

  1. alpha-seeding,其中训练数据被分成块。在ith块上训练SVM后,您可以使用它们并使用它们来训练具有(i+1)th块的SVM。

  2. Incremental SVM用作在线学习,您可以使用新示例更新分类器,而不是重新训练整个数据集。

  3. SVM heavy包含在线SVM培训。

答案 1 :(得分:3)

您所描述的是在线学习算法的功能,不幸的是,SVM的经典定义是以批处理方式完成的。

然而,有几种SVM求解器可以在线学习方式对下面的优化问题产生最优假设。特别是我最喜欢的是Pegasos-SVM,它可以在线性时间内找到一个好的近似最优解:

http://ttic.uchicago.edu/~nati/Publications/PegasosMPB.pdf

答案 2 :(得分:2)

一般来说,这没有意义。关于每个训练集向量,SVM训练是{​​{3}}。每个训练向量都有一个相关的系数,结果是0(不相关)或> 0(支持向量)。添加另一个训练向量会产生另一个不同的优化问题。

重复使用之前培训中信息的唯一方法是从之前的培训中选择支持向量,并将其添加到新的培训集中。我不确定,但这可能会对泛化产生负面影响 - SVM的optimization process与支持向量的数量有关,因此将以前的支持向量添加到新数据集可能会增加支持向量计数。 / p>

显然,正如VC dimension中所述,还有更多可能性。