如何用新数据更新 SVM 模型
How to update an SVM model with new data
我有两个不同大小的数据集。
1) 数据集 1 具有高维度 4500 个样本(草图)。
2) 数据集 2 是低维 1000 个样本(真实数据)。
我想 "both data set have the same distribution"
我想在第一个数据集上使用 sklearn
训练一个非线性 SVM
模型(作为预训练),之后我想更新模型的一部分第二个数据集(以适应模型)。
我怎样才能在 sklearn 上开发一种更新。如何更新 SVM 模型?
在Sklearn中,您只能为线性内核进行此操作,然后使用SGDClassifier
(在适当的选择loss/penalty术语中,损失应为铰链和罚款L2)。 partial_fit
方法支持增量学习,SVC
和 LinearSVC
均未实现。
不幸的是,在实践中,对于如此小的数据集,以增量方式拟合 SVM 是毫无用处的。 SVM 具有易于获得的全局解决方案,因此您不需要任何形式的预训练,事实上它应该根本不重要,如果你考虑的是神经网络意义上的预训练。如果正确实施,SVM 应该完全忘记以前的数据集。为什么不一次学习整个数据呢?这就是 SVM 应该做的。除非你正在使用 SVM 的一些非凸修改(然后预训练才有意义)。
总结一下:
- 从理论和实践的角度来看,预训练 SVM 毫无意义。您可以只在第二个数据集上学习,也可以同时在两个数据集上学习。预训练 仅 对于遭受局部最小值(或任何类型的硬收敛)的方法是合理的,因此需要从接近实际解决方案开始才能找到合理的模型(如神经网络)。 SVM 不是其中之一。
- 出于效率原因,您可以使用增量拟合(尽管在 sklearn 中它非常有限),但是对于如此小的数据集,您一次就可以很好地拟合整个数据集。
我有两个不同大小的数据集。
1) 数据集 1 具有高维度 4500 个样本(草图)。
2) 数据集 2 是低维 1000 个样本(真实数据)。 我想 "both data set have the same distribution"
我想在第一个数据集上使用 sklearn
训练一个非线性 SVM
模型(作为预训练),之后我想更新模型的一部分第二个数据集(以适应模型)。
我怎样才能在 sklearn 上开发一种更新。如何更新 SVM 模型?
在Sklearn中,您只能为线性内核进行此操作,然后使用SGDClassifier
(在适当的选择loss/penalty术语中,损失应为铰链和罚款L2)。 partial_fit
方法支持增量学习,SVC
和 LinearSVC
均未实现。
不幸的是,在实践中,对于如此小的数据集,以增量方式拟合 SVM 是毫无用处的。 SVM 具有易于获得的全局解决方案,因此您不需要任何形式的预训练,事实上它应该根本不重要,如果你考虑的是神经网络意义上的预训练。如果正确实施,SVM 应该完全忘记以前的数据集。为什么不一次学习整个数据呢?这就是 SVM 应该做的。除非你正在使用 SVM 的一些非凸修改(然后预训练才有意义)。
总结一下:
- 从理论和实践的角度来看,预训练 SVM 毫无意义。您可以只在第二个数据集上学习,也可以同时在两个数据集上学习。预训练 仅 对于遭受局部最小值(或任何类型的硬收敛)的方法是合理的,因此需要从接近实际解决方案开始才能找到合理的模型(如神经网络)。 SVM 不是其中之一。
- 出于效率原因,您可以使用增量拟合(尽管在 sklearn 中它非常有限),但是对于如此小的数据集,您一次就可以很好地拟合整个数据集。