五篇保姆级分类诊断教程,数据特征提取+优化算法+机器学习

今天水一期,总结一下以前写过的几篇保姆级故障诊断。学会这几篇,机器学习的故障诊断你就基本合格了!

本期内容:基于SABO-VMD-CNN-SVM的分类诊断。

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

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

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

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

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

99e5ed5b7da9615f6baf1ceaee935d48.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降维后进行可视化。结果如下:

74e32cc67b074d4837917390b7341ee4.png

a8464c90cd86380f7aca07b19e1ce0eb.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参数进行寻优。

结果展示

37294e1e57cf88cef8ff61377d99bf7c.png

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

b8dd7325dfbc940c41be182df336e12e.png

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

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

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

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

f7a5e9ddf9ea7e6dcd1aa5f132ead288.png

fe80d4f5565a7f90c62803d89f36839b.jpeg

ca976cedde2e9f67062823da53635310.jpeg

ad6d6d597a9514313075b148ec82dbbf.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.3339


EMD能量熵=%.4f
    0.1693    0.2632    0.3051    0.3423    0.2335    0.3600


IMF1的近似熵为: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:m
    D0 = [D0,X097_DE_time(1+w*(i-1):w*(i-1)+s)];
end
D0 = D0';
D1=[];
for i =1:m
    D1 = [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 == 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的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];  %将每个状态提取得到的特征向量都放在一起
end
    save 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)/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个样本进行训练,后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

d68c654ca4bf79af041e5efdb8f7c3a2.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.mfbz.cn/a/408157.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Github代码仓库SSH配置流程

作者: Herman Ye Auromix 测试环境: Ubuntu20.04 更新日期: 2024/02/21 注1: Auromix 是一个机器人爱好者开源组织。 注2: 由于笔者水平有限,以下内容可能存在事实性错误。 相关背景 在为Github代码仓库配…

RocketMQ快速实战以及集群架构原理详解

RocketMQ快速实战以及集群架构原理详解 组成部分 启动Rocket服务之前要先启动NameServer NameServer 提供轻量级Broker路由服务,主要是提供服务注册 Broker 实际处理消息存储、转发等服务的核心组件 Producer 消息生产者集群,通常为业务系统中的一个功…

基础光学系列:(四)机器视觉中的光圈、焦距与景深调整技巧

控制景深和成像质量是摄影和机器视觉领域的关键技能。通过调整光圈、焦距、和感光元件(如数码相机的图像传感器)的位置,可以精细地控制图像的外观。下面是如何通过这些参数来控制景深和提高成像质量的一些建议: 调整光圈来控制景…

学生管理系统简易版(C语言)

简介: 有登录功能,这个功能是利用文本文件来保存用户名和密码彩色的菜单页面多种功能较好的排版含有文件夹图标 目录展示: 页面展示: 下载链接:https://download.csdn.net/download/liyankang/88873436 度盘链接&…

BUU [GWCTF 2019]mypassword

BUU [GWCTF 2019]mypassword 开题,是个登录界面,也有注册功能 首先我们注册个号看看。然后登录 提示不是SQL注入 有反馈界面,反馈应该管理员会看,可能存在XSS。 查看源码,注释给出了后端源码,对XSS进行了…

GEE数据集——GLANCE 全球土地覆被训练数据集

GLANCE 全球土地覆被训练数据集 GLanCE 培训数据集向公众开放,专为区域到全球土地覆被和土地覆被变化分析而设计。该数据集的中等空间分辨率为 30 米,时间跨度为 1984 年至 2020 年,在地理和光谱上代表了全球所有生态区域。每个训练单元提供多…

极狐GitLab 使用指南:如何使用极狐GitLab 进行第一次 git commit

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 进行第一次 Git 提交 本教程包含一些关于 Git 的工作原理&…

Escalate_Linux-环境变量劫持提权(5)

