保姆级教程之SABO-VMD-CNN-SVM的分类诊断,特征可视化

今天出一期基于SABO-VMD-CNN-SVM的分类诊断。

依旧是采用经典的西储大学轴承数据。基本流程如下:

首先是以最小包络熵为适应度函数,采用SABO优化VMD的两个参数。其次对每种状态的数据进行特征向量的求取,并为每组数据打上标签。然后将数据送入CNN进行特征提取, 并进行PCA降维后特征可视化,并与未进行CNN特征提取的数据可视化结果进行比较。最后将CNN提取的特征送入SVM进行分类。

其他数据的故障分类都可以适用该方法!数据替换十分简单,代码注释非常详细!

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

文件夹目录如下:都是作者精心整理过的。程序运行十分简单,按照步骤,一步步来即可!

457c5b4f3668af3bd6881f488da4b7a6.png

考虑到大家可能会用到VMD的相关作图,包络谱,频谱图等,作者在这里也一并附在代码中了。这部分大家需要自行更改数据!具体可以参考这个:VMD分解,matlab代码,包络线,包络谱,中心频率,峭度值,能量熵,样本熵,模糊熵,排列熵,多尺度排列熵,西储大学数据集为例

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

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

步骤如下:

①一共加载4种状态的数据,分别是正常状态,内圈故障,外圈故障,滚动体故障。②设置滑动窗口w,每个数据的故障样本点个数s,每个故障类型的样本量m。③将所有的数据滑窗完毕之后,综合到一个data变量中,也就是截图中的data_total_1797.mat

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

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

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

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

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

三,采用卷积神经网络(CNN)对数据特征进行提取

这里做了对比实验。将经过CNN特征提取的向量和未经过CNN特征提取的向量可视化结果进行对比。具体做法为:采用了PCA降维后进行可视化。结果如下:

5da462a65447270ecc538243794beed4.png

c26035535fc4958e51a47656359be4da.png

第一张图是未经CNN特征提取,直接采用PCA降维后的特征可视化结果,可以看到,正常状态和滚动体故障有严重重叠!而采用CNN提取后,第二张图可以看到,四种状态不存在重合,各个类别区分明显!证明了CNN特征提取的有效性。

五、采用支持向量机实现故障分类

将CNN提取好的特征数据送入SVM进行训练与测试。本文所选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参数进行寻优。

结果展示

2862ba1bd181f05658cdb09e2f900d3a.png

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

ab9948d3762e9c0eec94e44543817afe.png

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

以上所有图片在代码包里都能复现。

有些同学可能会用到一些频谱图,包络谱图等,这里以105.mat故障信号为例进行展示:

运行文件夹“VMD分解,matlab代码,包络线,包络熵……”下的MAIN.m文件后,会出现如下运行结果:

ab1654f1fcf1bc11f866dc21b90115f3.png

5dcfea271df30f6d5356bd67a45fef80.jpeg

0a15662873efc235761aea05d1049435.jpeg

cf0d83cf9920a2146b36b15cb258f9ff.jpeg

在命令窗口会出现如下计算结果:

