Python 异常检测(Anomaly Detection)在工业设备监测中的常用机器学习算法
1. 传统机器学习方法
1.1 基于统计/距离的方法
(1) Z-Score / 标准差检测
- 原理:基于均值与方差检测极端点
- 适用场景:数据呈正态、简单传感器数据
- 优点:实现简单、速度快
- 缺点:对噪声敏感,适用面有限
(2) IQR(四分位数)
- 原理:基于箱线图离群点规则
- 适用场景:分布未知的小规模数据
- 优点:不依赖分布
- 缺点:无法处理复杂序列
(3) KNN 异常检测
- 原理:基于样本到邻居的距离
- 适用场景:低维数据,特征稳定的场景
- 优点:直观、容易实现
- 缺点:高维时计算大,实时性差
(4) LOF(Local Outlier Factor)
- 原理:比较局部密度差异
- 适用场景:工业多传感器数据异常
- 优点:适合密度不均的复杂数据
- 缺点:参数敏感
2. 基于概率模型的方法
(1) GMM(Gaussian Mixture Model)高斯混合模型
- 原理:使用多个高斯分布描述正常行为
- 适用场景:传感器数据聚类、设备状态识别
- 优点:能模拟复杂分布
- 缺点:需要大量数据拟合
(2) HMM(隐马尔可夫模型)
- 原理:对时间序列状态进行建模
- 适用场景:转速信号、振动序列
- 优点:可解释性好,适合序列
- 缺点:难以表示复杂工业系统
3. 基于监督/半监督学习的方法
(1) SVM / One-Class SVM
- 原理:用超平面包围正常数据
- 适用场景:无异常标签或少量异常标签
- 优点:效果稳定,适合小数据
- 缺点:不适合大规模数据
(2) Isolation Forest(孤立森林)
- 原理:随机切分特征空间,异常点更容易被隔离
- 适用场景:工业设备异常检测最常用
- 优点:快、适合大规模、多维数据
- 缺点:对时间序列依赖弱
4. 深度学习方法(工业检测主流)
4.1 自编码器(AutoEncoder)
(1) AE / DAE(去噪自编码器)
- 原理:只用正常数据训练重构网络,异常重构误差大
- 适用场景:多传感器、振动、声音
- 优点:工业视觉、信号监测常用
- 缺点:对工况变化敏感
(2) VAE(变分自编码器)
- 适用场景:复杂非线性信号
- 优点:更稳定的潜空间
- 缺点:训练复杂
4.2 时间序列模型
(1) LSTM / GRU 异常检测
- 原理:预测下一时刻值或重构序列
- 适用场景:振动序列、温度序列、压力波形
- 优点:适合时间依赖
- 缺点:训练慢
(2) LSTM AutoEncoder
- 适用场景:设备长期监测最常用
- 优点:效果优秀,模型小
- 缺点:需大量正常数据
(3) Transformer 异常检测
如 Informer、Anomaly Transformer
- 适用场景:多维序列,大规模数据
- 优点:处理长序列能力强
- 缺点:计算量大
4.3 GAN(生成对抗网络)
- 原理:通过生成-判别重构异常
- 适用场景:工业视觉、图像缺陷检测
- 优点:效果最好之一
- 缺点:训练不稳定
5. 工业视觉特有的异常检测方法
(1) CNN 特征 + Isolation Forest
- 适用于表面缺陷检测
(2) 深度图像重构(AE / VAE / GAN)
- 适合表面瑕疵、小样本缺陷检测
(3) 卷积 AutoEncoder + 像素级误差
- 工业视觉业内最常用
6. 典型工业应用场景对应方法
| 工业场景 | 推荐算法 |
|---|---|
| 振动信号(轴承/电机) | LSTM-AE、One-Class SVM、Isolation Forest |
| 多传感器 IoT 监控 | Isolation Forest、GMM、AutoEncoder |
| 表面缺陷检测 | AE/VAE/GAN,CNN+IF |
| 工业声学检测 | LSTM、AE、Spectrogram+CNN |
| 设备健康评估 | HMM、LSTM、Transformer |
MachineLearningNote
因为下面所有的机器学习代码均使用了sklearn,这里也补充了一下Sklearn的学习博客:
- Python机器学习笔记:sklearn库的学习
- Python机器学习笔记:使用sklearn做特征工程和数据挖掘
- Python机器学习笔记:Grid SearchCV(网格搜索)
1,logistic Regression
关于逻辑回归文件夹中的数据和代码,详情请参考博客:
- Python机器学习笔记:Logistic Regression
2,Decision Tree
关于决策树文件夹中的数据和代码,详情请参考博客:
- python机器学习笔记:深入学习决策树算法原理
- python机器学习笔记:ID3决策树算法实战
- Python机器学习笔记:CART算法实战
3,K-NearestNeighbor(KNN)
关于K近邻文件夹中的代码和数据,详情请参考博客:
- Python机器学习笔记:K-近邻(KNN)算法
4,Naive Bayes
关于朴素贝叶斯文件夹中的代码,详情请参考博客:
- Python机器学习笔记:朴素贝叶斯算法
5,K-Means&DBSCAN
关于K-Means&DBSCAN文件夹中的代码和数据,详情请参考博客:
- Python机器学习笔记:K-Means算法,DBSCAN算法
6,Ensemble Learning
关于集成学习文件夹中的代码,详情请参考博客:
- Python机器学习笔记 集成学习总结
7,One Class SVM
关于单样本分类文件夹中的代码,详情请参考博客:
- Python机器学习笔记:One Class SVM
8,PCA
关于PCA降维算法文件夹中的代码,详情请参考博客:
- Python机器学习笔记:主成分分析(PCA)算法
- Python机器学习笔记:使用scikit-learn工具进行PCA降维
9,LDA
关于LDA降维文件夹中的代码,详情请参考博客:
- Python机器学习笔记:线性判别分析(LDA)算法
10,EM(GMM)
关于EM算法文件夹中的代码,详情请参考博客:
- python机器学习笔记:EM算法
11,SVM
关于SVM算法文件夹中的代码,详情请参考博客:
- Python机器学习笔记:SVM(1)——SVM概述
- Python机器学习笔记:SVM(2)——SVM核函数
- Python机器学习笔记:SVM(3)——证明SVM
- Python机器学习笔记:SVM(4)——sklearn实现
12,XGBoost
关于XGBoost算法文件夹中的代码,详情请参考博客:
- Python机器学习笔记:XgBoost算法
13,IsolationForest
关于IsolationForest算法文件夹中的代码,详情请参考博客:
- Python机器学习笔记:异常点检测算法——Isolation Forest
14,RamdomForest
关于RamdomForest算法文件夹中的代码,详情请参考博客:
- Python机器学习笔记:随机森林算法
15,Local Outlier Factor(LOF)
关于 Local Outlier Factor(LOF) 算法文件夹中的代码,详情请参考博客:
- Python机器学习笔记:异常点检测算法——LOF(Local Outiler Factor)
16,SVD
关于 SVD 算法文件夹中的代码,详情请参考博客:
- Python机器学习笔记:奇异值分解(SVD)算法