一尘不染

sklearn中的SVM是否支持增量(在线)学习?

python

我目前正在设计文本文章的推荐系统(“有趣”或“不有趣”的二进制情况)。我的规范之一是它应该不断更新以适应不断变化的趋势。

据我所知,最好的方法是利用支持增量/在线学习的机器学习算法。

Perceptron和Winnow之类的算法支持在线学习,但是我对支持向量机并不完全确定。scikit-learn
python库是否支持在线学习,如果支持,支持向量机是可以利用它的算法之一吗?

我显然并不完全依赖于使用支持向量机,但是由于它们的全面性能,它们通常是二进制分类算法。最后,我愿意改变为最合适的方式。


阅读 213

收藏
2020-12-20

共1个答案

一尘不染

尽管确实存在用于SVM的在线算法,但是指定要内核还是线性SVM变得很重要,因为针对线性SVM的特殊情况已经开发了许多有效的算法。

对于线性情况,如果您在scikit-learn中将SGD分类器与铰链损耗和L2正则化配合使用,您将获得一个可以在线/增量更新的SVM。您可以将其与近似于内核的特征转换结合使用以类似于在线内核SVM。

我的规范之一是它应该不断更新以适应不断变化的趋势。

这被称为 概念漂移,
不能通过简单的在线SVM很好地处理。使用PassiveAggresive分类器可能会给您带来更好的结果,因为它的学习率不会随着时间而降低。

假设您在训练/跑步时获得了反馈,则可以尝试检测准确性随时间的降低,并在准确性开始下降时开始训练新模型(并在您认为新模型变得更准确时切换到新模型)。JSAT有2种漂移检测方法(请参阅jsat.driftdetectors),可用于跟踪准确性并在准确性发生变化时向您发出警报。

它还具有更多在线线性和核方法。

(偏见:我是JSAT的作者)。

2020-12-20