基于鲸鱼优化深度混合核极限学习机的故障诊断方法

目录

1-算法原理

1.1 深度核极限学习

1.2 深度混合核极限学习机

1.3 问题引出

2-应用

2.1 数据准备

2.2 数据处理

2.3 DHKELM分类

2.4 WOA-DHKELM分类

 3-还有更多


在博客(这里)里我们讲述了粒子群优化深度核极限学习机,今天我们继续对其进行改进:原始的深度核极限学习机顶层采用核极限学习机进行分类,现在我们将其改成混合核的极限学习机(线性核、RBF、多项式、小波核两两组合),因为应用了多个核函数,相比于之前的超参数更多,手工调参较为困难

1-算法原理

其主要步骤如下:

1.1 深度核极限学习

步骤1:利用极限学习机与自动编码器相结合,形成极限学习机-自动编码器(ELM-AE),结构如图1,将ELM-AE作为无监督学习的基础单元对输入数据进行贪婪逐层无监督预训练,并保存ELM-AE由最小二乘法获得的输出权值矩阵,

步骤2:然后用这些输出层权重来初始化深度核极限学习机(Deep kernel extreme leaning machine,DKELM),然后结合标签信息对DKELM的输出层权重进行学习,结构图2所示。

1.2 深度混合核极限学习机

与深度核极限学习机结构一样,区别在于顶层KELM采用多个核进行加权,称为混合核极限学习机或者多核极限学习机,简称HKELM。比如,KELM的输入是核矩阵K(Hni,Hnj),这里K可以是线性核、RBF、多项式、小波核中的任意一种,而HKELM的输入是wK1(Hni,Hnj)+(1-w)K2(Hni,Hnj),其中K1K2都是线性核、RBF、多项式、小波核中的任意一种,w是核1所占的权重,即HKELM的输入是两个核矩阵加权

这样的模型我们称之为深度混合核极限学习机,简称DHKELM

1.3 问题引出

由于网络超参数太多,主要有:DHKELM各隐含层节点数,预训练时ELM-AE的L2 正则化系数,顶层HKELM的惩罚系数、核1的权重以及K1、K2的核参数,且核函数类型不同,核参数的数量也不一样,因此通过手动选择往往无法得到最优的结果,为此采用鲸鱼算法对DHKELM的超参数进行优化,简称WOA-DHKELM。

优化原理:以最小化分类错误率为适应度函数,WOA的目的就是找到一组最优超参数,使得DHKELM的分类错误率最低。

2-应用

        为验证上述方法的有效性,本文将WOA-DHKELM算法用于凯斯西储的轴承数据故障诊断中。

2.1 数据准备

        采用凯斯西储轴承故障诊断数据,驱动端,48k采样频率,0HP负载,共10类数据,如下所示。从每类数据中各取100个样本,每个样本长度为864个采样点,共得到1000个样本,然后按照7:3划分训练集与测试集。

2.2 数据处理

        对上述采集的样本进行FFT特征提取,提取每个样本的频谱幅值作为最终的特征数据,如下图所示。然后归一化,作为DKELM与WOA-DHKELM的输入数据,标签采用onehot编码,即第一类为[1 0 0 0 0 0 0 0 0 0],第二类为[0 1 0 0 0 0 0 0 0 0]。

        

2.3 DHKELM分类

参数都是手动设置,随便设的,结果如下

%% DHKELM
close all;clear;format compact;format short;clc;rng('default')

%% 加载数据
load result/data_feature_fft

