数学建模算法(三):神经网络

1.BP神经网络(葡萄酒

clear all; clc ;
data=[
    -1.17    -0.73    2.2    -0.6    -0.34    -0.4    -1.59    -0.15    0.09    -0.42
-0.16    -0.08    -0.75    -0.46    -0.7    -0.69    0.36    0.07    -0.48    0.26
0.46    3.37    -0.29    -0.46    0.37    -0.12    0.87    3.23    1.81    -0.36
0.15    0.15    1.35    -0.5    0.04    0    0.08    0.95    -0.64    0.68
0.18    0.78    -0.54    -0.3    0.62    -0.13    0.1    -1.01    -0.42    -0.31
1.72    -0.11    0.05    0.22    -0.38    0.52    -0.05    0.08    -0.25    -0.12
-0.05    -0.25    -0.12    -0.13    -1.58    -0.49    -2.38    -0.6    -0.97    -0.21
-1.36    -0.74    -0.86    -0.04    -0.67    -0.31    0.77    -0.89    0.72    -0.44
0.47    -0.02    -0.78    -0.56    2.58    -0.27    0.27    1.03    0.16    -0.35
-0.42    0.16    -0.63    -0.51    -0.31    -0.57    -0.29    0.08    -0.56    0.3
-0.89    -0.42    -0.86    -0.44    0.19    -0.23    1.45    -1.12    1.13    -0.46
0.65    -0.25    -0.48    0.26    -0.25    4.14    0.94    -0.94    -0.79    -0.46
1.41    -1.41    1.24    -0.62    -0.97    1.82    -0.38    -0.61    -0.33    -0.24
-1.45    -0.45    -0.32    -0.5    2.36    -0.14    -1.32    -0.46    3.08    -0.48
1.89    0.79    -0.81    0.63    0.14    -0.47    0.1    -1.17    1.55    4.72
-0.91    -1.05    0.09    -0.07    -2.37    -0.15    -2.16    -0.74    -1.34    -0.4
-1.52    -0.86    2.68    0    -0.2    -0.69    0.1    0.85    0.27    -0.03
-0.43    -0.72    -0.24    -0.34    -1.24    1.6    -0.76    -0.31    0.39    -0.51
0    -1.24    -0.85    -0.55    -0.08    -0.15    1.19    0.67    -0.42    -0.41
0.53    0.11    -0.64    0.02    0.83    -0.54    -0.89    -0.04    -0.19    -0.3
0.06    -0.43    1.78    -0.56    -0.17    -0.19    -0.26    -0.33    -0.11    -0.39
1.35    -0.54    1.25    0.31    0.34    -0.46    1.72    -0.57    -0.36    -0.04
-1.2    -0.47    -0.72    0.68    -0.07    -0.5    0.3    1.95    -0.84    0.01
1.02    1.23    -0.37    -0.3    0.71    -0.22    0.37    0.68    -0.17    -0.04
1.03    0.44    -0.54    0.28    -0.1    -0.03    0.77    0.64    -0.32    -0.3
-1.32    0.14    -0.21    -0.18    -0.02    -0.57    0.94    -0.89    -1.57    1.16
0.48    0.58    -0.1    4.74    0.47    -0.28    0.07    0.3    -0.52    -0.36
-0.51    2.02    -0.51    -0.03    0.77    -0.48    -0.31    -0.71    1.09    -0.49

];
p1=data(3,:);
p2=[
    data(1,:);
    data(10,:);
    data(16,:);
    data(23,:);
    data(2,:);
    data(26,:);
    data(7,:);
    data(21,:);
    data(28,:)
];
p3=[
    data(19,:);
    data(5,:);
    data(24,:);
    data(11,:);
    data(9,:);
    data(25,:);
    data(6,:)
];
p4=[
    data(22,:);
    data(27,:);
    data(13,:);

];
p=[p1;p2;p3;p4]';
pr=minmax(p);
goal=[
    ones(1,1),zeros(1,19);zeros(1,1),ones(1,9),zeros(1,10);
    zeros(1,10),ones(1,7),zeros(1,3);zeros(1,17),ones(1,3)
];
net=newff(pr,[7,4],{'logsig','logsig'}); %创建 一个bp 神经网络 %logsig 对数S形传递函数
net.trainParam.show = 10;  %显示训练迭代过程,是n个周期后显示一下收敛曲线的变化
net.trainParam.lr = 0.05;    %学习速率0.05
net.trainParam.goal = 1e-13;   %训练精度
net.trainParam.epochs = 900000;   %最大训练次数
net = train(net,p,goal);  %训练
x=[
    data(20,:);
    data(12,:);
    data(18,:);
    data(15,:);
    data(8,:);
    data(4,:);
    data(14,:);
    data(17,:)
    ]'; %待判断数据
y0=sim(net,p)
y=sim(net,x)

回归因子,运行结果:

y0 =

  Columns 1 through 9

    0.9999    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000
    0.0001    1.0000    1.0000    1.0000    0.9999    0.9999    1.0000    1.0000    0.9999
    0.0001    0.0000    0.0000    0.0000    0.0000    0.0001    0.0000    0.0001    0.0000
    0.0000    0.0001    0.0000    0.0000    0.0000    0.0000    0.0003    0.0000    0.0001

  Columns 10 through 18

    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000
    0.9999    0.0000    0.0000    0.0000    0.0001    0.0000    0.0000    0.0000    0.0000
    0.0002    0.9999    0.9999    0.9999    0.9998    0.9999    0.9999    0.9999    0.0007
    0.0000    0.0001    0.0000    0.0000    0.0000    0.0000    0.0001    0.0002    0.9997

  Columns 19 through 20

    0.0000    0.0000
    0.0002    0.0000
    0.0003    0.0001
    0.9998    0.9986


y =

    0.0000    0.0001    0.0000    0.3158    0.0000    0.0000    0.9968    0.0000
    0.7749    0.0000    0.2577    0.0463    0.9825    0.9996    0.9426    1.0000
    1.0000    0.9999    0.0011    0.0114    0.0002    0.0000    0.2173    0.0000
    0.0000    0.0000    0.1042    0.0251    0.0996    0.0004    0.0000    0.0001

>>

主成分因子数据运行结果 :

y0 =

  Columns 1 through 9

    0.9997    0.0000    0.0000    0.0001    0.0000    0.0000    0.0000    0.0000    0.0000
    0.0000    1.0000    1.0000    1.0000    1.0000    1.0000    1.0000    0.0000    0.0000
    0.0002    0.0000    0.0000    0.0001    0.0000    0.0000    0.0000    1.0000    1.0000
    0.0002    0.0001    0.0001    0.0001    0.0003    0.0000    0.0001    0.0000    0.0000

  Columns 10 through 18

    0.0000    0.0002    0.0000    0.0000    0.0001    0.0001    0.0000    0.0000    0.0000
    0.0000    0.0004    0.0000    0.0000    0.0000    0.0000    0.0001    0.0000    0.0000
    1.0000    1.0000    1.0000    1.0000    1.0000    1.0000    1.0000    1.0000    0.0001
    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.9997

  Columns 19 through 20

    0.0003    0.0002
    0.0001    0.0000
    0.0000    0.0000
    0.9999    0.9999


y =

    0.0004    0.0000    0.9993    0.0001    0.0000    0.0000    0.0000
    0.2758    0.2290    0.0016    0.0000    0.0000    0.0000    1.0000
    0.9994    0.9886    0.0243    0.0024    0.9986    0.9999    0.0000
    0.0000    0.0000    0.0000    0.9992    0.0129    0.0002    0.0000

 2.(重金属污染

clc,clear
load As a b c
data=[a';b'];
data=data';
data1=c;
k=rand(1,60501);
[m n]=sort(k);
%获取训练数据与预测数据
input_train=data(n(1:9900),:)';
output_train=data1(n(1:9900),:)';
input_test=data(n(9901:10000),:)';
output_test=data1(n(9901:10000),:)';
%数据归一化
[inputn,inputps]=mapminmax(input_train);
[outputn,outputps]=mapminmax(output_train);
%%bp训练%初始化网络结构
net=newff(inputn,outputn,100);
net.trainParam.show=30;
net.trainParam.epochs=300;%最大迭代次数
net.trainParam.lr=0.01;%学习速率
net.trainParam.goal=1e-6;
%网络训练
net=train(net,inputn,outputn);%%bp预测
%预测数据归一化?
inputn_test=mapminmax('apply',input_test,inputps);%网络预测输出
an=sim(net,inputn_test);%仿真
%网络输出反归一化
BPoutput=mapminmax('reverse',an,outputps);%结果分析
figure
plot(BPoutput,':og');
hold on
plot(output_test,'-*');
legend('预测输出','期望输出','fontsize',12)
title('BP?网络预测输出','fontsize',12)
xlabel('样本','fontsize',12)
ylabel('输出','fontsize',12)%预测误差
error=BPoutput-output_test;
figure
plot(error,'-*')
title('神经网络预测误差')
errorsum=sum(abs(error))
save data2 net inputps outputps
原文地址:https://www.cnblogs.com/pursuit1996/p/5149513.html