一一训练scikit svm(在线或随机训练)

Posted

技术标签:

【中文标题】一一训练scikit svm(在线或随机训练)【英文标题】:Train scikit svm one by one (online or stochastic training) 【发布时间】:2013-04-14 06:37:41 【问题描述】:

我正在使用 scikit 库来使用 svm。我有大量数据无法一起阅读以提供fit() function。 我想对文件中的所有数据进行迭代并一一训练 svm。有没有办法做到这一点。文档并不清楚,在他们的教程中,他们立即将完整数据提供给fit。 有什么方法可以一一训练(意思可能是像为训练数据的每个输入模式调用fit)。

【问题讨论】:

【参考方案1】:

支持向量机(至少在 scikit-learn 封装的 libsvm 中实现)本质上是一种批处理算法:它需要一次访问内存中的所有数据。因此它们不可扩展。

相反,您应该使用支持通过partial_fit 方法进行增量学习的模型。例如一些线性模型,如sklearn.linear_model.SGDClassifier 支持partial_fit 方法。您可以对数据集进行切片并将其加载为形状为(batch_size, n_features) 的小批量序列。 batch_size 可以为 1,但效率不高,因为 Python 解释器开销(+ 数据加载开销)。因此,建议以至少 100 的 minitaches 为单位引导样本。

【讨论】:

我不会说 SVM 是一种批处理方法,因为 SGDClassifier 是一种在线实现;)当然,您对 LibSVM 的声明是正确的。 (正如 LaSVM 所示,对于双 QP 的求解器来说,这甚至通常都不是真的)。​​

以上是关于一一训练scikit svm(在线或随机训练)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 scikit-learn 中继续训练 svm 和 knn?

将经过训练的 SVM 从 scikit-learn 导入到 OpenCV

如何使用 scikit.learn 将字符串列表用作 svm 的训练数据?

使用 scikit-learn 训练数据时,SVM 多类分类停止

如何在训练期间为 Scikit Learn SVM 中的每个标签分配概率?

SciKit One-class SVM 分类器训练时间随着训练数据的大小呈指数增长