• 【小波能量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);

        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.部分程序

    1. clc;
    2. clear;
    3. close all;
    4. RandStream.setDefaultStream(RandStream('mt19937ar','seed',1));
    5. % 第二方面就是用本人所提供的气象数据和化学指标中的数据建立模型,
    6. % 思路如下:数据中提供的是河南、四川和贵州三个省的气象数据和烟叶生理指标。
    7. % 这三个省由于气象因素影响,导致其烟叶香型不同,分别对应为浓香型,清香型和中间香型。
    8. % 我希望先找出化学指标中对香型影响最重要的因素,然后再看众多气象因素中哪个是决定香型的关键因素。
    9. % 浓香型
    10. load data\chemical\chemical_SCMC.mat %chemical_SCMC
    11. load data\chemical\chemical_SCTP.mat %chemical_SCTP
    12. % 清香型
    13. load data\chemical\chemical_HNXC.mat %chemical_HNXC
    14. load data\chemical\chemical_HNNY.mat %chemical_HNNY
    15. % 中间香型
    16. load data\chemical\chemical_GZBJ.mat %chemical_GZBJ
    17. load data\chemical\chemical_GZZY.mat %chemical_GZZY
    18. %%
    19. %先找出化学指标中对香型影响最重要的因素
    20. %主成分分析,获得最为重要的几个影响因素
    21. %设置者三种类型的训练目标分别为-1,0,1,作为训练目标值
    22. %计算月平均值
    23. % 浓香型
    24. Tmp1 = [chemical_SCMC;chemical_SCTP];
    25. [r1,c1] = size(Tmp1);
    26. for i = 1:c1
    27. Type1(:,i) = Tmp1(:,i);
    28. end
    29. for i = 1:c1
    30. Type1s(:,i) = (Type1(:,i)-min(Type1(:,i)))/(max(Type1(:,i)) - min(Type1(:,i)));
    31. end
    32. % 清香型
    33. Tmp2 = [chemical_HNXC;chemical_HNNY];
    34. [r2,c2] = size(Tmp2);
    35. for i = 1:c2
    36. Type2(:,i) = Tmp2(:,i);
    37. end
    38. for i = 1:c2
    39. Type2s(:,i) = (Type2(:,i)-min(Type2(:,i)))/(max(Type2(:,i)) - min(Type2(:,i)));
    40. end
    41. % 中间香型
    42. Tmp3 = [chemical_GZBJ;chemical_GZZY];
    43. [r3,c3] = size(Tmp3);
    44. for i = 1:c3
    45. Type3(:,i) = Tmp3(:,i);
    46. end
    47. for i = 1:c3
    48. Type3s(:,i) = (Type3(:,i)-min(Type3(:,i)))/(max(Type3(:,i)) - min(Type3(:,i)));
    49. end
    50. %进行主成分分析,获得最佳的判决指标
    51. %分别使用不同的参数指标进行训练
    52. P0 = [Type1s;
    53. Type2s;
    54. Type3s];
    55. factor = func_pca(P0);
    56. %获得几个主要的参数指标
    57. factor = sort(unique(factor));
    58. %下面通过这几个主要的参数指标进行神经网络训练
    59. %使用神经网络的相关结果,选择最佳的几个参数作为香型判断指标
    60. %%%%%%%%%%%%%%%%%%%%%获得关键化学指标%%%%%%%%%%%%%%%%%%%%%%%%
    61. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    62. Pc = [Type1s(:,factor);
    63. Type2s(:,factor);
    64. Type3s(:,factor);]';%分别使用不同的参数指标进行训练
    65. Tc = [0.2*ones(1,r1) 0.5*ones(1,r2) 1*ones(1,r3);];
    66. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    67. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    68. %% 获得气候主要因素
    69. clear Tmp1 Tmp2 Tmp3
    70. clear Type1 Type2 Type3
    71. clear Type1s Type2s Type3s
    72. clear P0 factor
    73. load data\Weather\Weather_SCHL.mat %Weather_SCHL
    74. load data\Weather\Weather_HNXC.mat %Weather_HNXC
    75. load data\Weather\Weather_HNNY.mat %Weather_HNNY
    76. load data\Weather\Weather_GZBJ.mat %Weather_GZBJ
    77. load data\Weather\Weather_GZZY.mat %Weather_GZZY
    78. % 浓香型
    79. Tmp1 = [Weather_SCHL];
    80. [r1,c1] = size(Tmp1);
    81. for i = 1:c1
    82. Type1(:,i) = Tmp1(:,i);
    83. end
    84. for i = 1:c1
    85. Type1s(:,i) = (Type1(:,i)-min(Type1(:,i)))/(max(Type1(:,i)) - min(Type1(:,i)));
    86. end
    87. % 清香型
    88. Tmp2 = [Weather_HNXC;Weather_HNNY];
    89. [r2,c2] = size(Tmp2);
    90. for i = 1:c2
    91. Type2(:,i) = Tmp2(:,i);
    92. end
    93. for i = 1:c2
    94. Type2s(:,i) = (Type2(:,i)-min(Type2(:,i)))/(max(Type2(:,i)) - min(Type2(:,i)));
    95. end
    96. % 中间香型
    97. Tmp3 = [Weather_GZBJ;Weather_GZZY];
    98. [r3,c3] = size(Tmp3);
    99. for i = 1:c3
    100. Type3(:,i) = Tmp3(:,i);
    101. end
    102. for i = 1:c3
    103. Type3s(:,i) = (Type3(:,i)-min(Type3(:,i)))/(max(Type3(:,i)) - min(Type3(:,i)));
    104. end
    105. %进行主成分分析,获得最佳的判决指标
    106. %分别使用不同的参数指标进行训练
    107. P0 = [Type1s;
    108. Type2s;
    109. Type3s];
    110. factor = func_pca(P0);
    111. %获得几个主要的参数指标
    112. factor = sort(unique(factor));
    113. %下面通过这几个主要的参数指标进行神经网络训练
    114. %使用神经网络的相关结果,选择最佳的几个参数作为香型判断指标
    115. %%%%%%%%%%%%%%%%%%%%%获得关键气候因素%%%%%%%%%%%%%%%%%%%%%%%%
    116. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    117. Pw = [Type1s(:,factor);
    118. Type2s(:,factor);
    119. Type3s(:,factor);]';%分别使用不同的参数指标进行训练
    120. Tw = [0.2*ones(1,r1) 0.5*ones(1,r2) 1*ones(1,r3);];
    121. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    122. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    123. %%
    124. %首先根据气候进行训练分类
    125. %首先根据气候进行训练分类
    126. %使用神经网络的相关结果,选择最佳的几个参数作为香型判断指标
    127. P = Pw
    128. T = Tw;
    129. %为了得到最为关键的几个指标,我们对12个指标分别进行训练测试分析,得到影响最精确的指标
    130. %此部分神经网络代码无需变动,只需要修改内部的参数即可。
    131. t1 = clock; %计时开始
    132. net = fitnet(54);
    133. net.trainParam.epochs = 1000; %设置训练次数
    134. net.trainParam.goal = 0.00001; %设置性能函数
    135. net.trainParam.show = 1; %每10显示
    136. net.trainParam.Ir = 0.005; %设置学习速率
    137. net = train(net,P,T); %训练BP网络
    138. datat = etime(clock,t1);
    139. Nets = net;
    140. % view(Nets);
    141. y = sim(net,P);
    142. figure;
    143. stem(y,'r');hold on
    144. plot(y,'b-.');hold on
    145. plot(T,'b--','LineWidth',3);hold on
    146. legend('预测数据(归一化)','实际数据(归一化)');
    147. title('香型分类(根据气候进行分类)');
    148. %%
    149. %然后根据化学指标因素进行训练分析
    150. %然后根据化学指标因素进行训练分析
    151. %使用神经网络的相关结果,选择最佳的几个参数作为香型判断指标
    152. P = Pc
    153. T = Tc;
    154. %为了得到最为关键的几个指标,我们对12个指标分别进行训练测试分析,得到影响最精确的指标
    155. %此部分神经网络代码无需变动,只需要修改内部的参数即可。
    156. t1 = clock; %计时开始
    157. net = fitnet(34);
    158. net.trainParam.epochs = 1000; %设置训练次数
    159. net.trainParam.goal = 0.00001; %设置性能函数
    160. net.trainParam.show = 1; %每10显示
    161. net.trainParam.Ir = 0.005; %设置学习速率
    162. net = train(net,P,T); %训练BP网络
    163. datat = etime(clock,t1);
    164. Nets = net;
    165. % view(Nets);
    166. y = sim(net,P);

    A09-24

  • 相关阅读:
    将数据预处理嵌入AI模型的常见技巧
    牛客 ( 计算几何
    猫头虎博主赠书三期:《Go编程进阶实战: 开发命令行应用、HTTP应用和gRPC应用》
    C语言学习笔记
    电商独立站前端、后端、接口协议和电商API接口请求方式
    物联网各类数据如何轻松获取?秘诀就在定制文件推送服务
    Go基础语法:heap
    【Java SE】继承
    CentOS安装OpenNebula(二)
    【ElasticSearch】使用 Java 客户端 RestClient 实现对文档的查询操作,以及对搜索结果的排序、分页、高亮处理
  • 原文地址:https://blog.csdn.net/ccsss22/article/details/125882992