基于冯洛伊曼拓扑的鲸鱼算法用于滚动轴承的故障诊断研究(Matlab代码实现)
Posted 科研社
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于冯洛伊曼拓扑的鲸鱼算法用于滚动轴承的故障诊断研究(Matlab代码实现)相关的知识,希望对你有一定的参考价值。
👨🎓 个人主页: 研学社的博客
💥 💥 💞 💞 欢迎来到本博客 ❤️ ❤️ 💥 💥
🏆 博主优势: 🌞 🌞 🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳ 座右铭:行百里者,半于九十。
📋 📋 📋 本文目录如下: 🎁 🎁 🎁
目录
💥1 概述
📚2 运行结果
2.1 改进鲸鱼算法
2.2 普通 lssvm
🎉3 参考文献
🌈4 Matlab代码实现
💥1 概述
本文利用最小二乘支持向量机进行分类器建模,改进鲸鱼算法(基于冯洛伊曼拓扑的鲸鱼算法)进行超参数寻优,最后将所提方法用于滚动轴承的故障诊断。
📚2 运行结果
2.1 改进鲸鱼算法
2.2 普通 lssvm
部分代码:
%% 本程序用于多种优化算法的对比
% 分别为粒子群 遗传算法 鲸鱼算法 基于冯洛伊曼拓扑的鲸鱼算法
% 运行只需要取消对应算法的注释
% 将不需要的算法加上注释 即‘%’
% 由于运行比较慢 我已经保存了一次vnwoa的结果在trace中
% 未优化的程序在lssvm_putong中
clear
clc
close all
format compact
%% 加载数据
load data_kjade
input=data_kjade;
output=[1*ones(1,100) 2*ones(1,100) 3*ones(1,100) 4*ones(1,100) 5*ones(1,100) 6*ones(1,100) 7*ones(1,100) 8*ones(1,100) 9*ones(1,100) 10*ones(1,100)]';
rand('seed',0)
%% 随机取700为训练集 300为测试集
[m,n]=sort(rand(1,1000));
m=700;
X1=input(n(1:m),:);
y1=output(n(1:m),:);
Xt=input(n(m+1:end),:);
yt=output(n(m+1:end),:);
%%
N=5;
G=10;
% [x,trace]=psoforlssvm(N,G,X1,y1,Xt,yt);%粒子群算法
% [x,trace]=gaforlssvm(N,G,X1,y1,Xt,yt);%遗传算法
[x,trace]=woaforlssvm(N,G,X1,y1,Xt,yt);%鲸鱼算法
% [x,trace]=vnwoaforlssvm(N,G,X1,y1,Xt,yt);%改进鲸鱼算法
load trace
figure
plot(trace)
xlabel('迭代次数')
ylabel('适应度值')
title('适应度曲线')
%%
gam = x(1)
sig2 =x(2)
% 利用寻优得到的最优gam与sig2重新训练lssvm
[yc,codebook,old_codebook] = code(y1,'code_OneVsOne');
%code_OneVsAll
%code_OneVsOne
%code_MOC
model = initlssvm(X1,yc,'c',gam,sig2,'RBF_kernel');
model = trainlssvm(model);
Y = simlssvm(model,X1);
predict_label = code(Y,old_codebook,[],codebook);
fprintf(1,'Accuracy: %2.2f\\n',100*sum(predict_label==y1)/length(y1));
figure
stem(y1)
hold on
plot(predict_label,'*')
xlabel('训练集样本编号')
ylabel('输出标签')
title('训练集分类输出')
%%% 测试集准确率
Y = simlssvm(model,Xt);
predict_label = code(Y,old_codebook,[],codebook);
fprintf(1,'Accuracy: %2.2f\\n',100*sum(predict_label==yt)/length(yt));
figure
stem(yt)
hold on
plot(predict_label,'*')
xlabel('测试集样本编号')
ylabel('输出标签')
title('测试集分类输出')
%% 普通 lssvm
clear
clc
close all
format compact
addpath LSSVMlab
%% 加载数据
load data_kjade
input=data_kjade;
output=[1*ones(1,100) 2*ones(1,100) 3*ones(1,100) 4*ones(1,100) 5*ones(1,100) 6*ones(1,100) 7*ones(1,100) 8*ones(1,100) 9*ones(1,100) 10*ones(1,100) ]';
rand('seed',0)
%% 随机取700为训练集 300为测试集
[m,n]=sort(rand(1,1000));
m=700;
X1=input(n(1:m),:);
y1=output(n(1:m),:);
Xt=input(n(m+1:end),:);
yt=output(n(m+1:end),:);
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
gam = 81.6492 ;
sig2 =53.5081;
[yc,codebook,old_codebook] = code(y1,'code_MOC');
model = initlssvm(X1,yc,'c',gam,sig2,'RBF_kernel');
model = trainlssvm(model);
%% 测试集准确率
Y = simlssvm(model,Xt);
predict_label = code(Y,old_codebook,[],codebook);
fprintf(1,'Accuracy: %2.2f\\n',100*sum(predict_label==yt)/length(yt));
figure
stem(yt)
hold on
plot(predict_label,'*')
xlabel('测试集样本编号')
ylabel('输出标签')
title('测试集分类输出')
🎉3 参考文献
部分理论来源于网络,如有侵权请联系删除。
[1]张兆坤,杨国华,张佳豪,杨晓伟,张云飞.基于VNWOA-LSSVM变压器故障诊断方法研究[J].电工电气,2022(12):32-36+62.
[2]杨亚红,王海瑞.基于AsyLnCPSO-SVM的滚动轴承故障诊断研究[J].农业装备与车辆工程,2022,60(10):163-166.
[3]左晗玥. 基于参数优化VMD的滚动轴承故障诊断方法研究[D].内蒙古科技大学,2022.DOI:10.27724/d.cnki.gnmgk.2022.000782.
🌈4 Matlab代码实现
听听冯洛伊曼的概念机器的齿轮声
先来张今天画的思维导图。红框中的织布机是今天的主角。
1.织布工将图案编码成一行一行,放入织布机。织布机织出了织布工想要的图案,可能是一只大黄鸭,哈哈哈
2.巴贝奇看看这台织布机,若有所思,历经千辛想要造台这样的机器。限于当时的物理工艺,无疾而终,惨的一塌糊涂,哈哈哈
3.时光飞逝,冯洛伊曼根据织布机构造出了在概念中的机器,进行着推理。
4.一卷卷打孔的纸带,不停的放入插槽。
5.机器赶紧偷瞄一行,忙着加减乘除,检查条件,完全不知道自己干的是一件多么有意义的事情。
6.滴答滴答,齿轮转动,砰地一声,答案出来。
7.你笑我,他笑我,机器这个愚笨的精灵,貌似学会了推理,上知天文下知地理。
8.大笑一声,信息的洪流开始倾注而下。哈哈哈哈哈哈哈~
以上是关于基于冯洛伊曼拓扑的鲸鱼算法用于滚动轴承的故障诊断研究(Matlab代码实现)的主要内容,如果未能解决你的问题,请参考以下文章