基于支持向量机、孤立森林和LSTM自编码器的机械状态异常检测(MATLAB R2021B)

异常检测通常是根据已有的观测数据建立正常行为模型,从而将不同机制下产生的远离正常行为的数据划分为异常类,进而实现对异常状态的检测。常用的异常检测方法主要有:统计方法、信息度量方法、谱映射方法、聚类方法、近邻方法和分类方法等。

早期的异常检测方法主要是基于统计理论,通过对观测数据进行统计建模或密度估计来评价异常,如果数据的分布假设成立,统计方法能够得到一个满意的可证明的解,且为无监督过程,但该方法对数据的统计假设较为依赖,特别是对于高维复杂数据,统计分布往往不能准确假设。而信息度量方法虽不需对数据分布进行假设,但其检测性能取决于信息度量指标,若信息度量不能明显反映异常数据与正常数据的差异,则该方法将失效。基于主成分分析或矩阵分解的空间映射方法,通过将正常和异常数据嵌入到一个低维子空间进行划分,并可自动执行维度约简,适合于高维复杂数据,但在空间映射过程中易丢失部分有用的数据信息。

随着人工智能理论的产生和发展,许多机器学习和数据挖掘的方法被应用于异常检测,主要有基于聚类或近邻的无监督学习方法和基于分类的有监督学习方法。对于聚类方法,不同的计算正常类数据间距离或相似度的策略对聚类结果有很大影响,如果形成的聚类簇太大,易将异常数据包含进去而导致误判。对于近邻方法,通过计算正常类数据的k近邻或局部异常因子来进行异常检测,体现了数据的局部分布特性,检测性能得到了提高,但近邻方法需要存储所有的正常数据,来计算与测试数据间的距离,复杂度较高,而且如果正常数据的分布比较稀疏(即没有足够的近邻点),易导致较大的检测误差。对于分类方法,通过使用可获得的标记数据作为训练样本来构造分类模型,对测试数据进行分类,能够实现一类或多类分类异常检测。

鉴于此,采用支持向量机、孤立森林和LSTM自编码器方法对机械状态进行异常检测,运行环境为MATLAB R2021B。 数据集包含来自工业机器的三轴振动测量值, 在计划维护之前和维护之后采集数据。假定在定期维护后采集的数据代表机器的正常运行状况,维护前的数据代表正常或异常情况。每轴的数据存储在单独的列中,每个文件包含 7000 个测量值。

复制代码
function[net]=AE(X,Xtest,Labels,options)
% S-AEEL:Stacked AutoEncoder with Embedded Labels 
% it allows labels embedding inside the hidden layer
% Inputs
% number_neurons:number of neurons in hidden layer.
% X: the training inputs.
% Xtest: the testing inputs
% prefomance: RMSE of training.
% options :training options (3 options -->)
% 
% get options
number_neurons=options.number_neurons; % number of neurons
Layers=options.Layers;% number of layers
ActivF=options.ActivF;% activation function
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
X = scaledata(X,0,1);% data Normalization
x=X;% save a copy from original input;
alpha=size(X);% get information for weights generations
% 1:generate a random input weights
input_weights{1}=rand(number_neurons,alpha(2))*2-1;

for i=1:Layers
% 2:calculating the hidden layer
tempH=input_weights{i}*X';
CAT=repmat(Labels',size(tempH,1),1);
tempH=[tempH+CAT];
tempH=[tempH;Labels'];
% activation function
switch lower(ActivF)
    case {'sig','sigmoid'}
        %%%%%%%% Sigmoid 
        H = 1 ./ (1 + exp(-tempH));
    case {'sin','sine'}
        %%%%%%%% Sine
        H = sin(tempH);    
    case {'hardlim'}
        %%%%%%%% Hard Limit
        H = double(hardlim(tempH));
    case {'tribas'}
        %%%%%%%% Triangular basis function
        H = tribas(tempH);
    case {'radbas'}
        %%%%%%%% Radial basis function
        H = radbas(tempH);
        %%%%%%%% More activation functions can be added here                
end
% 3: calculate the output weights beta
B{i}=pinv(H') * X ; %Moore-Penrose pseudoinverse of matrix
% calculate the output : Unlike other networks the AEs uses the same weight
% beta as an input weigth for coding and output weights for decoding
% we will no longer use the old input weights:input_weights. 
Hnew=X*B{i}';
output=Hnew*pinv(B{i}');
input_weights{i+1}=B{i};
end
% 4:calculate the prefomance
labels_hat=scaledata(Hnew(:,end-(size(Labels,2))+1:end),min(Labels),max(Labels));% recovered labels
prefomance=sqrt(mse(x-output));% RMSE of training samples recontruction
rec_acc=sqrt(mse(labels_hat-Labels));% % RMSE of training labels recovering
%% mappings for test set
H_test=Xtest*B{i}';
%% save results
net.xtr_mapp=Hnew; % feature mappings of training inputs
net.xts_mapp=H_test; % feature mappings of testing inputs
net.recovered_labels=labels_hat;% 
net.learning_loss=prefomance;
net.Learning_weights=B;
net.xtr_hat=output;
net.rec_acc=rec_acc;
end

工学博士,担任《Mechanical System and Signal Processing》《中国电机工程学报》《控制与决策》等期刊审稿专家,擅长领域:现代信号处理,机器学习,深度学习,数字孪生,时间序列分析,设备缺陷检测、设备异常检测、设备智能故障诊断与健康管理PHM等。

完整数据和代码通过知乎学术咨询获得:
https://www.zhihu.com/consult/people/792359672131756032?isMe=1
相关推荐
大佬,救命!!!19 小时前
C++本地配置OpenCV
开发语言·c++·opencv·学习笔记·环境配置
Kyln.Wu19 小时前
【python实用小脚本-315】跨界应用 | 烹饪爱好者如何用Python改造传统选菜流程?自然语言处理×美食推荐的化学反应,轻松实现AI菜谱生成
人工智能·python·自然语言处理
LDG_AGI19 小时前
【推荐系统】深度学习训练框架(十五):特征工程——PySpark DataFrame数据处理核心指南
人工智能·深度学习
TOWE technology19 小时前
PDU、工业连接器与数据中心机柜电力系统
大数据·人工智能·数据中心·idc·pdu·智能pdu·定制电源管理
小魔女千千鱼19 小时前
openEuler 常用开发工具性能实测:Python、Node.js、Git 运行效率对比
人工智能
用户3778330434919 小时前
( 教学 )Agent 构建 Prompt(提示词)4. JsonOutputParser
人工智能·后端
YuSun_WK19 小时前
检索增强VS知识蒸馏VS伪标签扩展
人工智能·python
一 乐19 小时前
宠物店管理|基于Java+vue的宠物猫店管理管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
机器学习之心19 小时前
MATLAB改进遗传算法的曲面机械零件切削参数优化
matlab·切削参数优化
天天摸鱼的小学生19 小时前
【Java泛型一遍过】
java·开发语言·windows