一一训练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 多类分类停止