基于Elman神经网络的刀具剩余使用寿命预测(初学者+matlab代码实现)

article/2025/9/24 0:16:22

1.Elman介绍

        Elman神经网络是 J. L. Elman于1990年首先针对语音处理问题而提出来的,是一种典型的局部回归网络( global feed forward local recurrent)。Elman网络可以看作是一个具有局部记忆单元和局部反馈连接的递归神经网络

        它的主要结构是前馈连接, 包括输入层、 隐含层、 输出层, 其连接权可以进行学习修正;反馈连接由一组“结构 ” 单元构成,用来记忆前一时刻的输出值, 其连接权值是固定的。在这种网络中, 除了普通的隐含层外, 还有一个特别的隐含层,称为关联层 (或联系单元层 ) ;该层从隐含层接收反馈信号, 每一个隐含层节点都有一个与之对应的关联层节点连接。关联层的作用是通过联接记忆将上一个时刻的隐层状态连同当前时刻的网络输入一起作为隐层的输入, 相当于状态反馈。隐层的传递函数仍为某种非线性函数, 一般为 Sigmoid函数, 输出层为线性函数, 关联层也为线性函数。

2.代码实现

2.1数据集来源

刀具数据集来源:试验数据来源于美国纽约预测与健康管理学 会(PHM)2010年高 速 数 控 机 床 刀 具 健 康 预 测 竞 赛的开放数据。

数据集介绍来源于原文链接:https://blog.csdn.net/qq_40587575/article/details/83351960

实验数据获取的形式是:   试验在上述切削条件下重复进行 6 次全寿命周期试验。端面铣削材料为正方形, 每次走刀端
    面铣的长度为 108mm 且 每 次 走 刀 时 间 相 等 , 每次走刀后测量刀具的后刀面磨损量。试验监测数据有x、y 、 z 三向
    铣削力信号 , x 、 y 、 z 三向铣削振动信号以及声发射均方根值。
   
    6次的数据集中  3次实验中有测量铣刀的磨损量,其他3次没有测量,作为比赛的测试集。
  系统测量的实验条件和实验方式如下所示:

2.2寿命预测方法流程

1、特征选取:提取六组刀具的切削力信号(一个通道)、振动信号(3个通道)和声发射信号(3个通道),共计7个通道数据,分别提取内个通道的27个特征指标。共计27×7个特征指标,分别上述的方式将特征指标构建成特征矩阵。

2、训练集和测试集选取:随机选取5组刀具数据作为训练集,剩下的一组数据作为测试集。每组数据的长度为315,训练集的长度为1575,测试集的长度为315.

3、数据集标签:刀具的剩余使用寿命标签设置为【315、314、、、、1】

4、构建Elman神经网络,后面就是人工炼丹(调参)

2.3代码实现

2.3.1提取csv文件

%% 提取数据clc
clear %  振动信号
file_names = dir('*.csv'); %读取所有的.csv文件tic;  % tic和toc配合使用能够返回程序运行时间
bar = waitbar(0,'计算中...');
for j = 1:length(file_names) %逐一读取文件data{j} = csvread(file_names(j).name); %依次读取csv格式的数据str=['计算中...',num2str(100*j/length(file_names)),'%'];    % 百分比形式显示处理进程,不需要删掉这行代码就行waitbar(j/length(file_names),bar,str) 
end
toc;

 2.3.2提取特征

