我目前正在设计一个文本文章推荐系统(二进制分类为“有趣”或“不有趣”)。我的要求之一是它应该持续更新以适应变化的趋势。
据我所知,实现这个功能的最佳方法是利用支持增量/在线学习的机器学习算法。
感知器和Winnow等算法支持在线学习,但我不完全确定支持向量机是否也支持。scikit-learn Python库是否支持在线学习,如果支持,支持向量机是否可以利用它?
显然,我并不完全依赖使用支持向量机,但由于其全面的性能,通常会选择它作为二元分类的默认算法。最终我愿意改用任何最合适的算法。
我目前正在设计一个文本文章推荐系统(二进制分类为“有趣”或“不有趣”)。我的要求之一是它应该持续更新以适应变化的趋势。
据我所知,实现这个功能的最佳方法是利用支持增量/在线学习的机器学习算法。
感知器和Winnow等算法支持在线学习,但我不完全确定支持向量机是否也支持。scikit-learn Python库是否支持在线学习,如果支持,支持向量机是否可以利用它?
显然,我并不完全依赖使用支持向量机,但由于其全面的性能,通常会选择它作为二元分类的默认算法。最终我愿意改用任何最合适的算法。
它还具有更多的在线线性和核方法。
(偏见声明:我是JSAT的作者)。
也许我太天真了,但我认为值得提一下如何在逐步呈现数据时更新科学工具箱SGD分类器:
clf = linear_model.SGDClassifier()
x1 = some_new_data
y1 = the_labels
clf.partial_fit(x1,y1)
x2 = some_newer_data
y2 = the_labels
clf.partial_fit(x2,y2)
warm_start=True
来结合fit()
和partial_fit()
:
https://stackoverflow.com/questions/49208617/sklearn-partial-fit-not-showing-accurate-results-as-fit/51027226#51027226 - eddy85br简短的回答是不支持。Sklearn的实现(以及大部分现有的其他实现)都不支持在线SVM训练。虽然可以通过增量方式来训练SVM,但这并不是一件容易的事情。
如果您想限制自己只使用线性情况,那么答案是是的,因为Sklearn提供了随机梯度下降(SGD),它具有最小化SVM标准的选项。
您还可以尝试使用支持在线SVM训练的pegasos库。
趋势适应问题目前在机器学习社区中非常流行。正如@Raff所述,它被称为概念漂移,并且有许多方法,通常是元模型,它们分析“趋势的行为方式”并更改底层机器学习模型(例如强制其在数据子集上重新训练)。因此,您在这里有两个独立的问题:
对于批处理学习任务,SGD通常具有递减的学习速率,并多次遍历训练集。因此,对于纯在线学习,请确保在sklearn.linear_model.SGDClassifier()中将learning_rate设置为'constant',并设置eta0= 0.1或任何所需值。因此,操作步骤如下:
clf= sklearn.linear_model.SGDClassifier(learning_rate = 'constant', eta0 = 0.1, shuffle = False, n_iter = 1)
# get x1, y1 as a new instance
clf.partial_fit(x1, y1)
# get x2, y2
# update accuracy if needed
clf.partial_fit(x2, y2)
如果您对概念漂移的在线学习感兴趣,这里有一些先前的工作。
概念漂移学习:综述https://arxiv.org/pdf/1010.4784.pdf
概念漂移问题:定义和相关工作http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.58.9085&rep=rep1&type=pdf
概念漂移适应的调查http://www.win.tue.nl/~mpechen/publications/pubs/Gama_ACMCS_AdaptationCD_accepted.pdf
流数据的MOA概念漂移主动学习策略http://videolectures.net/wapa2011_bifet_moa/
概念漂移算法流http://people.cs.georgetown.edu/~maloof/pubs/maloof.heilbronn12.handout.pdf
使用概念漂移挖掘数据流http://www.cs.put.poznan.pl/dbrzezinski/publications/ConceptDrift.pdf
使用流处理和机器学习分析时间序列数据http://www.ibmbigdatahub.com/blog/analyzing-time-series-data-stream-processing-and-machine-learning