💥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.