异常检测

什么是异常检测?

异常检测是识别与预期行为不同的事件或模式的过程。异常检测范围广泛,从简单的离群值检测,到复杂的机器学习算法,这些算法经过训练可以发现数百个信号中隐藏的模式。

工程师和数据科学家使用异常检测来进行以下识别:

  • 机械故障,用于预测性维护
  • 制造生产线的缺陷
  • 放射学影像中的恶性肿瘤
  • 金融交易中的欺诈
  • 零售业的客户流失
  • 视频监控录像中的异常动作

在 MATLAB® 中,有很多方法均可用来设计异常检测算法。哪种异常检测方法最适用于给定应用,将取决于可用异常数据量,以及您是否可将异常数据与正常数据区分开来。

异常指与预期行为的偏差,而仅通过检查可能很难识别异常事件或模式。异常检测算法可以帮助找到这些偏差。通过硬件演示了解如何操作。

异常检测的第一步是检查现有的数据。不妨考虑以下问题:

您能在原始数据中发现异常吗?

有时候,您只需查看数据即可执行异常检测。例如,下面图 1 中的信号是从风扇收集的,您可以很容易地看到表示风扇行为异常的信号突变。如果您能够通过肉眼检测异常,则也许可以使用简单的算法(例如 findchangeptscontrolchart)进行异常检测。

MATLAB 冷却风扇数据图,异常情况一目了然。

图 1:MATLAB 冷却风扇数据图,异常情况一目了然。

您能在衍生特征中发现异常吗?

通常很难从原始数据中直观地检测异常。在下面的信号中,很难确定哪个时域信号有异常。然而,如果创建功率谱以在频域中查看数据,则峰值的频率和幅度差异可以清楚地表明两个信号截然不同。在这种情况下,您可以将这些峰值用作基于有监督学习方法的异常检测算法的特征输入。

尽管原始时序信号(左图)中的异常看上去不明显,但在频域中查看数据(右图,使用 MATLAB 中的周期图)时,可以看到峰值频率的明显差异。

图 2:尽管原始时序信号(左图)中的异常看上去不明显,但在频域中查看数据(右图,使用 MATLAB 中的周期图)时,可以看到峰值频率的明显差异。

您能用统计学方法区分正常特征和异常特征吗?

在单个信号中,异常不一定那么明显。当今的复杂机器可能有数百个传感器。有时,只有同时考虑多个传感器时,异常才会变得明显。标注了数据后,您可以检查时域和频域特征的统计分布,如图 3 所示。您还可以执行特征变换和排名,以识别最能区分两个组的特征。然后,您可以使用这些特征,通过有监督学习方法基于标注的数据训练异常检测算法。

左侧的 MATLAB 图分别用蓝色和红色表示成对的正常数据和异常数据。右侧是来自诊断特征设计器的相应特征直方图,用于识别哪些特征可明确区分正常数据和异常数据,以供有监督异常检测算法使用。

图 3:左侧的 MATLAB 图分别用蓝色和红色表示成对的正常数据和异常数据。右侧是来自诊断特征设计器的相应特征直方图,用于识别哪些特征可明确区分正常数据和异常数据,以供有监督异常检测算法使用。

如果您不知道异常的具体表现该怎么办?

机械故障代价高昂,因此,操作人员通常希望通过保守的维护计划来防患未然。这可能意味着异常很少见,使得设计异常检测算法变得很棘手。

有几种设计异常检测算法的方法只需很少的异常数据,或者根本不需要异常数据。这些“仅正常”方法只基于正常数据训练算法,并将正常数据之外的数据识别为异常数据。

使用 MATLAB,您可以对数据应用以下“仅正常”异常检测方法:

  • 阈值化。阈值化在数据超过统计指标的阈值时识别异常。例如,时序数据中最近时段内的标准差,对信号使用控制图,使用变化点检测查找信号中的突变,或获得数据分布的稳健估计值,并将分布边缘的样本识别为异常。基于统计指标的阈值化是个不错的方法,但与机器学习方法相比,这种方法应用于多元数据比较困难,而且在异常检测方面也不够稳健。对于离群值具有稳健性的统计估计法将生成更好的结果,例如稳健协方差

  • 单类支持向量机。单类支持向量机用于识别最大化类间距离的分离超平面。仅训练一个类会生成可视为正常的数据的模型。该模型使您无需任何可用于训练的标注异常即可检测异常。这种方法和其他基于距离的方法需要数值特征作为输入,而且不适用于高维数据。

  • 孤立森林。 孤立森林可用于构建将每个观测值隔离到一个叶节点中的树。异常分数作为样本的平均深度进行计算:异常样本需要的决策数比正常样本的要少。这种方法支持数值特征和分类特征组合,并且适用于高维数据。

  • 自编码器。自编码器是基于正常数据训练且尝试重构原始输入的神经网络。经过训练的自编码器将会准确地重构正常输入。如果输入与其重构之间差异巨大,则可能表明存在异常。自编码器可用于信号和图像数据。

自编码器经过训练,可以复制输入。利用输入与其重构之间的差异,可以对信号或图像数据进行异常检测。

图 4:自编码器经过训练,可以复制输入。利用输入与其重构之间的差异,可以对信号或图像数据进行异常检测。

当您的数据中存在异常但无法进行标注时,您还可以尝试使用无监督聚类方法进行异常检测。有时,您可以将聚类与正常数据和异常数据相关联,但除非数据集是均衡的(包含许多同类型的异常),否则使用“仅正常”方法更有可能获得有用的结果。

在应用异常检测算法之前,通常需要从原始数据中提取特征。MATLAB 同时支持以手动和自动方法从信号、图像和文本数据中提取特征。Predictive Maintenance Toolbox™ 中的诊断特征设计器可以帮助您从多种类型的信号中提取特征。

关键点

  • 异常检测有助于识别离群值、与正常值的偏差和意外行为
  • 如果您有足够的标注数据(包括异常),则可使用有监督学习方法进行异常检测
  • 如果您的数据大部分都是正常数据,则应用某种专门的“仅正常”异常检测方法即可

使用 MATLAB 检测图像中的对象缺陷

要构建基于图像的异常检测算法,您可以执行以下操作:1) 将图像馈送入预训练的 AlexNet 卷积神经网络;2) 使用第一层后的网络激活值作为特征,然后 3) 使用 fitcsvm 训练单类支持向量机。单类支持向量机基于正常图像训练。负的分类分数表示异常。在下面的示例中,经过训练的模型正确地识别出四个有表面缺陷的六角螺母。不妨在此示例中试一试。

使用 MATLAB 检测图像中的对象缺陷

另请参阅: Statistics and Machine Learning Toolbox, Predictive Maintenance Toolbox, Deep Learning Toolbox, 自编码器, 特征选择, 特征工程, 机器学习模型, 机器学习概述, 支持向量机 (SVM), 预测性维护, 健康监测, 计算机视觉