IMF1的峭度值为:2.6102
IMF2的峭度值为:3.3346
IMF3的峭度值为:2.9038
IMF4的峭度值为:3.5663
IMF5的峭度值为:2.7648
IMF6的峭度值为:3.2977
IMF分量的能量4.9829   10.5892   14.4765   19.8061    8.4764   24.3339EMD能量熵=%.4f0.1693    0.2632    0.3051    0.3423    0.2335    0.3600IMF1的近似熵为:0.023426
IMF2的近似熵为:0.15115
IMF3的近似熵为:0.08722
IMF4的近似熵为:0.04402
IMF5的近似熵为:0.052554
IMF6的近似熵为:0.14538
IMF1的包络熵为:7.2053
IMF2的包络熵为:7.14
IMF3的包络熵为:7.1537
IMF4的包络熵为:7.0853
IMF5的包络熵为:7.2063
IMF6的包络熵为:7.1476
局部最小包络熵为:7.0853
IMF1的模糊熵为:0.12759
IMF2的模糊熵为:0.090684
IMF3的模糊熵为:0.041706
IMF4的模糊熵为:-0.0032906
IMF5的模糊熵为:-0.011035
IMF6的模糊熵为:0.030635
IMF1的排列熵为:0.61446
IMF2的排列熵为:0.76756
IMF3的排列熵为:0.93485
IMF4的排列熵为:0.95524
IMF5的排列熵为:0.98658
IMF6的排列熵为:0.99433
多尺度排列熵为:
0.36792     0.50757     0.56639     0.64017     0.68493     0.66705     0.69098     0.66583     0.61102     0.62604     0.62396     0.61879     0.67588     0.66087     0.67663     0.65568     0.66656     0.65949     0.63769     0.63972     0.63041     0.60632     0.60124     0.58355     0.57844      0.5803     0.57774     0.55767     0.51696     0.55986
0.48773     0.66594     0.69663     0.62542     0.59005     0.72211     0.73193     0.69654      0.6619      0.6861     0.71204     0.67167     0.63684     0.64251     0.64805     0.65568     0.63513     0.65138     0.64346     0.62353     0.62084     0.58707     0.57752     0.59973     0.58993     0.55851     0.57774     0.58401     0.57735      0.5739
0.57786     0.57523     0.67386     0.65101     0.56296     0.71078     0.58023     0.71316     0.67834     0.65725     0.68971     0.64193     0.68882     0.67817     0.65194     0.64461      0.6221     0.64496     0.62037     0.62467     0.60686     0.59167     0.60124     0.59603     0.58993      0.5803     0.58617     0.58401     0.55902     0.56922
0.58138     0.47632     0.65939     0.66591     0.64333     0.65131     0.68434     0.63124     0.61944     0.67578     0.65511     0.67651     0.64736     0.66422     0.61521      0.6437     0.61607     0.63518     0.60773     0.63671     0.60246     0.58959     0.61178     0.56737     0.59376     0.58841     0.55667     0.55162     0.57277     0.57859
0.54329     0.53176       0.618     0.59543     0.66657     0.71203     0.68693     0.69594     0.56685     0.71009     0.64683     0.66333     0.67515     0.67042     0.63474     0.59895     0.66148     0.64328     0.62614      0.6337     0.63041     0.61969     0.59859     0.58864     0.59376     0.56662     0.57774     0.58401     0.57735     0.56922
0.53646     0.58339      0.5363     0.66055     0.50474     0.62548     0.65051     0.63196     0.67276      0.6993     0.67454     0.64403     0.61372     0.67611      0.5754      0.6362     0.64941     0.59124     0.63191     0.60547     0.60168     0.60632     0.61178     0.60343     0.53724     0.57877     0.59039     0.57523     0.54182     0.56922
IMF1的样本熵为:0.6129
IMF2的样本熵为:0.52726
IMF3的样本熵为:0.32156
IMF4的样本熵为:0.21892
IMF5的样本熵为:0.30553
IMF6的样本熵为:0.24375

部分代码

数据处理代码:

clc;
clear;
addpath(genpath(pwd));
%DE是驱动端数据 FE是风扇端数据 BA是加速度数据 选择其中一个就行
load 97.mat  %正常
load 105.mat  %直径0.007英寸,转速为1797时的  内圈故障
load 118.mat   %直径0.007,转速为1797时的  滚动体故障
load 130.mat  %直径0.007,转速为1797时的  外圈故障
% 一共是4个状态,每个状态有120组样本,每个样本的数据量大小为:1×2048
w=1000;                  % w是滑动窗口的大小1000
s=2048;                  % 每个故障表示有2048个故障点
m = 120;            %每种故障有120个样本
D0=[];
for i =1:mD0 = [D0,X097_DE_time(1+w*(i-1):w*(i-1)+s)];
end
D0 = D0';
D1=[];
for i =1:mD1 = [D1,X105_DE_time(1+w*(i-1):w*(i-1)+s)];
end
D1 = D1';

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