环境变量劫持提权 在Shll输入命令时,Shel会按PAH环境变量中的路径依次搜索命令,若是存在同名的命令,则执行最先找到的,若是PATH中加入了当前目录,也就是“”这个符号,则可能会被黑客利用,例如在…

RM电控讲义【HAL库篇】(二)

8080并口模式是一种常见的计算机接口模式,主要用于LCD(液晶显示屏)模块。 在8080并口模式中,通信端口包括多种信号线,用于实现数据的读写和控制功能。主要的信号线包括: CS(片选信号&#xff…

ArcgisForJS如何将ArcGIS Server发布的点要素渲染为热力图?

文章目录 0.引言1.ArcGIS创建点要素2.ArcGIS Server发布点要素3.ArcgisForJS将ArcGIS创建的点要素渲染为热力图 0.引言 ArcGIS For JS 是一个强大的地理信息系统(GIS)工具,它允许开发者使用 JavaScript 语言来创建各种 GIS 应用。ArcGIS Ser…

Java——防止SQL注入的几种策略

一、什么是SQL注入 SQL注入(SQL Injection)是一种常见的网络安全漏洞,它允许攻击者通过操纵应用程序的输入来执行恶意的SQL查询。这种漏洞发生在应用程序没有正确验证、过滤或转义用户提供的输入数据时。攻击者可以利用这个漏洞来执行未经授…

Flask基础学习3

参考视频:41-【实战】答案列表的渲染_哔哩哔哩_bilibili flask 实现发送短信功能 pip install flask-mail # 安装依赖 我这里用登录的网易邮箱获取的授权码(登录QQ邮箱的授权码总是断开收不到邮件), # config # config mail MAI…

Python入门必学:单引号、双引号与三引号的差异与应用

Python入门必学:单引号、双引号与三引号的差异与应用 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程 👈 希望得…

HC595级联原理及实例 - STM32

74HC595的最重要的功能就是:串行输入,并行输出。其次,74HC595里面有2个8位寄存器:移位寄存器、存储寄存器。74HC595的数据来源只有一个口,一次只能输入一个位,那么连续输入8次,就可以积攒为一个…

MiKTeX安装后,Latex编译后PDF无法预览,是灰色的

解决方式删掉编译器就可以, 即删掉MiKTeX MiKTeX安装后会将编译器默认修改为MiKTeX,这个时候会显示报错,简单粗暴的方式是删掉MiKTeX软件

python统计分析——单因素方差分析

参考资料:用python动手学统计学 方差分析:analysis of variance,缩写为ANOVA 1、背景知识 1.1 要使用方差分析,数据的总体必须服从正态分布,而且各个水平内部的方差必须相等。 1.2 反复检验导致显著性结果更易出现…

相机选型介绍

摄影测量中,相机是非常重要的角色,合适的相机产出合适的图像,得到合适的重建精度,这是相机的重要性。 您也许第一反应是,摄影测量所需的理想相机,是有着超高分辨率的相机,但事实可能并非如此&a…

太阳能光伏模型的参数确定及模型应用介绍

一、太阳能光伏模型介绍 ​ 太阳能通过光伏(PV)发电系统转化为电能。通过使用新材料技术,一直致力于提高光伏系统中太阳能电池的功率转换效率。基于钙钛矿太阳能电池的冠军器件具有24.8%的认证功率转换效率,仍有很大的改进空间。…

学习 LangChain 的 Passing data through

学习 LangChain 的 Passing data through 1. Passing data through2. 示例 1. Passing data through RunnablePassthrough 允许不改变或添加额外的键来传递输入。这通常与 RunnableParallel 结合使用,将数据分配给映射中的新键。 RunnablePassthrough() 单独调用&…

ChatGPT Plus遇到订阅被拒原因与解决方案

ChatGPT Plus被广泛认为相比普通版本更快、更强,并且能最先体验新功能。 很多小伙伴再订阅时遇到图片中的问题 错误提示包括这些: Your credit card was declined.Try paying with a debit card instead.您的信用卡被拒绝了。请尝试用借记卡支付。你的…