基于WOA和深度学习的化工过程故障诊断模型
数据集
TE化工故障数据集
抽了3个故障进行分析
WOA作为特征选择器
%---Output-----------------------------------------------------------
% sFeat : 特征选择 (instances x features)
% Sf : 特征索引
% Nf : 特征数量
% curve : 适应度曲线
%--------------------------------------------------------------------
clc, clear, close;
% 数据集处理
load data\d01.dat;
load data\d02.dat;
load data\d03.dat;
feat=[d01;d02;d03];
y1=ones(length(d01),1);
y2=2*ones(length(d02),1);
y3=3*ones(length(d03),1);
label=[y1;y2;y3];
% 20% 用于验证集
ho = 0.2;
%
HO = cvpartition(label,'HoldOut',ho);
% 设置参数
N = 3;
max_Iter = 100;
% WOA
[sFeat,Sf,Nf,curve] = jWOA(feat,label,N,max_Iter,HO);
% 绘制曲线
plot(1:max_Iter,curve);
xlabel('迭代次数');
ylabel('适应度');
title('WOA 曲线'); grid on;
% 划分训练集测试集
[XTrain,YTrain, XTest,YTest] = split_train_test(sFeat, label, 3, 0.8);
% 定义 LSTM 网络架构。
% 将输入大小指定为序列大小 28(输入数据的维度)。
% 指定具有 100 个隐含单元的双向 LSTM 层,并输出序列的最后一个元素
% 最后,通过包含大小为 3 的全连接层,后跟 softmax 层和分类层,来指定3个类。
[m,n]=size(sFeat);
inputSize = 1;
numHiddenUnits = 100;
numClasses = 3;
layers = [ ...
sequenceInputLayer(inputSize)
lstmLayer(numHiddenUnits,'OutputMode','last')
fullyConnectedLayer(numClasses)
softmaxLayer
classificationLayer]
% 现在,指定训练选项。指定求解器为 'adam',梯度阈值为 1,最大轮数为 100。
% 选择 64 作为小批量大小。
% 将序列长度指定为 'longest'。要确保数据保持按序列长度排序的状态,请指定从不打乱数据。
maxEpochs = 100;
miniBatchSize = 1000;
options = trainingOptions('adam', ...
'ExecutionEnvironment','cpu', ...
'GradientThreshold',1, ...
'InitialLearnRate',0.001, ...
'MaxEpochs',maxEpochs, ...
'MiniBatchSize',miniBatchSize, ...
'Verbose',1, ...
'Plots','training-progress');
for i=1:length(XTrain)
X_Train{:,i}=XTrain(i,:);
end
% 训练 LSTM 网络
% 使用 trainNetwork 以指定的训练选项训练 LSTM 网络。
net = trainNetwork(X_Train,categorical(YTrain),layers,options);
% 测试
for i=1:length(XTest)
X_Test{:,i}=XTest(i,:);
end
YPred = classify(net,X_Test);
% 计算预测值的分类准确度。
acc = sum(YPred == categorical(YTest))./numel(YTest)
figure
confusionchart(YPred,categorical(YTest))
title('混淆矩阵')
下载链接: https://download.csdn.net/download/qq_45047246/85017030