%% %% 提取时域特征值
filename = data;
f = struct;
level = 3;                            %  提前设置存储数据结构
m =size(filename,2);
tic;  % tic和toc配合使用能够返回程序运行时间
bar = waitbar(0,'计算中...');
for i = 1:m                                            % 读入通道1的轴承振动信号for j = 1:7 data = filename{1,i}(:,j);                          % 需要置于数据文件目录下运[C,L] = wavedec(data,level,'sym6');               % 小波分解降噪A =  wrcoef('a',C,L,'sym6',level);% 重构尺度3下的近似小波部分% % 时域特征N = length(A);p1 = mean(A); %均值y = A-p1;p2 = sqrt(sum(y.^2)/N); %均方根值,又称有效值(!)p3 = (sum(sqrt(abs(y)))/N).^2; %方根幅值(!)p4 = sum(abs(y))/N; %绝对平均值p5 = sum(y.^3)/N; %歪度p6 = sum(y.^4)/N; %峭度p7 = sum((y).^2)/N; %方差p8 = max(A);%最大值p9 = min(A);%最小值 p10 = p8-p9;%峰峰值feature_1.p1(i,j) = p1;feature_1.p2(i,j) = p2;feature_1.p3(i,j) = p3;feature_1.p4(i,j) = p4;feature_1.p5(i,j) = p5;feature_1.p6(i,j) = p6;feature_1.p7(i,j) = p7;feature_1.p8(i,j) = p8;feature_1.p9(i,j) = p9;feature_1.p10(i,j) = p10;%%以上都是有量纲统计量,以下是无量纲统计量f1 = p2/p4; %波形指标f2 = p8/p2; %峰值指标  f3 = p8/p4; %脉冲指标f4 = p8/p3; %裕度指标f5 = p6/((p2)^4); %峭度指标feature_1.f1(i,j) = f1;feature_1.f2(i,j) = f2;feature_1.f3(i,j) = f3;feature_1.f4(i,j) = f4;feature_1.f5(i,j) = f5;%  频域特征值提取fs =20480;n=0:N-1;freq=n*fs/N; f=abs(fft(A,N)*2/N);    freq=freq(1:N/2)';x=f(1:N/2);  %  频率幅值freq=freq(1:N/2);  %  频率值s1=mean(x); %平均频率s2=sum(freq.*x)/sum(x);%重心频率s3=sqrt(sum((freq.^2).*x)/sum(x));%频率均方根s4=sqrt(sum(((freq-s2).^2).*x)/sum(x));%频率标准差s5 = f(387,1);feature_1.s1(i,j) = s1;feature_1.s2(i,j) = s2;feature_1.s3(i,j) = s3;feature_1.s4(i,j) = s4;feature_1.s5(i,j) = s5;      
%    小波bao能量值wpt=wpdec(A,level,'db4');        %进行3层小波包分解E = wenergy(wpt); %    提取第三层的小波能量值       feature_1.t1(i,j) = E(:,1);feature_1.t2(i,j) = E(:,2);feature_1.t3(i,j) = E(:,3);feature_1.t4(i,j) = E(:,4);feature_1.t5(i,j) = E(:,5);feature_1.t6(i,j) = E(:,6);feature_1.t7(i,j) = E(:,7);feature_1.t8(i,j) = E(:,8);%         显示进度str=['计算中...',num2str(100*i/m),'%'];    % 百分比形式显示处理进程,不需要删掉这行代码就行waitbar(i/m,bar,str); end
end
toc; 
% 保存数据
clearvars -except feature_1   filename  signal  T   %清除除DATA外的所有变量

2.3.3特征矩阵构建


