m基于GRNN广义回归神经网络的飞机发动机剩余寿命预测matlab仿真,训练集采用C-MAPSS数据集

1.算法描述

       GRNN建立在非参数核回归基础上,以样本数据为后验条件,通过执行诸如Parzen非参数估计,从观测样本里求得自变量和因变量之间的联结概率密度函数之后,直接计算出因变量对自变量的回归值。GRNN不需要设定模型的形式,但是其隐回归单元的核函数中有光滑因子,它们的取对网络有很大影响,需优化取值。GRNNb论具有良好的函数逼近性能,而且因为其网络训练更为方便,因此,GRNN在信号过程、结构分析、控制决策系统、金融领域、生物工程领域等各个科学和工程领域得到了广泛的应用。

 

        广义回归神经网络的理论基础是非线性核回归分析,非独立变量y相对于独立变量x的回归分析实际上是计算具有最大概率值的y。设随机变量xy的联合概率密度函数为f (x ,y),已知x的观测值为X,则y相对于X的回归,即条件均值为:

 

 

 

 

对于未知的概率密度函数f (x, y),可由xy的观测样本经非参数估计得:

 

 

 

 

 

 

       GRNN通常被用来进行函数逼近。它具有一个径向基隐含层和一个特殊的线性层。第一层和第二层的神经元数目都与输入的样本向量对的数目相等。GRNN结构如图所示,整个网络包括四层神经元:输入层、模式层、求和层与输出层。

 

 

 

 

       输入层的神经元数目与学习样本中输入向量的维数m相等,每个神经元都是一个简单的分布单元,这些神经元直接将输入变量传递到隐含层中。

 

       C-MAPSS Data Set里面有一个read me txt文件。training 是给建模用的。 test rul 是给 建模后验证用的。 每个 test 里面都有100组情况  对应的 rul里面有 100个数值。 rul 里面的数值就是真实值。 建模之后 跑test的数据 应该 给出接近rul的数值

 

1.1数据分析

 

1)  unit number

 

2)  time, in cycles

 

3)  operational setting 1

 

4)  operational setting 2

 

5)  operational setting 3

 

6)  sensor measurement  1

 

7)  sensor measurement  2

 

...

 

26) sensor measurement  26

 

数据第一列是机器的编号,第二列是每个机器的运行的时间序列标号,3~5是对应的设置,6~最后一列是传感器的测量值。

 

2.仿真效果预览

matlab2022a仿真结果如下:

 

 

 

 

 

 

3.MATLAB核心程序

 

%%
%Step1
STR        = 1;%选择数据标号1,2,3,4
Name_Train = ['data\00',num2str(STR),'\','train_FD00',num2str(STR),'.txt'];
Name_RUL   = ['data\00',num2str(STR),'\','RUL_FD00',num2str(STR),'.txt'];
%读取数据
Data_Train = load(Name_Train);
Data_RUL   = load(Name_RUL); 
 
%%
%Step2
%计算每个机器的时间
%得到机器编号
Mach_No = unique(Data_Train(:,1));
for i = 1:length(Mach_No)
    Index        = find(Data_Train(:,1) == i);  
    %平滑预处理
    used         = [7,8,9,12,13,14,16,17,18];
    tmps         = Data_Train(Index,used);
    [R,C]        = size(tmps);
    dout         = zeros(R,C);
    for mm = 1:C
        dout(:,mm) = [func_smooth(tmps(:,mm),32)]'; 
    end
    Mach_Info{i} = dout; 
    RUL_Train(i) = length(Index);  
end
figure;    
subplot(121);
plot(Data_Train(find(Data_Train(:,1) == 1),7));
title('信号预处理之前');
subplot(122);
plot(Mach_Info{1}(:,1));
title('信号预处理之后');
%%
%Step3
%特征提取
P = [];
T = [];
for i = 1:length(Mach_No)
    tmps = Mach_Info{i};
    %提取当前矩阵的特征
    Y  = func_pca(tmps',1);
    Y  = Y';
    for j = 1:length(Y)
        P = [P;Mach_Info{i}(j,1:6),Y(j,:)];
        T = [T;(RUL_Train(i)-j)];
    end
end
%%
%Step4
%使用神经网络进行训练
%%归一化处理
%对pt矩阵进行归一化处理                
%GRNN网络训练
net = newgrnn(P',T',5.1);
save train_net.mat net

 

  

 

posted @ 2023-03-07 19:12  我爱C编程  阅读(70)  评论(0编辑  收藏  举报