%% 以最小包络熵、最小样本熵、最小信息熵、最小排列熵,排列熵/互信息熵,为目标函数(任选其一),采用SABO算法优化VMD,求取VMD最佳的两个参数
clear
clc
close all
addpath(genpath(pwd))
xz = 1;  %xz, 选择1,以最小包络熵为适应度函数,
% 选择2,以最小样本熵为适应度函数,
% 选择3,以最小信息熵为适应度函数,
% 选择4,以最小排列熵为适应度函数,
% 选择5,以复合指标:排列熵/互信息熵为适应度函数。
if xz == 1  fobj=@EnvelopeEntropyCost;          %最小包络熵
elseif xz == 2fobj=@SampleEntropyCost;            %最小样本熵
elseif xz == 3  fobj=@infoEntropyCost;              %最小信息熵
elseif xz == 4fobj=@PermutationEntropyCost;       %最小排列熵
elseif xz == 5fobj=@compositeEntropyCost;       %复合指标:排列熵/互信息熵
end
load data_total_1797.mat   %这里选取转速为1797的4种故障,大家也可以选取其他类型的数据
D=2;             % 优化变量数目
lb=[100 3];      % 下限值,分别是a,k
ub=[2500 10];        % 上限值
T=20;       % 最大迭代数目
N=20;        % 种群规模
vmddata = [];%保存提取好的故障特征向量
zuijiacanshu = []; %保存每种故障状态的最佳VMD参数和对应的最佳IMF索引值
curve = [];  %保存每种故障状态对应的优化VMD收敛曲线
for i=1:4   %因为有4种故障状态disp(['正在对第',num2str(i),'个故障类型的数据进行VMD优化……请耐心等待!'])every_data = data(1+120*(i-1):120*i,:);  %一种状态是120个样本,每次选120个样本进行VMD优化和特征提取vmddata =  [vmddata;new_data];  %将每个状态提取得到的特征向量都放在一起
endsave curve curve  %保存每种故障状态对应的优化VMD收敛曲线save zuijiacanshu zuijiacanshu  %保存每种故障状态的最佳VMD参数和对应的最佳IMF索引值save vmddata.mat vmddata  %将提取的特征向量保存为mat文件

CNN-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)/bvdata(1+bv*(i-1):bv*i,hhh+1)=i;
end
input=data(:,1:hhh);
output =data(:,end);%% 划分训练集和测试集
jg = bv;   %每组120个样本
tn = 90;    %每组数据选前tn个样本进行训练,后bv-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_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;

代码获取

获取链接:复制链接浏览器打开

https://mbd.pub/o/bread/ZZaXmphu

或者点击下方阅读原文获取。

或者后台回复关键词:

CNNSVM

5e79d19c9deb5e698fb7348923518ecf.png

往期更多故障诊断的优秀文章推荐:

保姆级教程之VMD-CNN-BILSTM轴承故障诊断,MATLAB代码

保姆级教程之ICEEMDAN-GWO-LSSVM的轴承诊断,MATLAB代码

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

保姆级教程之VMD-SABO-KELM优化核极限学习机的西储大学轴承诊断

“三高”论文完美复现!基于PSO-VMD-MCKD方法的风机轴承微弱故障诊断,实现早期微弱故障诊断,MATLAB代码实现

“三高”论文完美复现!基于EEMD奇异值熵的滚动轴承故障诊断方法,MATLAB代码实现

VMD分解,matlab代码,包络线,包络谱,中心频率,峭度值,能量熵,样本熵,模糊熵,排列熵,多尺度排列熵,西储大学数据集为例

更多代码请前往主页获取!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/193258.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

