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

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

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

2) 数据集2具有低维度,包含1000个样本(真实数据)。我假设“两个数据集具有相同的分布”

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


回答:

在sklearn中,你只能对线性核使用SGDClassifier(需要适当选择损失/惩罚项,损失应为hinge,惩罚为L2)来实现这一点。增量学习通过partial_fit方法支持,这在SVCLinearSVC中都没有实现。

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

总结如下:

  • 从理论和实践的角度来看,预训练SVM是没有意义的。你可以只在第二个数据集上学习,或者同时在两个数据集上学习。预训练对于那些受到局部最小值影响(或任何形式的难以收敛)的方法有意义,因此需要从接近实际解的地方开始,才能找到合理的模型(如神经网络)。SVM不属于此类
  • 你可以出于效率原因使用增量拟合(虽然在sklearn中这种方法非常有限),但对于如此小的数据集,你完全可以一次性拟合整个数据集。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注