使用scikit-multiflow在Python中进行增量学习的实用介绍
介绍
数据无处不在。无论是个人资料图片,微博,传感器应用程序,信用卡交易,电子邮件还是新闻提要,数据都在这里……而且它以惊人的速度生成。利用这些看似无限的数据流,关键挑战之一就是创建轻量级模型,这些模型随时可以预测并适应数据分布的变化。在这种情况下,传统机器学习方法的局限性导致了在线学习(也称为增量学习)方法的发展。
什么是增量学习?
在每次迭代中,模型都会预测一个类标签,显示出真实的标签,然后进行更新
增量学习指的是一系列可扩展算法,可以学习从无限数据流中顺序更新模型1。在"传统"机器学习中,我们获得了由(输入,输出)对组成的完整数据集,而在增量学习中,创建模型时并没有所有可用数据。取而代之的是,数据点一次到达一个,我们必须建立一个"活得"模型,该模型可以随着数据的到来而学习和适应。增量模型具有以下特征2:
现在,我们已经讨论了增量学习是什么,让我们在Scikit-Multiflow(一个用于数据流学习的免费Python框架)中创建一个简单的例子。
我们要做的第一件事是安装scikit-multiflow。
pipinstall-Uscikit-multiflow
导入数据生成器很容易,可以使用以下命令完成:
fromskmultiflow.dataimportSEAGenerator
使用Generator非常容易。我们需要做的第一件事是将其初始化如下:
stream=SEAGenerator()#createastream
stream.prepare_for_use()#preparethestreamforuse
然后,如果我们希望获得数据样本,我们要做的就是
X,Y=stream.next_sample()
其中X是输入,是6维np.array,而Y是输出,是2维np.array。
简单的在线分类器
现在,让我们为SEA数据流创建一个简单的分类器。scikit-multiflow提供了许多增量模型,其中最流行的一种是霍夫丁树。
霍夫丁树
在scikit-multiflow中,创建Hoeffding树的步骤如下
fromskmultiflow.treesimportHoeffdingTree
tree=HoeffdingTree()
训练Hoeffding树进行分类
如果我们想在SEA数据流上训练树,则可以遍历想要的许多数据点。
correctness_dist=[]
foriinrange(nb_iters):
X,Y=stream.next_sample()#getthenextsample
prediction=tree.predict(X)#predictYusingthetree
ifY==prediction:#checktheprediction
correctness_dist.append(1)
else:
correctness_dist.append(0)
tree.partial_fit(X,Y)#updatethetree
importmatplotlib.pyplotasplttime=[iforiinrange(1,nb_iters)]
accuracy=[sum(correctness_dist[:i])/len(correctness_dist[:i])
foriinrange(1,nb_iters)]
plt.plot(time,accuracy)
AccuracyovertimeforaHoeffdingtreemodelingtheSEAgenerator
Scikit-Multiflow的替代方法
在scikit-multiflow中,有一种内置的方法可以用更少的代码完成完全相同的事情。我们可以做的是导入EvaluatePrequential类:
然后,我们可以如下设置"评估者"
evaluator=EvaluatePrequential(show_plot=True,max_samples=nb_iters)
设置show_plot=True选项将允许弹出窗口显示分类精度的实时图。
现在已经设置了评估程序,我们可以使用它以与以前相同的方式在SEA数据流上增量训练Hoeffding树:
evaluator.evaluate(stream=stream,model=tree)
结论
希望本教程可以帮助您了解增量学习的基础。此外,我希望您现在掌握如何将scikit-multiflow用于基本的数据流学习任务。
参考文献
[1]DoyenSahoo等人,"在线深度学习:动态学习深度神经网络"(2022),1711.03705
[2]JesseRead等人,"动态和不断发展的数据中的批次增量与实例增量学习"(2012),978–3–642–34156–4_29
[3]PedroDomingos和GeoffHulten,"挖掘高速数据流"(2000年),347090.347107
[4]MaayanHarel等人,"通过重采样进行概念漂移检测"(2014年),citation.cfm