保姆级教程之SABO-VMD-SVM的西储大学轴承诊断

这篇具有很好参考价值的文章主要介绍了保姆级教程之SABO-VMD-SVM的西储大学轴承诊断。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

之前写过一篇优化核极限学习机的轴承诊断,今天再出一期基于SVM的轴承诊断。

依旧是包含了从数据处理,到减法优化器SABO算法优化VMD参数,再到支持向量机的故障诊断,实现故障诊断的全流程,其他类型的故障诊断均可参考此流程。数据替换十分简单!

友情提示:对于刚接触故障诊断的新手来说,这篇文章信息量可能有点大,大家可以收藏反复阅读。即便有些内容本篇文章没讲出来,但其中的一些跳转链接,也完全把故障诊断这个故事讲清楚了。

与上一期文章相似,先给大家看看文件夹目录,都是作者精心整理过的。

保姆级教程之SABO-VMD-SVM的西储大学轴承诊断,支持向量机,算法,机器学习,人工智能,数据挖掘

最后一个压缩包是有关VMD画图的程序。考虑到大家可能会用到VMD的相关作图,包络谱,频谱图等,作者在这里也一并附在代码中了。这部分大家需要自行更改数据!也就是作者比较火的文章之一,这里边提到的所有代码:VMD分解,matlab代码,包络线,包络谱,中心频率,峭度值,能量熵,样本熵,模糊熵,排列熵,多尺度排列熵,西储大学数据集为例

如图所示,本次内容一共做了三件事情:

一,对官方下载的西储大学数据进行处理,步骤如下:

1.一共加载10种数据,然后取每个数据的DE_time(%DE是驱动端数据 FE是风扇端数据 BA是加速度数据 选择其中一个就行)

2.设置滑动窗口w,每个数据的故障样本点个数s,每个故障类型的样本量m

3.将所有的数据滑窗完毕之后,综合到一个data变量中

有关西储大学数据的处理之前有文章也讲过,大家可以看这篇文章:西储大学轴承诊断数据处理,matlab免费代码获取

图中的1750,1772,1790是西储大学轴承的转速,大家做诊断的时候,选择其中一个即可,即选同一转速下的不同故障进行诊断更有意义!

二,对第一步数据处理得到的数据进行特征提取

选取五种适应度函数进行优化,这里大家可以自行决定选哪一个!以此确定VMD的最佳k和α参数。五种适应度函数分别是:最小包络熵,最小样本熵,最小信息熵,最小排列熵,排列熵/互信息熵,代码中可以一键切换。至于应该选择哪种作为自己的适应度函数,大家可以看这篇文章。VMD为什么需要进行参数优化,最小包络熵/样本熵/排列熵/信息熵,适应度函数到底该选哪个

老粉应该知道,之前也推过一篇文章,就是关于西储大学特征提取的,但当时作者懒,没有写一个大循环,需要大家针对每种类型的数据依次提取。这次,作者把特征提取写了一个大循环,方便一键特征提取,大家也可以很简单的更换自己的数据!

至于特征提取的具体原理,也在这篇文章进行过详细介绍,大家可以跳转阅读。简单来说,就是利用包络熵最小的准则把每个样本的最佳IMF分量提取出来,然后对其9个指标进行计算,分别是:均值,方差,峰值,峭度,有效值,峰值因子,脉冲因子,波形因子,裕度因子。然后用这9个指标构建每个样本的特征向量。

另外本篇文章采用了2023年一个较新且效率较高的智能算法---减法优化器(SABO),对VMD参数进行了优化,找到了每个故障类型的最佳IMF分量,并利用包络熵最小的准则,提取出了最佳的IMF分量。

三,采用支持向量机实现故障分类

本文所选SVM是从官网下载的libsvm-3.3版本,作者已编译好,大家可以直接运行。如果想自行编译的童鞋可以从网站下载:https://www.csie.ntu.edu.tw/~cjlin/libsvm/index.html,编译步骤可以参考https://blog.csdn.net/qq_42457960/article/details/109275227

本文采用了网格搜索机制,并采用5折交叉验证,对SVM的惩罚因子c和gamma参数进行寻优。

结果展示

保姆级教程之SABO-VMD-SVM的西储大学轴承诊断,支持向量机,算法,机器学习,人工智能,数据挖掘

混淆矩阵图,有的文章会采用这种图:

保姆级教程之SABO-VMD-SVM的西储大学轴承诊断,支持向量机,算法,机器学习,人工智能,数据挖掘

这里不得不说一句,官方给出的libSVM包,准确率就是嘎嘎高!

部分代码

数据处理代码:

