如何使用新数据更新SVM模型

时间:2016-02-18 21:14:39

标签: python numpy machine-learning computer-vision scikit-learn

我有两个不同大小的数据集。

1)数据集1具有高维度4500个样本(草图)。

2)数据集2具有低维1000个样本(实际数据)。 我想“两个数据集具有相同的分布”

我想在第一个数据集上使用SVM训练一个非线性sklearn模型(作为预训练),之后我想在第二个数据集的一部分上更新模型数据集(适合模型)。 如何在sklearn上开发一种更新。如何更新SVM模型?

1 个答案:

答案 0 :(得分:9)

在sklearn中,你只能对线性内核使用SGDClassifier(适当选择损失/惩罚条款,损失应该是铰链,惩罚L2)。通过partial_fit方法支持增量学习,SVCLinearSVC均未实现此功能。

不幸的是,在实践中,对于这样的小数据集以增量方式拟合SVM是相当无用的。 SVM易于获得全局解决方案,因此您不需要预先培训任何形式,实际上它应该根本不重要,如果你是考虑在神经网络意义上预训练。如果正确实现,SVM应该完全忘记以前的数据集。为什么不一次学习整个数据呢?这就是SVM应该做的事情。除非你正在使用SVM的一些非凸修改(然后预训练才有意义)。

总结一下:

  • 从理论和实践的角度来看,预训练SVM没有意义。您既可以只学习第二个数据集,也可以同时学习两者。对于遭受局部最小值(或任何类型的硬收敛)的方法,预训练合理,因此需要在实际解决方案附近开始以能够找到合理的模型(如神经网络)。 SVM 不是其中之一
  • 出于效率原因,您可以使用增量拟合(尽管在sklearn中它非常有限),但是对于这样的小数据集,您可以立即完美地拟合整个数据集。