【问题标题】:How to continue to train SVM based on the previous model如何在之前模型的基础上继续训练SVM
【发布时间】:2014-02-06 22:48:25
【问题描述】:

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

同时,如果我们想在稍微不同的数据集上进行训练,我们应该怎么做才能充分利用之前训练的模型?或者这样的想法有意义吗?我认为如果我们训练一个 K-means 模型是非常合理的。但我不确定它是否仍然对 SVM 问题有意义。

【问题讨论】:

    标签: machine-learning svm libsvm


    【解决方案1】:

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

    我能想到的重用之前训练中的信息的唯一方法是从之前的训练中选择支持向量并将它们添加到新的训练集中。我不确定,但这可能会对泛化产生负面影响 - SVM 的VC dimension 与支持向量的数量有关,因此将以前的支持向量添加到新数据集可能会增加支持向量的数量。

    显然,还有更多可能性,如lennon310's answer 所述。

    【讨论】:

    • 是的,我认为SV的数量可能会增加。我问这个问题是因为我不了解硬负挖掘程序。它将删除一些 easy 负面训练示例并添加一些 hard 训练示例。但我不知道是增量训练过程还是我们只是改变负例并从头开始重新训练SVM。
    • 是的,我刚刚解释了为什么我对这个问题感到困惑。谢谢!
    【解决方案2】:

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

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

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

    3. SVM heavy 包含在线 SVM 培训的软件包。

    【讨论】:

      【解决方案3】:

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

      但是,有几个 SVM 求解器以在线学习的方式对底层优化问题产生准最优假设。特别是我最喜欢的是 Pegasos-SVM,它可以在线性时间内找到一个很好的接近最优解:

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

      【讨论】:

      • 谢谢。 Pegasos-SVM 似乎是一个非常强大的在线学习工具!任何对 Pegasos-SVM 感兴趣的人都可以尝试Sofia-ml。 @Pedrom
      猜你喜欢
      • 2020-06-16
      • 2020-09-30
      • 2019-02-04
      • 1970-01-01
      • 1970-01-01
      • 2017-04-16
      • 2020-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多