【小波能量BP】基于小波能量系数提取和BP神经网络的检测算法matlab仿真

1.软件版本

MATLAB2013b

2.算法理论

步骤1:小波能量系数提取的方法进行降维

    小波降维处理,将高维的数据转换为低维的数据。

    %对数据进行小波变换

    [C,L] = wavedec(data,p,'db3');

    ca8=appcoef(C,L,'db3',8);

    cd8=detcoef(C,L,8);

    cd7=detcoef(C,L,7);

    cd6=detcoef(C,L,6);

    cd5=detcoef(C,L,5);

    cd4=detcoef(C,L,4);

扫描二维码关注公众号,回复: 14382897 查看本文章

    cd3=detcoef(C,L,3);   

    cd2=detcoef(C,L,2);

    cd1=detcoef(C,L,1);

    %计算个数据的能量

    Fca8 = sqrt(sum(ca8'*ca8)/length(ca8));

    Fcd8 = sqrt(sum(cd8'*cd8)/length(cd8));

    Fcd7 = sqrt(sum(cd7'*cd7)/length(cd7));

    Fcd6 = sqrt(sum(cd6'*cd6)/length(cd6));

    Fcd5 = sqrt(sum(cd5'*cd5)/length(cd5));

    Fcd4 = sqrt(sum(cd4'*cd4)/length(cd4));

    Fcd3 = sqrt(sum(cd3'*cd3)/length(cd3));

    Fcd2 = sqrt(sum(cd2'*cd2)/length(cd2));  

    Fcd1 = sqrt(sum(cd1'*cd1)/length(cd1)); 

    %获得降维后的数据

    data2(:,i) = [Fcd1 Fcd2 Fcd3 Fcd4 Fcd5 Fcd6 Fcd7 Fcd8 Fca8 ];

    %去掉异常点之后的原数据

    Spectrum_energy2{i} = data;

    %保存小波变化后的每一层的数据

    Spectrum_energycd8{i} = cd8;

    Spectrum_energycd7{i} = cd7;

    Spectrum_energycd6{i} = cd6;   

    Spectrum_energycd5{i} = cd5;

    Spectrum_energycd4{i} = cd4;

    Spectrum_energycd3{i} = cd3;

    Spectrum_energycd2{i} = cd2;   

    Spectrum_energycd1{i} = cd1; 

这个部分计算小波变化之后每一层的能量,最后得到如下的仿真结果:

    从上面的仿真结果可知,维度变为了9维,这样可以方便的进行后期神经网络训练等操作。

步骤2:神经网络功能1

用光谱特征指数或者小波能量系数降维处理后的数据 来预测所给的相应的生理指标(数据中给出的是β-胡萝卜素)。建立预测模型,并按照前面所给的模型评价指标来对模型进行评价。

    这个步骤,首先需要对光谱信息进行降维处理,按步骤二的方法进行,然后进行神经网络训练:

for i = 1:c

    data3(:,i) = (data2(:,i)-min(data2(:,i)))/(max(data2(:,i)) - min(data2(:,i)));

end

P =  data3;

T =  (Beta_carotene-min(Beta_carotene))/(max(Beta_carotene)-min(Beta_carotene));

t1                      = clock;                              %计时开始

net                     = fitnet(65);

net.trainParam.epochs      = 1000;                              %设置训练次数

net.trainParam.goal        = 0.00001;                            %设置性能函数

net.trainParam.show       = 1;                                  %每10显示

net.trainParam.Ir          = 0.005;                              %设置学习速率

net                     = train(net,P,T);                        %训练BP网络

datat                    = etime(clock,t1);

Nets                    = net;

view(Nets);

%选择100个数据进行侧四

y = sim(net,P(:,1:100));

得到如下的仿真结果:

本系统采用的神经网络结构如下图所示:

    最后得到的预测结果和原始的数据如下所示:

步骤3:神经网络功能2

气象数据和化学指标中的数据建立模型,思路如下:数据中提供的是河南、四川和贵州三个省的气象数据和烟叶生理指标。这三个省由于气象因素影响,导致其烟叶香型不同,分别对应为浓香型,清香型和中间香型。我希望先找出化学指标中对香型影响最重要的因素,然后再看众多气象因素中哪个是决定香型的关键因素。

    首先根据论文中提供的主成分分析方法,获得关键影响因素,然后提取关键影响因素进行训练分类。

    最后的分类结果如下所示:

3.部分程序

clc;
clear;
close all;

RandStream.setDefaultStream(RandStream('mt19937ar','seed',1));
% 第二方面就是用本人所提供的气象数据和化学指标中的数据建立模型,
% 思路如下:数据中提供的是河南、四川和贵州三个省的气象数据和烟叶生理指标。
% 这三个省由于气象因素影响,导致其烟叶香型不同,分别对应为浓香型,清香型和中间香型。
% 我希望先找出化学指标中对香型影响最重要的因素,然后再看众多气象因素中哪个是决定香型的关键因素。

% 浓香型
load data\chemical\chemical_SCMC.mat %chemical_SCMC 
load data\chemical\chemical_SCTP.mat %chemical_SCTP 
% 清香型
load data\chemical\chemical_HNXC.mat %chemical_HNXC 
load data\chemical\chemical_HNNY.mat %chemical_HNNY 
% 中间香型
load data\chemical\chemical_GZBJ.mat %chemical_GZBJ 
load data\chemical\chemical_GZZY.mat %chemical_GZZY

%%
%先找出化学指标中对香型影响最重要的因素
%主成分分析,获得最为重要的几个影响因素
%设置者三种类型的训练目标分别为-1,0,1,作为训练目标值
%计算月平均值

% 浓香型
Tmp1    = [chemical_SCMC;chemical_SCTP];
[r1,c1] = size(Tmp1);
for i = 1:c1
    Type1(:,i) = Tmp1(:,i);
end

for i = 1:c1
    Type1s(:,i) = (Type1(:,i)-min(Type1(:,i)))/(max(Type1(:,i)) - min(Type1(:,i)));
end
% 清香型
Tmp2    = [chemical_HNXC;chemical_HNNY];
[r2,c2] = size(Tmp2);
for i = 1:c2
    Type2(:,i) = Tmp2(:,i);
end

for i = 1:c2
    Type2s(:,i) = (Type2(:,i)-min(Type2(:,i)))/(max(Type2(:,i)) - min(Type2(:,i)));
end


% 中间香型
Tmp3    = [chemical_GZBJ;chemical_GZZY];
[r3,c3] = size(Tmp3);
for i = 1:c3
    Type3(:,i) = Tmp3(:,i);
end

for i = 1:c3
    Type3s(:,i) = (Type3(:,i)-min(Type3(:,i)))/(max(Type3(:,i)) - min(Type3(:,i)));
end

%进行主成分分析,获得最佳的判决指标
%分别使用不同的参数指标进行训练
P0 =  [Type1s;
       Type2s;
       Type3s];

factor = func_pca(P0);
%获得几个主要的参数指标 
factor = sort(unique(factor));
 
%下面通过这几个主要的参数指标进行神经网络训练
%使用神经网络的相关结果,选择最佳的几个参数作为香型判断指标
%%%%%%%%%%%%%%%%%%%%%获得关键化学指标%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Pc =  [Type1s(:,factor);
       Type2s(:,factor);
       Type3s(:,factor);]';%分别使用不同的参数指标进行训练
Tc =  [0.2*ones(1,r1) 0.5*ones(1,r2) 1*ones(1,r3);];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 获得气候主要因素
clear Tmp1   Tmp2   Tmp3
clear Type1  Type2  Type3
clear Type1s Type2s Type3s
clear P0 factor

load data\Weather\Weather_SCHL.mat %Weather_SCHL 
load data\Weather\Weather_HNXC.mat %Weather_HNXC 
load data\Weather\Weather_HNNY.mat %Weather_HNNY 
load data\Weather\Weather_GZBJ.mat %Weather_GZBJ 
load data\Weather\Weather_GZZY.mat %Weather_GZZY 

% 浓香型
Tmp1    = [Weather_SCHL];
[r1,c1] = size(Tmp1);
for i = 1:c1
    Type1(:,i) = Tmp1(:,i);
end

for i = 1:c1
    Type1s(:,i) = (Type1(:,i)-min(Type1(:,i)))/(max(Type1(:,i)) - min(Type1(:,i)));
end
% 清香型
Tmp2    = [Weather_HNXC;Weather_HNNY];
[r2,c2] = size(Tmp2);
for i = 1:c2
    Type2(:,i) = Tmp2(:,i);
end

for i = 1:c2
    Type2s(:,i) = (Type2(:,i)-min(Type2(:,i)))/(max(Type2(:,i)) - min(Type2(:,i)));
end

% 中间香型
Tmp3    = [Weather_GZBJ;Weather_GZZY];
[r3,c3] = size(Tmp3);
for i = 1:c3
    Type3(:,i) = Tmp3(:,i);
end

for i = 1:c3
    Type3s(:,i) = (Type3(:,i)-min(Type3(:,i)))/(max(Type3(:,i)) - min(Type3(:,i)));
end

%进行主成分分析,获得最佳的判决指标
%分别使用不同的参数指标进行训练
P0 =  [Type1s;
       Type2s;
       Type3s];

factor = func_pca(P0);
%获得几个主要的参数指标 
factor = sort(unique(factor));
 
%下面通过这几个主要的参数指标进行神经网络训练
%使用神经网络的相关结果,选择最佳的几个参数作为香型判断指标 
%%%%%%%%%%%%%%%%%%%%%获得关键气候因素%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Pw =  [Type1s(:,factor);
       Type2s(:,factor);
       Type3s(:,factor);]';%分别使用不同的参数指标进行训练
Tw =  [0.2*ones(1,r1) 0.5*ones(1,r2) 1*ones(1,r3);];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%
%首先根据气候进行训练分类
%首先根据气候进行训练分类

%使用神经网络的相关结果,选择最佳的几个参数作为香型判断指标 
P =  Pw
T =  Tw;
%为了得到最为关键的几个指标,我们对12个指标分别进行训练测试分析,得到影响最精确的指标
%此部分神经网络代码无需变动,只需要修改内部的参数即可。

t1                      = clock;                              %计时开始
net                     = fitnet(54);
net.trainParam.epochs   = 1000;                               %设置训练次数
net.trainParam.goal     = 0.00001;                            %设置性能函数
net.trainParam.show     = 1;                                  %每10显示
net.trainParam.Ir       = 0.005;                               %设置学习速率
net                     = train(net,P,T);                     %训练BP网络
datat                   = etime(clock,t1);
Nets                    = net;
% view(Nets);

y = sim(net,P);  

figure;
stem(y,'r');hold on
plot(y,'b-.');hold on
plot(T,'b--','LineWidth',3);hold on
legend('预测数据(归一化)','实际数据(归一化)');
title('香型分类(根据气候进行分类)');



%%
%然后根据化学指标因素进行训练分析
%然后根据化学指标因素进行训练分析
%使用神经网络的相关结果,选择最佳的几个参数作为香型判断指标 
P =  Pc
T =  Tc;
%为了得到最为关键的几个指标,我们对12个指标分别进行训练测试分析,得到影响最精确的指标
%此部分神经网络代码无需变动,只需要修改内部的参数即可。

t1                      = clock;                              %计时开始
net                     = fitnet(34);
net.trainParam.epochs   = 1000;                               %设置训练次数
net.trainParam.goal     = 0.00001;                            %设置性能函数
net.trainParam.show     = 1;                                  %每10显示
net.trainParam.Ir       = 0.005;                               %设置学习速率
net                     = train(net,P,T);                     %训练BP网络
datat                   = etime(clock,t1);
Nets                    = net;
% view(Nets);

y = sim(net,P);  

 

A09-24

猜你喜欢

转载自blog.csdn.net/ccsss22/article/details/125882992