识别意外事件和非正常行为
异常检测是识别与预期行为不同的事件或模式的过程。异常检测可以从简单的离群值检测到复杂的机器学习算法,这些算法被训练来揭示数百个信号中的隐藏模式。
工程师和数据科学家使用异常检测来识别:
- 机械故障预测维修
- 制造生产线的缺陷
- 放射学图像中的癌症
- 金融交易欺诈
- 零售业客户流失
- 监控录像中的异常动作
在MATLAB中设计异常检测算法的方法有很多®.最适合给定应用程序的异常检测方法取决于可用的异常数据量,以及是否可以将异常数据与正常数据区分开来。
异常检测的第一步是检查您拥有的数据。考虑以下问题:
你能在原始数据中发现异常吗?
有时只需查看数据就可以执行异常检测。例如,下面图1中的信号是从风扇中收集的,您可以很容易地看到表明风扇行为异常的突然信号变化。如果你能够用眼睛发现异常,你可以使用一个简单的算法,如findchangepts或controlchart用于异常检测。
你能看到衍生特征中的异常吗?
异常通常很难从原始数据中直观地检测出来。在下面的信号中,很难确定哪些时域信号是异常的。然而,如果您创建一个功率谱来查看频域的数据,峰值的频率和幅度的差异清楚地表明两个信号有很大的不同。在这种情况下,您可以使用这些峰值作为异常检测算法的特征输入监督式学习方法。
你能从统计学上区分正常和异常特征吗?
在单个信号中,异常并不总是明显的。今天的复杂机器可以有数百个传感器,有时只有在同时考虑多个传感器时,异常才会变得明显。有了标记数据后,可以检查时间域和频域特征的统计分布,如图3所示。你也可以表演功能转换并进行排序,以确定最能区分两组的特征。然后,您可以使用这些特征使用监督学习在标记数据上训练异常检测算法。
如果你不知道异常点是什么样子呢?
机器停机时间是昂贵的,因此运营商通常通过保守的维护计划来防止出现问题。这可能意味着异常很少,这使得设计异常检测算法变得棘手。
几种设计异常检测算法的方法几乎不需要异常数据。这些“仅正常”方法仅在正常数据上训练算法,并将这些规范之外的数据识别为异常数据。
使用MATLAB,您可以对数据应用以下正常异常检测方法:
阈值。阈值当数据超过统计指标上的阈值时标识异常。例如,时间序列数据中最近窗口的标准偏差,在信号上使用控制图,使用变化点检测发现信号中的突变,或获得数据分布的稳健估计,并将分布边缘的样本识别为异常。统计指标上的阈值可以是一个很好的开始,但这种方法更难以应用于多元数据,而且比机器学习异常检测方法的鲁棒性更差。对异常值具有健壮性的统计估计将产生更好的结果,例如健壮的协方差.
一类支持向量机。看到下面成了一支持向量机识别分离的超平面,使类之间的距离最大化。只训练一个类就会产生一个可以被认为是正常的数据模型,这允许您在没有任何标记的异常可用于训练的情况下检测异常。这种方法和其他基于距离的方法需要数字特征作为输入,在高维数据上不能很好地工作。
与世隔绝的森林。与世隔绝的森林构建树,将每个观察结果隔离到一个叶子中,异常值计算为样本的平均深度:异常样本比正常样本做出的决策更少。此方法支持数字和分类特征的混合,并适用于高维数据。
Autoencoders。Autoencoders是在正常数据上训练的神经网络,试图重建原始输入。经过训练的自动编码器将准确地重建正常输入。输入数据和重建数据之间的巨大差异可能表明存在异常。自动编码器可用于信号和图像数据。
要点
- 异常检测可以帮助您识别异常值、正常的偏差和意外的行为
- 如果你有足够的标记数据(包括异常),使用监督学习进行异常检测
- 如果您拥有的大多是正常数据,则应用一种专门的仅用于正常的异常检测方法
例子和如何
软件参考
参见:统计和机器学习工具箱™,预测性维护工具箱™,图像处理工具箱™,深度学习工具箱™,autoencoders,特征选择,工程特性,机器学习模型,什么是机器学习?,支持向量机(SVM),预见性维护,状态监测,计算机视觉