本指南面向设计和部署算法来检测时间序列数据中的异常的工程师。
从振动信号检测到工业机械异常。来自某时间窗的三轴振动数据得到处理,并通过机器学习模型检测到异常。模型决策边界显示在主成分平面上,其中红点表示异常。
异常检测用例示例
异常检测算法在各行各业和应用中都很有用:
预测性维护:部署在工业设备中的异常检测算法可以识别机器故障的早期迹象,提高安全性并避免高成本的停机时间。
数字健康:检测心电图 (ECG) 信号中的异常可以揭示各种心脏状况,如心律失常、心房颤动和室性心动过速。
飞行测试数据分析:工程师依赖飞行测试来了解系统行为并为设计选项提供信息。异常检测可以标记不稳定的传感器值并识别超出预期性能范围的测试条件。
容错控制:在电机中嵌入的异常检测算法可以实时标记变化情况。这使得控制人员能够调整响应以防止损坏并提高性能。
时间序列数据中异常的类型
尽管异常可能出现在各种类型的数据中,例如图像、视频和文本,但本指南侧重于时间序列数据。这类数据在工程应用中很普遍。时间序列数据记录随时间推移的顺序测量值,例如温度、压力和振动。时间序列数据中的异常有三种主要类型。
点异常,即离群值,是偏离预期值的单个数据点。
集体异常指一组数据点一起偏离预期模式。
多元异常在同时分析多个数据源时发生,它们在单个数据源中可能是异常,也可能不是异常。
选择异常检测算法
MATLAB 提供各种时间序列异常检测算法,分为两个主要类别:统计和基于距离的方法以及一类 AI 模型。这些都是设计异常检测算法时所有可能使用的工具,但选择具体哪种工具取决于您的数据和目标。
统计和基于距离的方法
统计方法依赖于对基础数据分布的假设。它们应用阈值、趋势或概率模型来识别偏离预期统计行为的点。一种简单的统计异常检测方法可能是计算信号的移动均值,并在均值超过某个阈值时标记异常。
基于距离的方法不假设存在特定数据分布;相反,它们通过计算单个观测值或子序列之间的距离来标记异常,识别那些远离典型模式的观测值或子序列。例如,matrixProfile 比较时间序列中的每个子序列,并将那些距离其他子序列最远的子序列识别为异常。
使用 distanceProfile 识别时间序列数据中的异常。
何时使用统计和基于距离的方法:
- 您的训练数据有限
- 您完全了解数据中的基线统计数据和趋势
- 您的计算资源有限
特征:
+ 简单且可解释
+ 计算成本低
+ 适用于点异常和集体异常
- 可能难以处理复杂模式或非线性动态特性
- 对噪声和数据维度敏感
MATLAB 中的示例方法:
isoutlier- 查找数据中的离群值findchangepts- 查找信号中的突变robustcov- 计算稳健的多元协方差和均值估计值mahal- 计算到参考样本的马氏距离distanceProfile- 计算查询子序列与时间序列的所有其他子序列之间的距离剖面matrixProfile- 计算多元时间序列中所有子序列对之间的矩阵剖面
电机数据的矩阵剖面,突出显示最相似模体对和异常段
一类 AI 模型
此类别中的异常检测方法基于一组大体正常的基线数据训练机器学习或深度学习模型。模型学习正常行为并将偏差识别为异常。当异常很罕见或缺乏明确定义的模式时,一类 AI 模型最适用。它们可以应用于多通道数据,以检测所有类型的异常。
何时使用一类 AI 模型:
- 您要训练模型,以在新数据到达时识别其中的异常
- 您有大量正常数据用于训练
- 异常很罕见、未知或缺乏明确定义的模式
特征:
+ 适用于所有类型的异常,包括复杂模式和非线性模式
+ 对噪声和数据维度稳健
+ 深度学习方法不需要特征工程
- 训练时间更长、计算需求更高
- 与统计和基于距离的方法相比,通常可解释性更差
MATLAB 中的示例方法:
浏览示例
训练深度学习模型以检测异常
此示例使用深度学习模型检测心电图 (ECG) 数据中的异常心跳序列。
ECG 数据,检测到的异常以红色显示。
为异常检测准备数据
高质量数据对于构建准确的异常检测算法至关重要。但是,为异常检测收集、探索和预处理数据具有挑战性 - 它也不是一个放之四海而皆准的方法。您应用的方法取决于数据特征、硬件要求以及您尝试解决的问题。即使有大量数据,检测异常也很困难,因为数据来自成百上千个含噪传感器。在这些情况下,提取特征和降低数据维度至关重要。
用于异常检测的数据集
与许多传统机器学习任务相比,异常检测的训练数据要求相当灵活,例如您无需标注数据。异常检测算法仅使用正常数据进行训练,或者使用混入了一些异常的、绝大多数为正常的数据进行训练。使用这种类型的数据,您需要训练异常检测模型来识别什么是正常的,任何不正常的内容都分类为异常。
如果您有平衡的标注数据集,其中包含两个或更多类,请应用一种称为有监督学习的方法进行多类故障检测。
适合异常检测的数据。
了解有关这些方法的更多信息:
探查和预处理数据
在设计算法之前,您需要理解数据所传达的信息。探查和可视化您的数据有助于识别有用的数据源、辨别数据模式、揭示数据质量并确定必需的预处理步骤。您可以使用信号分析器以交互方式探查和预处理时间序列数据。
从传感器采集的数据通常含噪、混乱且无组织。MATLAB 提供的许多方法和交互式 App 可用于预处理步骤,如重采样、平滑、组织、填充缺失数据等。
了解有关使用 MATLAB 进行数据预处理的更多信息:
从原始数据中提取特征
虽然一些 AI 模型可以直接对时间序列数据执行操作,但从数据中提取特征可以通过突出显示区分正常和异常数据的关键量来改善模型性能。特征提取涉及将原始数据变换为有意义的数值特征,您可以用这些特征来训练模型。
例如,您可以计算特征,如均值、标准差、峰值振幅或主频。这些特征总结时间序列数据中的重要行为,使模型更容易学习何为正常数据。
熟悉其数据的工程师通常已经知道哪些特征最有用。但是,您也可以使用自动特征提取过程,该过程提取常见特征(描述性统计量、频谱测量值等),然后对它们进行排序。Predictive Maintenance Toolbox 中的诊断特征设计器可以帮助您以交互方式提取、比较特征以及进行特征排名,然后使用这些特征训练 AI 模型。
降低数据维度
在收集数据和提取特征后,通常最终会得到大量特征 - 有时每个信号可获得成百上千个特征。这种高维度会使模型训练速度更慢、更难解释且更容易出现过拟合。通过仅选择或组合最具信息量的特征来降低维度有助于简化模型并将模型训练集中在指示异常的关键特征上。降维方法,如主成分分析 (PCA) 或特征排名,可以帮助识别哪些特征对异常检测贡献最大。
浏览示例
使用三轴振动数据检测工业机械中的异常
此真实示例训练三个不同的一类 AI 模型。该过程包括数据探查、特征提取、训练模型和评估其性能。
在工业设备维护前后的三轴振动数据。维护后的数据表示正常运行,而维护前的数据表示存在异常。
为真实应用开发和部署基于 AI 模型的异常检测模型的工作流。
部署到嵌入式硬件
使用 MATLAB 实现嵌入式 AI,您可以创建 Simulink 模块或生成 C/C++ 代码,将异常检测算法部署到嵌入式设备(如微控制器或 ECU)以进行实时异常检测。在将这些算法部署到嵌入式硬件之前,请务必在仿真中测试它们以确保其有效性。Simulink 提供了一个平台,可用于将异常检测算法与其他系统组件集成,实现系统级实时仿真。
将 Simulink 模块 Deep Signal Anomaly Detector 部署到 Raspberry Pi® 以进行实时噪声检测。
增量异常检测
增量异常检测方法持续处理传入数据并实时根据数据流计算异常分数。增量模型对数据进行拟合。MATLAB 提供 incrementalRobustRandomCutForest 和 incrementalOneClassSVM 模型对象以用于增量异常检测。首先,训练模型以计算异常分数。然后,基于从用于训练的数据获得的异常分数计算并调整阈值。随着新批量数据流入,模型将进一步检测异常、重新训练自身并调整阈值。
了解有关增量异常检测的更多信息。
对时间序列数据应用增量学习方法的模型拟合、阈值学习和在线估计阶段。
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)