用于预测性维护的循环神经网络
- 作者: Umberto Griffo
- Twitter: @UmbertoGriffo
Colab
你可以直接在 Colab 上试用代码。 在你的 Drive 中保存一份副本,尽情享用吧!
软件环境
- Python 3.6
- numpy 1.13.3
- scipy 0.19.1
- matplotlib 2.0.2
- spyder 3.2.3
- scikit-learn 0.19.0
- h5py 2.7.0
- Pillow 4.2.1
- pandas 0.20.3
- TensorFlow 1.3.0
- Keras 2.1.1
问题描述
在这个例子中,我基于 [1] 和 [2] 中描述的场景,构建了一个 LSTM 网络,用于预测飞机发动机 [3] 的剩余使用寿命(或故障时间)。 该网络使用模拟的飞机传感器数据来预测未来发动机何时会发生故障,从而提前计划维护。 我们要问的问题是:"给定这些飞机发动机运行和故障事件历史,我们能否预测正在服役的发动机何时会发生故障?" 我们将这个问题重新表述为两个密切相关的问题,并使用两种不同类型的机器学习模型来回答:
* 回归模型:正在服役的发动机在发生故障前还能运行多少个周期?
* 二元分类:这台发动机是否会在 w1 个周期内发生故障?
数据概要
在 Dataset 目录中,有训练、测试和真实数据集。 训练数据由多个多变量时间序列组成,以"周期"为时间单位,每个周期包含 21 个传感器读数。 可以假设每个时间序列是由同一类型的不同发动机生成的。 测试数据的数据结构与训练数据相同。 唯一的区别是数据并不指示故障何时发生。 最后,真实数据提供了测试数据中发动机的剩余工作周期数。 下图显示了数据样本:
你可以在 [1] 和 [2] 找到更多关于数据的详细信息。
实验结果
回归模型结果
平均绝对误差 | 决定系数 (R^2) |
---|---|
12 | 0.7965 |
以下图片展示了损失函数、平均绝对误差、R^2以及实际数据与预测数据对比的趋势: |
二元分类结果
准确率 | 精确率 | 召回率 | F1分数 |
---|---|---|---|
0.97 | 0.92 | 1.0 | 0.96 |
以下图片展示了损失函数、准确率以及实际数据与预测数据对比的趋势:
扩展
我们还可以创建一个模型来确定故障是否会在不同的时间窗口内发生,例如,在(1,w0)窗口内发生故障或在(w0+1, w1)天的窗口内发生故障,以此类推。这将成为一个多分类问题,数据需要相应地进行预处理。
谁在引用这项工作?
- 在《物联网人工智能实践》一书的第10章中
- 在《移动和无线通信实用案例场景》一书的第7章中
- 在《使用循环神经网络预测事件发生时间》硕士论文中(巴塞罗那大学,巴塞罗那,西班牙)。可从这里获取
- 在《探索云辅助微型机器学习应用模式在预测性健康管理场景中的应用》中。可从这里和这里获取
参考文献
- [1] 预测性维护的深度学习 https://github.com/Azure/lstms_for_predictive_maintenance/blob/master/Deep%20Learning%20Basics%20for%20Predictive%20Maintenance.ipynb
- [2] 预测性维护:第2A步(共3步),训练和评估回归模型 https://gallery.azure.ai/Experiment/Predictive-Maintenance-Step-2A-of-3-train-and-evaluate-regression-models-2
- [3] A. Saxena 和 K. Goebel (2008)。"涡扇发动机退化模拟数据集",NASA艾姆斯预测数据库(https://ti.arc.nasa.gov/tech/dash/groups/pcoe/prognostic-data-repository/#turbofan),NASA艾姆斯研究中心,加利福尼亚州莫菲特场
- [4] 理解LSTM网络 http://colah.github.io/posts/2015-08-Understanding-LSTMs/