网片价格,宁波seo网站排名优化,北京微信公众号定制开发,wordpress设计模板异常检测任务#xff0c;指的是检测偏离期望行为的事件或模式#xff0c;可以是简单地检测数值型数据中#xff0c;是否存在远超出正常取值范围的离群值#xff0c;也可以是借助相对复杂的机器学习算法识别数据中隐藏的异常模式。
在不同行业中#xff0c;异常检测的典型…异常检测任务指的是检测偏离期望行为的事件或模式可以是简单地检测数值型数据中是否存在远超出正常取值范围的离群值也可以是借助相对复杂的机器学习算法识别数据中隐藏的异常模式。
在不同行业中异常检测的典型应用场景包括
根据设备传感器采集的信号识别零部件故障类型
自动检测生产线中产品加工异常降低不良率或辅助质检人员提高工作效率
监控金融交易中是否存在诈骗行为
根据医学影像数据识别癌组织及其边界 针对异常数据的不同以及是否可以人为判断异常行为或故障模式实现方式各有千秋。本文分为上下两篇在第一部分将梳理异常检测问题的一般处理思路第二部分则结合示例重点讨论基于统计和机器学习的无监督异常检测方法。
什么是异常值
异常值包括离群值和奇异值以下是相关定义
离群值outlier偏离正常范围的数据可能是由传感器故障、人为录入错误或异常事件导致在构建机器学习或统计模型前如果不对离群值做任何处理可能会导致模型出现偏差。
奇异值novelty数据集未受到异常值污染但是存在某些区别于原数据分布的观测数据。
首先了解你的数据
在一头扎进算法或模型开发之前首先需要做的是仔细查看手中的数据并考虑以下问题
01
原始数据中的异常是否是显而易见的
机电设备的停机、堵转等异常现象从信号波形就可以直接判断异常原因和发生时间这类问题比较简单常用突变点检测函数 findchangepts 或过程控制 SPC (Statistical Process Control) 中 control chart 进行处理。例如图 1(a) 中超出上下置信区间的数据点即为异常点具体可查看示例Find abrupt changes in signal[1] Control Charts[2] 统计过程控制[3]
02
从原始数据中是否可以提取出能够有效区分异常的特征
旋转机械设备的正常和异常数据从时域信号的波形看上去往往相差无几但是经过频域变换后不同频率分量的幅值可能有较大的不同这种情况下可根据频域特征直接检测出异常如图 1(b) 中标记的异常部分。
03
从统计分析的角度是否可以分区异常和正常数据
Predictive Maintenance Toolbox™ 内置的Diagnostic Feature Designer App可以帮助我们提取时域和频域特征并分析其统计分布例如在工业设备应用中利用三轴加速度传感器分别采集设备维护前蓝色和维护后红色的振动信号如图 1(c) 所示对这两类信号每类多个样本提取标准差、斜度等常用统计特征再分析两类信号的特征直方图见图 1(d)不难看出二者的各个特征的统计分布均存在一定差异。此外在 Diagnostic Feature Designer App 中还可以使用一系列特征排序的方法例如在有标签或无标签的条件下分别选用 One-Way ANOVA 和 Laplace Score 分析哪些特征可以更好地辅助判断并利用这些特征作训练基于机器学习的异常检测模型。 04
如果无法确定数据中是否存在特定的异常模式应该如何处理
在全天候运行的工业设备中故障停机意味着产能的降低因此设备运营阶段往往采取预防性维护的策略这意味着异常数据稀缺并且采集到数据全部或大多是正常数据异常数据的占比往往较低获取难度大风险高或是无法描述异常模式这也是为什么异常检测任务多被处理为无监督学习问题仅仅通过正样本正常数据训练算法实现任务或根据数据的隐藏特性筛选出其中的异常样本。
关于如何选择异常检测方法可参考该链接了解更多相关函数和适用条件Decision Models for Fault Detection and Diagnosis [4]
简单的一维数据异常检测问题
针对一维数据的异常值检测处理方法有以下几种
是否超出历史数据的最大值/最小值
3σ 原则如果数据符合正态分布可将 ±3σ 作为极限误差将落在 μ±3σ 以外样本作为离群值
可以通过箱线图分析/四分位数检验、Grubbs 等方法进行检测。
例如针对一组随机生成数使用 boxchart 函数绘制箱线图可以简单有效地可视化离群值默认情况下boxchart 使用 o 符号显示每个离群值。
% 创建一个一维的随机数向量data randn(1,1000);boxchart(data,DisplayName,random data)legend% 选取其中一个离群值ax gca;chart ax.Children(1);datatip(chart,1,3.425); 或者使用实时任务“清除离群值”选择合适的检测方法和清理方法并对数据分布和离群值进行可视化和处理 对于多变量特征数据集特征之间可能存在复杂和高度非线性的相关性上述离群值剔除的方法将不再适用。
高维数据的异常检测
接下来通过一个基于工业设备振动信号的预测性维护示例介绍如何着手处理高维数据的异常检测问题在该例中原始数据为使用加速度传感器采集的 x/y/z 三个通道的振动信号。在重要工业设备的实际运营过程中使用者往往采取定期预防性维护的策略以避免意外停机造成的风险和经济损失而设备运行一段时间可能存在一定的零部件磨损和老化问题这也是导致异常的部分潜在原因因此样本标签分为两类“维护前”before和“维护后”after。
振动信号是典型的时间序列数据在进行处理时常用的方法之一是按设定的时间窗口对信号进行时域的统计特征提取或频域特征提取从而转换成以下结构化数据形式 load(FeatureEntire.mat)head(featureAll) 关于如何进行特征提取可在命令行窗口运行以下指令打开对应参考文档查看 openExample(predmaint_deeplearning/AnomalyDetectionUsing3axisVibrationDataExample)
将数据集划分为训练集和测试集
rng(0) idx cvpartition(featureAll.label, holdout, 0.1);featureTrain featureAll(idx.training, :);featureTest featureAll(idx.test, :);
将测试集部分的标签进行替换将“维护前”before定义为“异常”Anomaly“维护后”after定义为“正常”Normal
trueAnomaliesTest featureTest.label;trueAnomaliesTest renamecats(trueAnomaliesTest,[After,Before], [Normal,Anomaly]);featureTestNoLabels featureTest(:, 2:end);
将训练集中“维护后”after的数据样本筛选出来作为后续异常检测模型的训练样本
featureNormal featureTrain(featureTrain.labelAfter, :);feat featureNormal{:,2:end};[NumSamples,Dim] size(feat)
NumSamples10282
Dim12
这个数据集一共有 12 个维度的特征和 10282 条样本。
常用的高维数据可视化方法
为了方便理解数据可采用以下方法在低维空间内对高维数据进行可视化
1. 通过 plotmatrix 函数随机抽取 3 个特征将任意两个特征作为横纵坐标
plotmatrix(feat(:,randi(size(feat,2),1,3)))title(原始特征)
2. 使用 fsulaplacian 函数利用 Laplacian Score 算法选取最重要 2 个特征第 9 和第 10 个特征后绘制其二维平面散点图观察数据中是否存在某些特定的聚集现象。
idx fsulaplacian(feat);idx(1),idx(2)
ans9
ans10
scatter(feat(:,idx(1)),feat(:,idx(2)),4,filled)title(基于Laplacian Score选择后的特征)
3. 仅选取其中最重要的特征可通过 tSNEt-Distributed Stochastic Neighbor Embedding对数据进行降维
rng(default)Xtsne(feat,Standardizetrue,Perplexity100,Exaggeration20);scatter(X(:,1),X(:,2),4,filled)title(使用tSNE降维 - 二维)
X3tsne(feat,Standardizetrue,Perplexity100,Exaggeration20,NumDimensions3);scatter3(X3(:,1),X3(:,2),X3(:,3),4,filled)title(使用tSNE降维 - 三维) 基于 tSNE 进行数据降维的过程中将融合多个特征得到新的基向量再将原始数据投射到对应基向量的低维空间进行可视化在第二部分中我们将利用这个方法查看训练样本中的异常情况。
有监督异常检测 Statistics and Machine Learning Toolbox™ 提供了基于模型的异常检测算法如果已将训练数据标注为正常和异常可以训练二类分类模型并使用 resubPredict 和 predict 对象函数分别检测训练数据和新数据中的异常。当对设备的全生命周期中的不同状态例如健康、老化、异常和寿命终末期有足够了解和相关数据标签时可考虑数据拟合回归模型或构建聚类模型以区分不同状态数据。针对上述机器学习模型以下对象函数常用于检测数据中的异常
相似度矩阵 — 使用 outlierMeasure[6] 函数计算随机森林 (CompactTreeBagger) 中样本和其他观测点之间相似度平方值的平均值
马氏距离 — 使用mahal[7] 函数适用于判别分析分类模型 (ClassificationDiscriminant) 和高斯混合模型 (gmdistribution)
无条件概率密度 — 使用 logp[8] 适用于判别分析分类模型 (ClassificationDiscriminant) 和朴素贝叶斯分类模型 (ClassificationNaiveBayes)包括对应的增量学习模型 (incrementalClassificationNaiveBayes)
此外利用 Deep Learning Toolbox 构建深度神经网络进行异常检测也是目前该领域的研究热点之一。
在光学检测领域如图 2(a) 所示需要检测图像数据中异常可构建基于卷积神经网络的图像分类模型并结合深度学习模型解析的方法例如类激活映射对异常区域进行可视化具体示例可参考Detect Image Anomalies Using Explainable One-Class Classification Neural Network。[9]
在设备预测性维护应用中针对传感器信号中的异常检测多用生成式模型学习正常数据的特征并尝试重建数据再利用重建误差作为判定是否异常的指标如图 2(b) 所示例如自编码器AutoEncoder(Time Series Anomaly Detection Using Deep Learning )[10] 和 Graph Deviation Network (Multivariate Time Series Anomaly Detection Using Graph Neural Network) [11] 进行多元时序异常检测。 由于篇幅有限在此先不详细展开介绍上述方法如感兴趣可参考对应文档链接。在下一篇中我们将讨论在没有标签的条件下或不确定异常类型和成因的场景中如何针对上述数据集利用统计和机器学习方法进行无监督异常检测欢迎继续关注后续内容。