在传统的机器学习范式中,我们经常以离线学习的方式工作,从数据预处理开始,最后用算法建立数据模型来满足要求。这就变成了一个依赖存储和耗费时间的过程。为了克服这个问题,我们可以使用流数据进行预测分析或任何其他建模过程。我们不需要在建模之前存储数据。这可以通过流学习和在线学习来实现。在这篇文章中,我们将了解如何让流数据在机器学习中发挥作用。我们还将学习如何实现在线机器学习,从流式数据中学习。我们将在其中涉及的主要内容如下。
目录
- 什么是流式数据?
- 在线机器学习
- 关于Creme
- 使用Creme实现在线学习
什么是流式数据?
从不同来源以增量方式持续产生的数据可被视为流数据。基本上,这种类型的数据经常产生,并在不同的网站和平台上流动,这些网站和平台旨在提供与时间有关的信息。通常情况下,流数据被用于大数据的背景下,它是使用不同的来源以稳定或不稳定的高速产生的。在技术方面,它是一个用于通过互联网向设备提供信息的系统,允许用户立即访问内容,而不是离线或下载后使用内容。
我们知道,大数据主要集中在数据的存储上,这造成了巨大的存储成本,而且存储包括使数据非结构化的趋势。这对机器学习算法来说是没有效果的。数据流是一个数字编码的相干信号序列,用于传输数据,在数据传输过程中。数据流可以被认为是对从接收器中提取并由数据提供者提供的信息的集合。使用各种方法,我们可以使流媒体数据对我们有用,如做报告,提供按需的数据驱动的决策,以及机器学习算法。

我们可以从一个数据流或许多数据流中提取有用的信息,以达到建模的目的。由于离线机器学习模型是在训练好的或离线的数据上工作的,在用流媒体数据建模的情况下,在线机器学习就进入了画面。
在线机器学习
在线机器学习是一种将机器学习模型或预测器与按顺序排列的数据结合起来的方法,这样,最佳预测器就可以根据未来的数据在每个步骤中提供更新。在传统的机器学习程序中,我们使用稳定的数据来预测模型所设计的值,而另一方面,在线机器学习程序被设计为采用数据中的新模式,或者在数据作为时间的函数产生时采用数据。 在线机器学习模型有其自身的好处和用途,如在数据变化的情况下,模型的变化和更新可以自动完成,在金融市场、经济学等新数据频繁出现的领域,它们是非常受欢迎的模型。

上图表示任何在线机器学习系统的流程图,其中流媒体数据可用于训练在线机器学习算法,而模型的精度标签是不够的,我们可以分析问题,使算法在新的数据下表现更好。
有各种框架可用于执行在线机器学习。其中的几个是。
本文主要关注creme库,它提供了在流数据上进行在线机器学习的功能。因此,让我们详细了解creme及其实现。
关于creme
creme是一个用于 在线机器学习的python库,它提供了大部分专门为在线机器学习设计的包。使用该库,我们可以使用不同的方法来学习数据流。这个库允许模型一次学习一个数据点,这样就可以在需要时进行更新。这种方法有助于从没有存储在主存储器中的大数据中学习。该库为在线机器学习提供了集成选项,在这种情况下,新的数据流会不断到来。
使用creme可以实现以下好处:
- 实时更新的模型--在creme包下给出的模型的基本特征是它们是按时间递增的。
- creme下的模型可以适应概念漂移问题,这意味着它们试图预测目标变量随时间的变化。
- 在模型开发过程中,即使在处理数据流时,creme也能代表生产场景。
- creme下的模型被设计为需要很少的计算,它们不需要重新训练。
- 模型被设计为一次学习每个观察值。
以下是creme库的特点:
- 在creme的屋顶下,我们有各种最近的邻居、决策树和Naive Bayes模型。
- 库提供k-fold和交叉验证,渐进式模型验证方法。
- 我们有用于推荐系统、时间序列预测的模型,也有带有各种优化器的线性模型。
- 在无监督学习的情况下,该库提供了聚类的功能。
- 他们在包中有内置的类不平衡学习功能。
- 有了所有这些设施,我们就可以选择在软件包中进行特征提取和选择。
- 各种内置的数据集,如航空公司的乘客,小鸡的权重,欺诈检测,和许多其他的数据集,这样我们就可以轻松地学习库的用法。
- 我们在库中有一个异常检测功能。
使用Creme实现在线学习
现在,让我们使用creme库实现一个线性模型,即二元分类的逻辑回归。
安装
使用creme的基本要求是python 3.6或以上。我们可以使用pip和以下命令来安装这个库。
!pip install creme
现在让我们开始建立一个逻辑回归模型,对网站钓鱼数据集进行分类。在进行建模之前,让我们检查一下数据集所包含的实体。
从creme库中导入数据集
from creme import datasets
A_b = datasets.Phishing()
print(A_b)
输出:

上述输出代表了钓鱼网站数据集的一些基本细节。让我们把数据集分为因变量和自变量:
from pprint import pprint
for A, b in A_b:
pprint(A)
print("independent variable =", b)
break
输出:

现在我们可以以流的方式在数据上训练一个逻辑回归模型。
构建模型
导入用于数据预处理、模型和准确率指标的软件包。
from creme import compose, linear_model, metrics, preprocessing
为模型实例定义一个管道,并对数据进行缩放:
lm = compose.Pipeline(
preprocessing.StandardScaler(),
linear_model.LogisticRegression()
)
pprint(model)
输出:

制作一个精度指标实例。
metric = metrics.Accuracy()
使用模型实例进行预测,并依次更新模型,我们也可以使用metric.update模块更新准确度指标。
for A, b in A_b:
pred = lm.predict_one(A)
metric = metric.update(b, pred)
model = lm.fit_one(A, b)
运行上述代码后,我们可以检查我们在循环中更新的模型的准确性:
print(metric)
输出:

在这里,我们通过交错预测和模型更新创建并训练了一个线性回归模型。 该模型表现良好,我们可以看到该模型的准确率约为89%,这是相当不错的。
正如我们在特征中所解释的那样,我们可以使用creme库执行各种任务。
最后的话
在这篇文章中,我们对流媒体数据和在线机器学习进行了概述。在线机器学习有多种应用领域,如时间序列预测、垃圾邮件过滤、推荐系统、CTR预测和物联网应用。creme库提供了在线学习中所需要的流学习的大部分功能。我们可以根据需求来使用它们。
参考文献