[train_x,train_ps]=mapminmax(train_X',-1,1);
test_x=mapminmax('apply',test_X',train_ps);

P_train = double(train_x)' ;
P_test  = double(test_x)' ;
T_train = double(train_Y);
T_test  = double(test_Y);
%%  参数设置
%elm-ae的参数
h=[100 ,50];%各隐含层节点数
TF='sig';%ELM-AE激活函数
lambda1=inf;%elm-ae的L2正则化系数
%顶层核极限学习的惩罚系数lambda与核参数ker1
lambda2=100;%正则化系数
w=0.5;%混合核kernel1的权重w,kernel2就是1-w
%核函数类型1.RBF_kernel 2.lin_kernel 3 poly_kernel 4 wav_kernel
kernel1='RBF_kernel';
kernel2='poly_kernel';

% 核参数设置  详情看kernel_matrix
if strcmp(kernel1,'RBF_kernel')
    ker1_para=1; %rbf有一个核参数
elseif strcmp(kernel1,'lin_kernel')
    ker1_para=[]; %线性没有核参数
elseif strcmp(kernel1,'poly_kernel')
    ker1_para=[1,1]; %多项式有2个核参数
elseif strcmp(kernel1,'wav_kernel')
    ker1_para=[1,1,1]; %小波核有3个核参数
end
% 核参数设置  详情看kernel_matrix
if strcmp(kernel2,'RBF_kernel')
    ker2_para=1; %rbf有一个核参数
elseif strcmp(kernel2,'lin_kernel')
    ker2_para=[]; %线性没有核参数
elseif strcmp(kernel2,'poly_kernel')
    ker2_para=[1,1]; %多项式有2个核参数
elseif strcmp(kernel2,'wav_kernel')
    ker2_para=[1,1,1]; %小波核有3个核参数
end
%% 
dhkelm=dhkelmtrain(P_train,T_train,h,lambda1,TF,...
    lambda2,w,ker1_para,kernel1,ker2_para,kernel2);
% T1=dhkelmpredict(dhkelm,w,ker1,kernel1,ker2,kernel2,P_train,P_train);%训练集
T2=dhkelmpredict(dhkelm,w,ker1_para,kernel1,ker2_para,kernel2,P_test,P_train);%测试集

[~,J1]=max(T2,[],2);%转换为类别号
[~,J2]=max(T_test,[],2);%转换为类别号

acc=sum(J1==J2)/length(J2)

%排一下序 更好看
[~,index]=sort(J2);

figure
plot(J2(index),'ro')
hold on;grid on
plot(J1(index),'k*')
title('DHKELM')
legend('真实标签','预测标签')
xlabel('样本编号')
ylabel('类别号')

 由于是随便设置的参数,所以结果不好。也说明做参数优化是有必要的。

2.4 WOA-DHKELM分类

采用WOA优化DHKELM(各隐含层节点数,正则化系数,顶层kelm的惩罚系数与核参数),难点在于不同的核函数组合核参数数量不一致,所以在WOA优化的时候寻优维度与寻优上下界要分段,部分设置如下。

%由于隐含层层数与核函数类型会影响寻优维度,所以下面我们分段进行寻优范围设置
xmin=[];xmax=[];
% 首先是各层节点数,范围是1-100,整数
xmin=[xmin ones(1,layers)];
xmax=[xmax 100*ones(1,layers)];
% 然后是ELM-AE的正则化系数与 hkelm的惩罚系数 与kernel1的权重系数
xmin=[xmin 1e-3 1e-3 0];
xmax=[xmax 1e3  1e3  1];
% 最后是hkelm的核参数
% 核参数设置  详情看kernel_matrix
if strcmp(kernel1,'RBF_kernel') && strcmp(kernel2,'RBF_kernel')
    xmin=[xmin 1e-3 1e-3 ];xmax=[xmax 1e3 1e3];%两个 RBF_kernel的 各一个核参数 范围都是1e-3到1e3
elseif strcmp(kernel1,'RBF_kernel') && strcmp(kernel2,'lin_kernel')
    xmin=[xmin 1e-3 ];xmax=[xmax 1e3];%线性核没有核参数
elseif strcmp(kernel1,'RBF_kernel') && strcmp(kernel2,'poly_kernel')
    xmin=[xmin 1e-3 1e-3 1 ];xmax=[xmax 1e3 1e3 10 ];%RBF_kernel一个核参数 而poly_kernel一共2个,第一个和rbf一样是1e-3到1e3。而第二个参数是幂指数,我们定义他的范围是1-10
elseif strcmp(kernel1,'RBF_kernel') && strcmp(kernel2,'wav_kernel')%
    xmin=[xmin 1e-3 1e-3 1e-3 1e-3 ];xmax=[xmax 1e3 1e3 1e3 1e3 ];%RBF_kernel一个核参数 wav_kernel有3个核参数
elseif strcmp(kernel1,'lin_kernel') && strcmp(kernel2,'lin_kernel')
    xmin=xmin;xmax=xmax;
elseif strcmp(kernel1,'lin_kernel') && strcmp(kernel2,'poly_kernel')
    xmin=[xmin 1e-3 1 ];xmax=[xmax 1e3 10];
elseif strcmp(kernel1,'lin_kernel') && strcmp(kernel2,'wav_kernel')
    xmin=[xmin 1e-3 1e-3 1e-3 ];xmax=[xmax 1e3 1e3 1e3 ];
elseif strcmp(kernel1,'poly_kernel') && strcmp(kernel2,'poly_kernel')
    xmin=[xmin 1e-3 1 1e-3 1 ];xmax=[xmax 1e3 10 1e3 10 ];
elseif strcmp(kernel1,'poly_kernel') && strcmp(kernel2,'wav_kernel')
    xmin=[xmin 1e-3 1 1e-3 1e-3 1e-3 ];xmax=[xmax 1e3 10 1e3 1e3 1e3 ];
elseif strcmp(kernel1,'wav_kernel') && strcmp(kernel2,'wav_kernel')
    xmin=[xmin 1e-3 1e-3 1e-3 1e-3 1e-3 1e-3 ];xmax=[xmax 1e3 1e3 1e3 1e3 1e3 1e3 ];
end
dim=length(xmin);

优化后的适应度曲线如下所示。适应度曲线是一条下降的曲线,表示随着woa优化的,能够找到一组更好的超参数,使得DHKELM的分类错误率越来越低。

 经过20次优化,采用上述最优超参数进行DHKELM建模,得到的测试集分类正确率为99.33%。

 3-还有更多

代码链接在评论区

1.MATLAB原子轨道优化深度混合核极限学习机的轴承故障诊断(AOS-DHKELM)
2.MATLAB天鹰优化器优化深度混合核极限学习机的轴承故障诊断(AO-DHKELM)
3.MATLAB气味体优化深度混合核极限学习机的轴承故障诊断(AO-DHKELM)
4.MATLAB灰狼优化深度混合核极限学习机的轴承故障诊断(GWO-DHKELM)
5.MATLAB算术优化算法优化深度混合核极限学习机的轴承故障诊断(AOA-DHKELM)
6.MATLAB粒子群优化深度混合核极限学习机的轴承故障诊断(PSO-DHKELM)
7.MATLAB蜉蝣优化深度混合核极限学习机的轴承故障诊断(MA-DHKELM)
8.MATLAB鲸鱼优化深度混合核极限学习机的轴承故障诊断(WOA-DHKELM)
9.MATLAB麻雀优化深度混合核极限学习机的轴承故障诊断(SSA-DHKELM)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

机器鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值