clc;
clear;
addpath(genpath(pwd));
%DE是驱动端数据 FE是风扇端数据 BA是加速度数据 选择其中一个就行
load 97.mat     %正常
load 107.mat    %直径0.007英寸,转速为1750时的  内圈故障
load 120.mat    %直径0.007,转速为1750时的  滚动体故障
load 132.mat    %直径0.007,转速为1750时的  外圈故障
load 171.mat    %直径0.014英寸,转速为1750时的  内圈故障
load 187.mat    %直径0.014英寸,转速为1750时的  滚动体故障
load 199.mat    %直径0.014英寸,转速为1750时的  外圈故障
load 211.mat   %直径0.021英寸,转速为1750时的  内圈故障
load 224.mat  %直径0.021英寸,转速为1750时的  滚动体故障
load 236.mat  %直径0.021英寸,转速为1750时的 外圈故障
w=1000;                  % w是滑动窗口的大小1000
s=2048;                  % 每个故障表示有2048个故障点
m = 10;  %每种故障有120个样本
D0=[];
for i =1:m
    D0 = [D0,X097_DE_time(1+w*(i-1):w*(i-1)+s)];
end
D0 = D0';

SABO优化VMD参数并特征提取的代码:

%%  此程序运行需要很长的时间!!
% vmddata.mat就是最终特征提取的结果!


%% 以最小包络熵、最小样本熵、最小信息熵、最小排列熵,排列熵/互信息熵,为目标函数(任选其一),采用SABO算法优化VMD,求取VMD最佳的两个参数
clear
clc
close all
addpath(genpath(pwd))
xz = 5;  %xz, 选择1,以最小包络熵为适应度函数,
% 选择2,以最小样本熵为适应度函数,
% 选择3,以最小信息熵为适应度函数,
% 选择4,以最小排列熵为适应度函数,
% 选择5,以复合指标:排列熵/互信息熵为适应度函数。
if xz == 1  
    fobj=@EnvelopeEntropyCost;          %最小包络熵
elseif xz == 2
    fobj=@SampleEntropyCost;            %最小样本熵
elseif xz == 3  
    fobj=@infoEntropyCost;              %最小信息熵
elseif xz == 4
    fobj=@PermutationEntropyCost;       %最小排列熵
elseif xz == 5
    fobj=@compositeEntropyCost;       %复合指标:排列熵/互信息熵
