原文:
www.kdnuggets.com/2021/10/teaching-ai-classify-time-series-patterns-synthetic-data.html
评论
我们想训练一个可以做类似事情的 AI 代理或模型,
图片来源:作者使用Pixabay 图片(免费使用)准备的
更具体地说,我们想训练一个 AI 代理(或模型)来识别/分类时间序列数据,
-
低/中/高方差
-
异常频率(异常比例很小或很高)
-
异常尺度(异常是否远离正常值或接近正常值)
-
时间序列数据中的正向或负向变化(在存在一些异常的情况下)
但是,我们不想进行大量的特征工程或学习复杂的时间序列算法(例如 ARIMA)和特性(例如季节性、平稳性)。
我们只想将我们的时间序列数据(带有正确标签)输入到某种监督‘学习’机器中,这样它就可以从原始数据中学习这些类别(高或低方差、异常太少或太多等)。
为什么不利用一个 Python 库,它可以自动为我们完成这种分类工作,而我们只需将数据以标准的 Numpy/Pandas 格式输入其中?
如果这个库具有我们最喜欢的 Scikit-learn 包的外观和感觉,那就更好了!
我们在美丽的库中找到了这样的功能 —— tslearn。简单来说,它是一个提供时间序列分析的机器学习工具的 Python 包。该包构建在(因此依赖于)scikit-learn
、numpy
和 scipy
库之上。
图片来源:tslearn 文档
正如我在这篇文章中所写的 —— “合成数据集是通过程序生成的数据仓库。因此,它不是通过任何现实生活中的调查或实验收集的。它的主要目的是灵活且足够丰富,以帮助机器学习从业者进行各种分类、回归和聚类算法的有趣实验。”
…然后扩展了本文中的论点——“合成时间序列也不例外——它帮助数据科学家实验各种算法方法,并以仅用真实数据集无法实现的方式为实际部署做准备。”
基本上,我们想要合成具有异常和其他模式的时间序列数据,自动标记它们,并将它们输入到tslearn
算法中,以便教会我们的 AI 代理这些模式。
特别是,如果我们想使用基于深度学习的分类器(如tslearn
提供的),那么我们可能需要大量涵盖所有可能变异的数据,这在现实生活中可能不易获得。这时,合成数据就派上用场了。
那就开始冒险吧!
演示笔记本可以在我的 Github 仓库中找到。将时间序列数据转换为适合tslearn
模型训练的格式是相当简单的,已在笔记本中说明。在这里,我们主要关注不同类型的分类结果作为说明。
我处理大量工业数据,即一组传感器从机器、工厂、操作员和业务流程中生成源源不断的数字数据。
检测时间序列数据流是否具有高或低方差对许多下游过程决策可能至关重要。因此,我们从这里开始。
流程很简单,
-
使用
SyntheticTS
模块生成合成数据(在我的文章中讨论过,可以在这里找到) -
生成相应的类别标签以匹配这些 Numpy/Pandas 数据系列(注意基于领域知识注入的自动标签生成)
-
将合成序列数据转换为
tslearn
时间序列对象(数组) -
将其存储在训练数据集中
-
将训练数据输入到适合的时间序列分类器中,我们选择了
TimeSeriesMLPClassifier
方法,该方法建立在熟悉的 Scikit-learn 多层感知机方法之上,基本上实现了全连接深度学习网络。
使用合成数据的训练流程,来源:完全由作者准备
TimeSeriesMLPClassifier
具备标准 Scikit-learn MLP 分类器的所有功能,
-
隐藏层大小和神经元数量
-
激活函数
-
求解器/优化器(例如‘Adam’)
-
学习率
-
批量大小
-
容忍度
-
动量设置
-
早停准则
基本上,我们希望合成具有异常和其他模式的时间序列数据,自动标记它们,并将其输入
tslearn
算法,以便教我们的 AI 代理这些模式。
为了简洁起见,在笔记本中我没有显示训练/测试拆分,但这应该作为实际应用的数据科学工作流标准步骤。
我们可以在训练后绘制标准损失曲线,并进行各种超参数调整,以使性能达到最佳。
然而,展示深度学习分类器调整并不是本文的目标。我们更愿意关注最终的结果,即它做出了什么样的分类决策。
以下是一些随机测试结果。
本文的整个重点是展示可以通过合成数据避免手动标记。
我生成了数百个具有随机方差或偏移的合成时间序列来训练分类器。由于它们是程序生成的,因此也可以自动标记。
一旦你看到实际笔记本中的生成代码,这一点将会清楚。以下是方差训练的思路。
识别异常是不够的。在大多数现实情况中,你还需要识别它们的频率和发生模式。
这是因为工业数据分析系统通常负责在检测到数据流中的足够异常后生成警报。因此,为了决定是否发出警报,它们需要对异常计数是否代表正常数据的显著部分有一个清晰的认识。
你不想引发太多虚假警报,对吧?这对 AI 驱动系统的声誉不好。
所以,我们进行了同样的过程来训练一个 AI 模型,以处理时间序列数据中的异常比例。以下是随机测试结果,
在许多情况下,我们还希望将传入的数据分类为高/中/低异常幅度。对于工业数据分析,这个特征可能会指示机器或过程的状态异常。
我们遵循了上述相同的训练过程并获得了这些结果,
工业数据分析中的另一个经典操作是检测来自机器的传感器数据中的漂移/偏移。这可能有多种原因,
-
机器可能会老化,
-
过程配方/设置突然改变而没有适当的记录,
-
小的子组件可能会随着时间的推移而退化。
底线是,AI 驱动的系统应该能够识别这些类别——至少在正向或负向转移及其发生点方面,即漂移是否在过程生命周期中早期或晚期开始。
识别异常是不够的。在大多数实际情况中,你还需要识别其频率和出现模式。这是因为工业数据分析系统通常负责在检测到数据流中的足够异常后生成警报。
在这种情况下,我们将转移的位置(在整个时间段中的早期或晚期)也纳入了考虑。因此,我们有以下类别用于训练数据,
-
早期正向转移
-
晚期正向转移
-
早期负向转移
-
晚期负向转移
由于这种复杂性增加,我们需要生成比之前实验更多的合成数据。以下是结果,
时间序列分类是许多精彩应用场景中一个非常有趣的话题。在本文中,我们展示了如何使用合成数据来训练 AI 模型(具有几个全连接层的深度学习网络)用于模拟工业过程或传感器流的单维时间序列数据。
特别是,我们专注于教会 AI 模型各种异常特征和数据漂移模式,因为这些分类是机器降解的重要指标。简而言之,它们构成了所谓的预测分析在工业 4.0或智能制造领域的基础。
我们希望未来 AI 驱动的预测分析中对合成数据的使用会显著增长。
你可以查看作者的GitHub** 代码库**,获取有关机器学习和数据科学的代码、想法和资源。如果你像我一样,对 AI/机器学习/数据科学充满热情,请随时在 LinkedIn 上添加我或关注我在 Twitter 上的动态。
**简介:Tirthajyoti Sarkar**是 Adapdix Corp.的数据科学/机器学习经理。他定期为 KDnuggets 和 TDS 等出版物贡献关于数据科学和机器学习的多样话题。他撰写了数据科学书籍,并参与开源软件的开发。Tirthajyoti 拥有电气工程博士学位,并在攻读计算数据分析硕士学位。可以通过 tirthajyoti at gmail[dot]com 联系他。
原文。经许可转载。
相关:
-
GPU 驱动的数据科学(非深度学习)与 RAPIDS
-
为什么以及如何学习“高效数据科学”?
-
Python 中的蒙特卡洛积分
1. 谷歌网络安全证书 - 快速进入网络安全职业的捷径
2. 谷歌数据分析专业证书 - 提升你的数据分析技能
3. 谷歌 IT 支持专业证书 - 支持你的组织的 IT 需求