我目前正在设计一个文本文章推荐系统(“有趣”或“不有趣”的二元情况)。我的要求之一是它应该不断更新以适应不断变化的趋势。
据我所知,最好的方法是利用支持增量/在线学习 http://en.wikipedia.org/wiki/Online%5fmachine%5flearning.
像 Perceptron 和 Winnow 这样的算法支持在线学习,但我并不完全确定支持向量机。 scikit-learn python 库是否支持在线学习,如果支持,支持向量机是可以利用它的算法之一吗?
显然,我并没有完全依赖于使用支持向量机,但由于其全面的性能,它们通常是二元分类的首选算法。我愿意改变到最终最适合的方式。
虽然 SVM 的在线算法确实存在,但指定是否需要内核 SVM 还是线性 SVM 变得很重要,因为已经针对线性 SVM 的特殊情况开发了许多有效的算法。
对于线性情况,如果使用scikit-learn 中的 SGD 分类器 http://scikit-learn.org/stable/modules/sgd.html#sgd通过铰链损失和 L2 正则化,您将获得一个可以在线更新/增量的 SVM。您可以将其与近似内核的特征变换 http://scikit-learn.org/stable/modules/kernel_approximation.html类似于在线内核 SVM。
我的要求之一是它应该不断更新以适应不断变化的趋势。
这被称为概念漂移,简单的在线 SVM 无法很好地处理。使用 PassiveAggresive 分类器可能会给您带来更好的结果,因为它的学习率不会随着时间的推移而降低。
假设您在训练/运行时获得反馈,您可以尝试检测随着时间的推移准确性的下降,并在准确性开始下降时开始训练新模型(并在您认为新模型变得更准确时切换到新模型)。JSAT https://code.google.com/p/java-statistical-analysis-tool/有 2 种漂移检测方法(参见jsat.漂移探测器 https://code.google.com/p/java-statistical-analysis-tool/source/browse/#svn/trunk/JSAT/src/jsat/driftdetectors)可用于跟踪准确性并在其发生变化时向您发出警报。
它还具有更多的在线线性和核方法。
(偏见注:我是 JSAT 的作者)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)