% save('data.mat');
% 数据集构建(列为特征,行为样本数目
for i =1:7l(:,i) = feature_1.p1(:,i) ;l(:,i+7) = feature_1.p2(:,i);l(:,i+14) = feature_1.p3(:,i)  ;l(:,i+21) = feature_1.p4(:,i)  ;l(:,i+28) = feature_1.p5(:,i)  ;l(:,i+35) = feature_1.p6(:,i)  ;l(:,i+42) = feature_1.p7(:,i)  ;l(:,i+49) = feature_1.p8(:,i)  ;l(:,i+56) = feature_1.p9(:,i)  ;l(:,i+63) = feature_1.p10(:,i)  ;l(:,i+70) = feature_1.f1(:,i)  ;l(:,i+77) = feature_1.f2(:,i)  ;l(:,i+84) = feature_1.f3(:,i)  ;l(:,i+91) = feature_1.f4(:,i)  ;l(:,i+98) = feature_1.f5(:,i)  ;l(:,i+105) = feature_1.s1(:,i)  ;l(:,i+112) = feature_1.s2(:,i)  ;l(:,i+119) = feature_1.s3(:,i)  ;l(:,i+126) = feature_1.s4(:,i)  ;l(:,i+135) = feature_1.t1(:,i)  ;l(:,i+140) = feature_1.t2(:,i)  ;l(:,i+147) = feature_1.t3(:,i)  ;l(:,i+154) = feature_1.t4(:,i)  ;l(:,i+161) = feature_1.t5(:,i)  ;l(:,i+168) = feature_1.t6(:,i)  ;l(:,i+175) = feature_1.t7(:,i)  ;l(:,i+182) = feature_1.t8(:,i)  ;
end 
% 

2.3.4特征筛选

特征筛选思路:将剩余使用寿命标签与特征进行相关性筛选,选取相关性高的特征指标,选取阈值为0.8.

%% 降维  
T = (315:-1:1)';
l=l1;
for f= 1:size(l,2)Ti(:,f) = normalize(l(:,f)); d(1,f) = corr(T,Ti(:,f),'type','Spearman');
end
% 相关性系数d = (abs(d));           %   将相关系数绝对值e= sort(d);             %   排列特征值的相关性大小r4=find(d>0.8);main_feature  = d(find(d>=0.8));
%    % ±0.80-±1.00  高度相关   M = length(main_feature);[~,I] = ismember(main_feature,d);         %      提取高度相关的特征值for k = 1:M  p = I(1,k);value(:,k) = l(:,p);                       %    提取降维特征  end   

2.3.5神经网络实现(读取未经过筛选的特征数据集)

%%数据集降维提取 相关性较高的特征值。
clear
clc
load('D1.mat')
life = (314:-1:0)';
life1 = (314:-1:0)';
life  = [life;life1];
life  = [life;life1];
life  = [life;life1];
life  = [life;life1];for f= 1:size(C1,2)Ti(:,f) = normalize(C1(:,f)); d(1,f) = corr(life,Ti(:,f),'type','Spearman');end
% 相关性系数d = abs(d);           %   将相关系数绝对值[j main_feature] = find(d>=0.8);
%    % ±0.80-±1.00  高度相关   M = length(main_feature);for k = 1:M  p = main_feature(1,k);c1(:,k) = C1(:,p);    %    提取降维特征c2(:,k) = C2(:,p);c3(:,k) = C3(:,p);c4(:,k) = C4(:,p);c5(:,k) = C5(:,p);c6(:,k) = C6(:,p); L1(:,k) = l1(:,p);L2(:,k) = l2(:,p);L3(:,k) = l3(:,p);L4(:,k) = l4(:,p);L5(:,k) = l5(:,p);L6(:,k) = l6(:,p);end   trainx = c1;
trainy = life;testx = L1;
testy = life1;
%% 创建Elman神经网络% 包含15个神经元,训练函数为traingdx
net=elmannet(1:2,15,'traingdx');% 设置显示级别
net.trainParam.show=1;% 最大迭代次数为2000次
net.trainParam.epochs=2000;% 误差容限,达到此误差就可以停止训练
net.trainParam.goal=0.00001;% 最多验证失败次数
net.trainParam.max_fail=5;% 对网络进行初始化
net=init(net);%% 网络训练%训练数据归一化
[trainx1, st1] = mapminmax(trainx');
[trainy1, st2] = mapminmax(trainy');% 测试数据做与训练数据相同的归一化操作
testx1 = mapminmax('apply',testx',st1);
testy1 = mapminmax('apply',testy',st2);% 输入训练样本进行训练
[net,per] = train(net,trainx1,trainy1);%% 测试。输入归一化后的数据,再对实际输出进行反归一化% 将训练数据输入网络进行测试
train_ty1 = sim(net, trainx1);
train_ty = mapminmax('reverse', train_ty1, st2);% 将测试数据输入网络进行测试
test_ty1 = sim(net, testx1);
test_ty = mapminmax('reverse', test_ty1, st2);%% 显示结果
figure(3)
x=1:length(test_ty);% 显示真实值
plot(x,testy,'b-');
hold on
% 显示神经网络的输出值
plot(x,test_ty,'r--')legend('真实值','Elman网络输出值')
title('测试数据的测试结果');mae1=mean(abs(test_ty - testy'));
rmse1 = sqrt(mean((test_ty - testy').^2)); 
%% 可视化训练及预测结果(过于细致化)% 显示训练数据的测试结果
% figure(1)
% x=1:length(train_ty);
% 
% % 显示真实值
% plot(x,trainy,'b-');
% hold on
% % 显示神经网络的输出值
% plot(x,train_ty,'r--')
% 
% legend('真实值','Elman网络输出值')
% title('训练数据的测试结果');% 显示残差
% figure(2)
% plot(x, train_ty - trainy)
% title('训练数据测试结果的残差')
% 
% % 显示均方误差
% mse1 = mse(train_ty - trainy);
% fprintf('    mse_train = \n     %f\n', mse1)
% 
% % 显示相对误差
% disp('    训练数据相对误差:')
% fprintf('%f  ', (train_ty - trainy)./trainy );
% fprintf('\n')% figure(3)
% x=1:length(test_ty);
% 
% % 显示真实值
% plot(x,testy,'b-');
% hold on
% % 显示神经网络的输出值
% plot(x,test_ty,'r--')
% 
% legend('真实值','Elman网络输出值')
% title('测试数据的测试结果');
% 
% % % 显示残差
% % figure(4)
% % plot(x, test_ty - testy)
% % title('测试数据测试结果的残差')
% 
% % 显示均方误差
% 
% mse2 = mse(test_ty - testy);
% rmse1 = sqrt(mean((test_ty - testy').^2)); 
% % fprintf('    mse_test = \n     %f\n', mse2)
% % % 显示相对误差
% % disp('    测试数据相对误差:')
% % fprintf('%f  ', (test_ty - testy)./testy );
% % fprintf('\n')
% 
% % % 保存相对误差
% % test_re = test_ty - testy;
% % train_re = train_ty - trainy;
% % 
% % test_error = (test_ty - testy)./testy;
% % train_error = (train_ty - trainy)./trainy;
% 

数据集表现形式

数据集的预测结果


http://chatgpt.dhexx.cn/article/YJIK14d9.shtml

相关文章

通过模拟退火改进的Elman神经网络(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 神经网络是一个庞大的体系和概念,根据处理信息的不同方式来区分不同的network。比如根据处理信息结果的传递方向&am…

基于遗传算法优化的Elman神经网络数据预测-附代码

基于遗传算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于遗传算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于遗传优化的Elman网络5.测试结果6.参考文献7.Matlab代码 摘要:针…

【预测模型-ELAMN预测】基于海鸥算法优化ELMAN神经网络实现数据回归预测

1 简介 风能,作为一种重要,有潜力,无污染,可再生、可持续的能源,已经成为全球发电最为迅速的能源之一,越来越受到世界各国的青睐。近年来,为缓解能源短缺问题,改善环境,实现经济乃至人类的可持续发展,世界各国纷纷大力发展风能资源。然而,在实际操作中,风能固有的波动性和间歇…

MATLAB神经网络应用之Elman神经网络

Elman神经网络通常由输入层、隐含层和输出层构成,它存在从隐含层的输出到隐含层输入的反馈。这种反馈连接的结构使得被训练后不仅能识别和产生空域模式,还能够识别和产生时域模式,在此只介绍创建Elman网络的newelm函数,该函数用于…

基于粒子群算法优化的Elman神经网络数据预测-附代码

基于粒子群算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于粒子群算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于粒子群优化的Elman网络5.测试结果6.参考文献7.Matlab代码 摘要&#x…

elman神经网络的实现

在看文章时,一篇文章提到了使用elman神经网络来对癫痫病人的脑电信号与正常人的脑电信号进行区分,并且取得了较好的分类结果。于是就想自己写一个elman神经网络demo看看效果。 elman神经网络和感知机的差别通过下面的图片可以很明显的看出哪里不一样&am…

【预测模型-ELAMN预测】基于遗传算法优化ELMAN神经网络实现数据回归预测matlab代码

1 简介 风能,作为一种重要,有潜力,无污染,可再生、可持续的能源,已经成为全球发电最为迅速的能源之一,越来越受到世界各国的青睐。近年来,为缓解能源短缺问题,改善环境,实现经济乃至人类的可持续发展,世界各国纷纷大力发展风能资源。然而,在实际操作中,风能固有的波动性和间歇…

【预测模型】基于Elman神经网络预测电力负荷matlab代码

​1 简介 为提高甘肃电网负荷预测精度,提出了一种基于神经网络的负荷预测方法.针对甘肃电力系统负荷数据的非线性和动态特性,在多层前向BP网络中引入特殊关联层,形成有"记忆"能力的Elman神经网络,从而可以映射系统的非线性和动态特性.在网络训练算法中,采用自适应学…

粒子群算法优化BP和Elman神经网络-matlab源码

粒子群优化算法是一种智能优化算法,又称微粒群算法,它通过模拟自然界鸟群捕食和鱼群捕食的过程。通过群体中的协作寻找到问题的全局最优解。 收敛性的数学证明帮助了PSO的发展和应用,但此内分析具有很大的局限性。为PSO加入正交学习后&#…

基于鲸鱼算法优化的Elman神经网络数据预测-附代码

基于鲸鱼算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于鲸鱼算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于鲸鱼优化的Elman网络5.测试结果6.参考文献7.Matlab代码 摘要:针…

基于小波Elman神经网络的短期风电功率预测

风力发电在全球范围内快速发展,装机容量逐年增加,截止2013 年底,中国风电新增装机容量约 16.1GW,较 2012 年的 12.96GW 大幅提高了 24%,中国风电累计装机已超过 90GW。 风力发电并网运行是实现大规模风能发利用的有效途径。但是与常规能源不…

基于灰狼算法优化的Elman神经网络数据预测

基于灰狼算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于灰狼算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于灰狼优化的Elman网络5.测试结果6.参考文献7.Matlab代码 摘要:针…

Elman神经网络

newelm()函数: clear ; close all; clc %原始数据 data[0.4413,0.4707,0.6953,0.8133;...0.4379,0.4677,0.6981,0.8002;...0.4517,0.4725,0.7006,0.8201;...0.4557,0.4790,0.7019,0.8211;...0.4601,0.4811,0.7101,0.8298;...0.4612,0.4845,0.7188,0.8312;...0.4615,…

Elman神经网络与自适应共振网络(ART)

这几天在回过头看一些比较基础的东西,发现了两个早期研究的神经网络,Elman与ART网络,类似于上世纪80年代的hopfield神经网络,BM/RBM/DBN,RBF,SOM,以及同时期的SVM算法等等,虽然那个时…

Elman神经网络原理

Elman神经网络 近期开题,阅读到了一篇文章关于故障诊断的,其中用到了Elman神经网络,具体是结合EMD、PCA-SOM的Elman的性能评估/预测故障诊断,对Elman神经网络有点陌生,网上资源也讲的特别杂,来做个汇总Int…

【神经网络第一期】Elman神经网络基本原理

1. Elman神经网络概述 根据神经网络运行过程中的信息流向,可将神经网络可分为前馈式和反馈式两种基本类型。前馈式网络通过引人隐藏层以及非线性转移函数可以实现复杂的非线性映射功能。但前馈式网络的输出仅由当前输入和权矩阵决定,而与网络先前的输出…

回归预测 基于ELMAN递归神经网络预测及其matlab代码实现

文章目录 1. ELMAN神经网络的简介和算法描述1.1 Elman网络介绍1.2 Elman结构组成 1.3 ELMAN训练界面的参数解读2. 建立ELMAN神经网络的步骤3. 编写MATLAB代码4. ELMAN程序运行结果4.1 各层的神经元个数的确定过程4.2 预测值和真实值的误差计算(SSE、MAE、MSE、RMSE、…

Elman神经网络介绍以及Matlab实现

Elman神经网络介绍 1.特点 Elman神经网络是一种典型的动态递归神经网络,它是在BP网络基本结构的基础上,在隐含层增加一个承接层,作为一步延时算子,达到记忆的目的,从而使系统具有适应时变特性的能力,增强了…

数据库命名规范--通用

分段式的 1.1 基本命名原则 以下基本原则适用于所有数据库对象命名,如无特别说明则为强制规范。规范:遵循行业规范 当有相关国家/行业强制性数据结构标准规范存在时,用于存储某业务数据的业务表在表名命名上原则上应该遵从标准规定&#xf…

数据库命名规范

数据库命名规范 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 开发工具与关键技术:SQL Server 2014 Management Studio 作者:朱海恩 撰写时间:2019年7月12日 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~…