竞赛选题 深度学习的智能中文对话问答机器人

文章目录 0 简介1 项目架构2 项目的主要过程2.1 数据清洗、预处理2.2 分桶2.3 训练 3 项目的整体结构4 重要的API4.1 LSTM cells部分:4.2 损失函数:4.3 搭建seq2seq框架:4.4 测试部分:4.5 评价NLP测试效果:4.6 梯度截断…

过滤器模式 rust和java的实现

文章目录 过滤器模式实现 过滤器模式实现javarustjavarust rust代码仓库 过滤器模式 过滤器模式(Filter Pattern)或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象&…

OpenAI与微软合作,构建 ChatGPT 5 模型;10天准确天气预报

🦉 AI新闻 🚀 OpenAI与微软合作,构建 ChatGPT 5 模型,下一代人工智能或拥有超级智能 摘要:OpenAI首席执行官 Sam Altman 在接受采访时表示,OpenAI正在与微软合作构建下一代人工智能模型 ChatGPT 5&#x…

基于模拟退火算法的TSP问题建模求解(Python)

基于模拟退火算法的TSP问题建模求解(Python) 一、模拟退火算法(Simulated Annealing Algorithm,SAA)工程背景模拟退火算法用于优化问题求解原理 二、旅行商问题(Travelling salesman problem,TS…

园区网络项目实战

实验背景 某写字楼备搭建一张网络供楼内企业办公使用。写字楼共6层,目前已有三层投入使用,分别 是一层会客大厅、二层行政部及总经理办公室、三层研发部和市场部。一层设有核心机房,其 他各楼层均有一个小房间放置网络设备。 第一步 询…

【Hello Go】Go语言运算符

Go语言运算符 算术运算符关系运算符逻辑运算符位运算符赋值运算符其他运算符运算符优先级 算术运算符 如果之前没有其他语言基础的小伙伴可以参考下我之前写的C语言运算符讲解 这里主要讲解下Go和C运算符的不同点 – 运算符 Go语言中只有后置 和后置– var a int 5a--fmt.P…

竞赛选题 深度学习的口罩佩戴检测 - opencv 卷积神经网络 机器视觉 深度学习

文章目录 0 简介1 课题背景🚩 2 口罩佩戴算法实现2.1 YOLO 模型概览2.2 YOLOv32.3 YOLO 口罩佩戴检测实现数据集 2.4 实现代码2.5 检测效果 3 口罩佩戴检测算法评价指标3.1 准确率(Accuracy)3.2 精确率(Precision)和召回率(Recall)3.3 平均精…

【2021集创赛】Arm杯一等奖作品—基于 Cortex-M3 内核 SOC 的动目标检测与跟踪系统

本作品介绍参与极术社区的有奖征集|秀出你的集创赛作品风采,免费电子产品等你拿~ 团队介绍 参赛单位:北京理工大学 队伍名称:飞虎队 指导老师:李彬 参赛杯赛:Arm杯 参赛人员:余裕鑫 胡涵谦 刘鹏昀 获奖情况&#xff1…

Python数据容器(字典)

字典 1.字典的定义2.字典数据的获取3.字典的嵌套4.嵌套字典的内容获取5.字典的常用操作6.常用操作总结7.遍历字典8.练习 1.字典的定义 同样使用{},不过存储的元素是一个一个的:键值对,语法如下 # 定义字典字面量 {key:value,key:value,...,…

邮件钓鱼-邮件来源伪造-SPF绕过-setoolkitgohishswaks钓鱼

0x00 SPF简介 SPF即发送方策略框架,某种邮件服务器会有自己的SPF策略设定,可以设定SPF为只允许某些主机发送邮件等,当设定后第三方就无法伪造成邮件服务器的管理员对用户下发邮件。 是否存在SPF的验证: linux下:dig…

day17_多线程基础

今日内容 零、 复习昨日 一、作业 二、进程与线程 三、创建线程 四、线程的API 一、复习 IO流的分类 方向: 输入,输出类型: 字节(XxxStream),字符(XxxReader,XxxWriter)字节输入流类名: FileInputStream字节输出流类名: FileOutputStream字符输入流类名: FileReader字符输出流类…

bclinux aarch64 ceph 14.2.10 对象存储 http网关 CEPH OBJECT GATEWAY Civetweb

相关内容 bclinux aarch64 ceph 14.2.10 文件存储 Ceph File System, 需要部署mds: ceph-deploy mds-CSDN博客 ceph-deploy bclinux aarch64 ceph 14.2.10【3】vdbench fsd 文件系统测试-CSDN博客 ceph-deploy bclinux aarch64 ceph 14.2.10【2】vdbench rbd 块设…

RabbitMQ之消息应答和持久化

文章目录 前言一、消息应答1.概念2.自动应答3.消息应答方法4.Multiple 的解释5.消息自动重新入队6.消息手动应答代码7.手动应答效果演示 二、RabbitMQ持久化1.概念2.队列如何实现持久化3.消息实现持久化4.不公平分发5.预取值 总结 前言 在RabbitMQ中,我们的消费者在…

Django之模版层

文章目录 模版语法传值模版语法传值特性模版语法标签语法格式if模板标签for模板标签with起别名 模版语法过滤器常用过滤器 自定义过滤器、标签、inclusion_tag自定义过滤器自定义标签自定义inclusion_tag 模版导入模版继承 模版语法传值 模板层三种语法{{}}:主要与数据值相关{%…

【LLM】0x00 大模型简介

0x00 大模型简介 个人问题学习笔记大模型简介LLM 的能力:LLM 的特点: LangChain 简介LangChain 核心组件 小结参考资料 个人问题 1、大模型是什么? 2、ChatGPT 在大模型里是什么? 3、大模型怎么用? 带着问题去学习&a…

Linux Centos 根目录扩展分区(保级教程)

Centos 根目录扩展分区 1. 扩展背景2.列出磁盘信息3. 对磁盘进行分区4. 重启Linux5. 将PV加入卷组centos并分区6.查看分区结果 1. 扩展背景 虚拟机初始分配20G内存,扩容到80G。 2.列出磁盘信息 可以得知容量信息以及即将创建的PV路径(通常为“/dev/s…

2024上海国际智能驾驶技术展览会(自动驾驶展)

2024上海国际智能驾驶技术展览会 2024 Shanghai International Autonomous driving Expo 时间:2024年3月26-28日 地点:上海跨国采购会展中心 随着科技的飞速发展,智能驾驶已经成为了汽车行业的重要趋势。在这个时代背景下,汽车不…

Qt 线程串口

文章目录 ui设置创建线程函数初始串口run函数接收发送数据读取数据处理读取的数据写入数据写入启动的命令 主线程 ui设置 创建线程函数 #include <QObject> #include <QThread> #include <QSerialPort> #include <QSerialPortInfo>class SerialPort :…

微信小程序广告banner、滚动屏怎么做?

使用滑块视图容器swiper和swiper-item可以制作滚动屏&#xff0c;代码如下&#xff1a; wxml: <swiper indicator-dots indicator-color"rgba(255,255,255,0.5)" indicator-active-color"white" autoplay interval"3000"><swiper-ite…

Unity Meta Quest 一体机开发(六):HandGrabInteractor 和 HandGrabInteractable 知识点

文章目录 &#x1f4d5;教程说明&#x1f4d5;HandGrabInteractor⭐HandGrabAPI⭐HandWristPoint⭐GripPoint⭐PinchPoint⭐PinchArea⭐HandGrabVisual⭐HandGrabGlow &#x1f4d5;HandGrabInteractable⭐Support Grab Type⭐Pinch Grab Rules 和 Palm Grab Rules⭐Unselect M…