end
load data_total_1797.mat   %这里选取转速为1797的10种故障,大家也可以选取其他类型的数据
D=2;             % 优化变量数目
lb=[100 3];      % 下限值,分别是a,k
ub=[2500 10];        % 上限值
T=20;       % 最大迭代数目
N=15;        % 种群规模
vmddata = [];
for i=1:10   %因为有十种故障状态
    disp(['正在对第',num2str(i),'个故障类型的数据进行VMD优化……请耐心等待!'])
    every_data = data(1+120*(i-1):120*i,:);  %一种状态是120个样本,每次选120个样本进行VMD优化和特征提取
    da = every_data(1,:);  %从当前状态的数据中任选一组数据进行VMD优化即可。
    [SABOBest_score,SABOBest_pos,Bestidx,SABO_curve] = SABO(N,T,lb,ub,D,fobj,da');
    display(['第',num2str(i),'个故障类型数据的最佳VMD参数是:', num2str(fix(SABOBest_pos)),'最佳IMF分量是:IMF',num2str(Bestidx)]);  %输出最佳位置
    %% 以下为将最佳的a,k,idx回带VMD中,并进行9种时域指标特征提取
    bbh = fix(SABOBest_pos);%最佳位置取整
    new_data = tezhengtiqu(bbh(1),bbh(2),Bestidx,every_data);  %将优化得到的两个参数和最小适应度的索引值带回VMD中,提取得到当前状态的特征向量
    vmddata =  [vmddata;new_data];  %将每个状态提取得到的特征向量都放在一起
end
    save vmddata.mat vmddata  %将提取的特征向量保存为mat文件
%% 删除路径,以免被其他函数混淆
rmpath(genpath(pwd))

SVM诊断的代码:

%% 初始化
clear
close all
clc
warning off
% 数据读取
addpath(genpath(pwd));
load vmddata.mat  %加载处理好的特征数据
data = vmddata;
% 数据载入


bv = 120;    %每种状态数据有120组
% 加标签值
hhh = size(data,2);
for i=1:size(data,1)/bv
    data(1+bv*(i-1):bv*i,hhh+1)=i;
end
input=data(:,1:hhh);
output =data(:,end);
jg = bv;   %每组120个样本
tn = 90;    %选前tn个样本进行训练
input_train = []; output_train = [];
input_test = []; output_test = [];
for i = 1:max(data(:,end))
    input_train=[input_train;input(1+jg*(i-1):jg*(i-1)+tn,:)];
    output_train=[output_train;output(1+jg*(i-1):jg*(i-1)+tn,:)];
    input_test=[input_test;input(jg*(i-1)+tn+1:i*jg,:)];
    output_test=[output_test;output(jg*(i-1)+tn+1:i*jg,:)];
end
input_train = input_train'; 
input_test = input_test';
%归一化
[inputn_train,inputps]=mapminmax(input_train);inputn_train = inputn_train';
[inputn_test,inputtestps]=mapminmax('apply',input_test,inputps); inputn_test =inputn_test';
[c,g] = meshgrid(-10:0.5:10,-10:0.5:10);  %调整间距,可以搜索的更加精细
[m,n] = size(c);
cg = zeros(m,n);
eps = 10^(-4);
v = 5;  %采用5折交叉验证
bestacc = 0;

代码获取

完整代码获取,点击下方卡片,后台回复关键词:

SVM诊断文章来源地址https://www.toymoban.com/news/detail-681781.html

到了这里,关于保姆级教程之SABO-VMD-SVM的西储大学轴承诊断的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 特征维度降维算法——平均影响值算法(MIV)免费MATLAB代码获取,西储大学数据为例

            众所周知,常用的特征维度降维方法有主成分分析,因子分析法,平均值影响法。而平均影响值算法(MIV)是神经网络对输入变量进行降维的最好方法之一。         在神经网络模型实际应用中,由于没有明确的理论来确定输入变量,即网络输入神经元难以确

    2024年02月08日
    浏览(56)
  • 上海大学计算机体系结构实验四 HPL安装和测试(虚拟机centos7.6环境下保姆级教程!)

    CSDN上的安装测试有很多,但在实际安装过程中经常碰到博客的教程缺了中间的某个指令,或者漏了某个配置(写的不完全)导致报错的情况,一波三折下来直接心态搞崩,不过好在最后终于是成功了。 特此我详细记录下本次HPL安装和测试的过程,给自己一个参考,也给其他

    2024年02月03日
    浏览(63)
  • 上海交通大学电院夏令营直博保姆级攻略

    目录 写在前面 个人情况 报名【5月25日至6月26日】 面试【7月9日or7月10日】 面试结果通知与双选竞争【8月1日至9月初】 双选的一些TIPS 福(广)利(告)时间:Top1%室友的保研大宝箱! 本攻略主要是对2022年上海交通大学夏令营从报名到成功上岸与老师双选经验的记录。所有流

    2024年02月15日
    浏览(45)
  • 机器学习实战-系列教程8:SVM分类实战3非线性SVM(鸢尾花数据集/软间隔/线性SVM/非线性SVM/scikit-learn框架)项目实战、代码解读

    本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 SVM分类实战1之简单SVM分类 SVM分类实战2线性SVM SVM分类实战3非线性SVM 使用PolynomialFeatures模块进行预处理,使用这个可以增加数据维度 polynomial_svm_clf.fit(X,y)对当前进行训练传进去X和y数据 SVM分类实战

    2024年02月07日
    浏览(54)
  • 多维时序 | MATLAB实现SABO-CNN-GRU-Attention多变量时间序列预测

    预测效果 基本介绍 多维时序 | MATLAB实现SABO-CNN-GRU-Attention多变量时间序列预测。 模型描述 MATLAB实现SABO-CNN-GRU-Attention多变量时间序列预测 1.无Attention适用于MATLAB 2020版及以上版本;融合Attention要求Matlab2023版以上; 2.基于减法平均优化器优化算法(SABO)、卷积神经网络(CNN)和

    2024年02月11日
    浏览(55)
  • [软件工具]opencv-svm快速训练助手教程解决opencv C++ SVM模型训练与分类实现任务支持C# python调用

    opencv中已经提供了svm算法可以对图像实现多分类,使用svm算法对图像分类的任务多用于场景简单且对时间有要求的场景,因为opencv的svm训练一般只需要很短时间就可以完成训练任务。但是目前网上没有一个工具很好解决训练问题,大部分需要自己编程去实现训练任务,这个对

    2024年02月06日
    浏览(59)
  • matlab自带VMD详解,VMD去噪,VMD分解

    为了更好的利用MATLAB自带的vmd函数,本期作者将详细讲解一下MATLAB自带的vmd函数如何使用,以及如何画漂亮的模态分解图。 首先给出官方vmd函数的调用格式。 函数的输入: 这里的x是待分解的信号,一行或者一列都可以! 函数的输出: 第一个参数位置--imf:vmd分解得到的I

    2024年02月06日
    浏览(37)
  • 【FPGA教程案例95】机器学习2——基于FPGA的SVM支持向量机二分类系统实现之Verilog编程设计

    FPGA教程目录 ​​​​​​MATLAB教程目录 本课程成果预览(o_check=0表示分类1,o_check=1表示分类2,识别率为98.7%) 目录 1.软件版本

    2023年04月08日
    浏览(60)
  • 详解Git 安装教程(保姆级教程)

    Git工具官网:https://git-scm.com/downloads 点击下载(官网下载可能会比较慢,下面有淘宝镜像): 所有东西下载慢的话就可以去找镜像! 官网下载太慢,我们也可以使用淘宝镜像下载:CNPM Binaries Mirror 比如可以选择:v2.37.3.windows.1 1. 用户许可声明 双击下载后的 Git-2.37.3-64-bit.ex

    2024年02月05日
    浏览(40)
  • cartographer安装教程(超详细,保姆级教程)

    cartographyer安装分为二进制安装和源码安装,对于想学习源码的同学,选择源码安装,对于只是配置参数的同学安装二进制足矣。 一、二进制安装(一键安装) 二、源码安装 (一)、准备工作 1、安装依赖: 2、安装protobuf3 (1)安装之前先卸载卸载ros自带proto2 (2)安装protobuf3.6.0

    2024年01月16日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包