⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 paper0.m

📁 对数据进行预处理
💻 M
字号:
%PCA_BP神经网络 2008.12.8 
%采用先主成分分析取得主元,有12个变为8个。后用BP神经网络预测。结果
%数据拟合
clf reset; 
close all; 
clear; 
clc; 
echo on;

%-------------------------------------------------------------------
load paperdata;
beishao3=paperdata(:,1:10);
%数据获取,预处理。beishao3是一个355*12的矩阵。355个样本。

%样本数据归一化
%beishao3_G = beishao3./(ones(size(beishao3,1),1)*sqrt(diag(beishao3'*beishao3))');
%法二
[m,n]=size(beishao3);
for i=1:n
    beishao3_G(:,i)=0.1+(beishao3(:,i)-min(beishao3(:,i)))/(max(beishao3(:,i))-min(beishao3(:,i)))*(0.9-0.1);
end
%beishao3_G=zscore(beishao3);
%-------------------------------------------------------------------
%对数据进行princomp主成分分析

% [coefs,scores,variances,t2] = princomp(beishao3_G(:,1:8));
% 
% zcf = beishao3_G(:,1:8)*coefs;
% 
% 
% %-------------------------------------------------------------------
% % 选择的主成分占整个的百分比
% percent_explained = 100*variances/sum(variances);
% pareto(percent_explained)
% title('筛选出的主成分');
% xlabel('Principal Component');
% ylabel('Variance Explained (%)');
% legend('主成分个数','每一个百分比',1);

%%-------------------------------------------------------------------
%%选择训练+测试样本
sample_data = beishao3_G(:,1:5);

%-------------------------------------------------------------------
% 利用BP网络实现函数逼近
%NEWFF--生成一个新的前向神经网络
%TRAIN---对BP网络进行训练
%SIM----对BP网络进行仿真

%-------------------------------------------------------------------
% 选取训练样本加测试样本 
%弱精品位

myTraindata = sample_data(1:250,:);%选取的测试样本数据
P = myTraindata'; 
T = beishao3_G(1:250,9)';%T为训练样本弱精品位的目标输出

myTestdata = sample_data(251:353,:);%选取的训练样本数据
p1 = myTestdata';
t1 = beishao3_G(251:353,9)';%t1为训练样本的目标输出

%———————————————————————————————————————
%画出训练样本数据及目标输出
i=1:length(myTraindata);

%创建BP神经网络
%net=newff(minmax(P),[6 14 1],{'purelin','tansig','purelin'},'trainoss');
net = newff(minmax(P),[10 1],{'tansig','purelin'},'trainscg');

%———————————————————————————————————————
% net.trainParam.epochs=2500;
% %Maximum number of epochs to train
% net.trainParam.goal=1e-4;
% %Performance goal
% net.trainParam.mu=0.005;
% %Marquardt adjustment parameter
% net.trainParam.mu_dec=0.1;
% %Decrease factor for mu
% net.trainParam.mu_inc=5;
% %Increase factor for mu
% net.trainParam.mu_max=1e-10;
% %Maximum value for mu
% net.trainParam.max_fail=10;
% %Maximum validation failures
% net.trainParam.mem_reduc=1;
% %Factor to use for memory/speed tradeoff
% net.trainParam.min_grad=1e-10;
% %Minimum performance gradient
% net.trainParam.show=100;
% %Epochs between displays (NaN for no displays)
% net.trainParam.time=inf;
% %Maximum time to train in seconds

%———————————————————————————————————————
%神经网络参数设置
% %net.performFcn='sse';
% %net.trainFcn = 'trainlm';%用这个的结果比较好
%net.trainFcn = 'trainscg';
%net.trainFcn = 'trainbr'; 
net.trainParam.goal=1e-3;
net.trainParam.show=100;
net.trainParam.lr=0.9;
net.trainParam.epochs=3000;
net.trainParam.Mu_max=1e-12;
net.trainParam.min_grad=1e-10;
%%%%%%%%%%%%%%%%%%%%%%%%下面一句不懂的话可以参考helpnet.trainParam.mc里面有说明
net.trainParam.mc=0.9;          
net.trainParam.mem_reduc=1;

%———————————————————————————————————————
% 重新初始化网络
net = init(net);            

%———————————————————————————————————————
% 对BP神经网络进行训练
[net,tr] = train(net,P,T);

%———————————————————————————————————————
% 对BP神经网络进行仿真分析
Yn=sim(net,P);

%———————————————————————————————————————
% 恢复被归一化的数据
%[Y]=MAPMINMAX(Yn); 

%———————————————————————————————————————
%计算均方误差
e=sqrt((Yn-T).^2)';
ee = mean(e);
MSE1 =  (1/(300-1))*sum((Yn-T).^2)';

%———————————————————————————————————————
%神经网络训练后的输出结果
%画图描绘仿真结果
figure;
subplot(2,1,1)
plot(i,T,'b',i,Yn,'r');
title('BP神经网络的函数逼近结果');
xlabel('训练样本数据');
ylabel('训练结果');
legend('训练样本数据','训练结果',1);
subplot(2,1,2)
plot(i,e(i),'r');
title('训练误差曲线');
xlabel('训练样本个数');
ylabel('误差');
legend('训练样本个数','误差',1);


%———————————————————————————————————————
%用未经训练的数据对训练成功的BP网络进行验证测试
%对测试数据进行归一化处理
%tramnmx:利用预先计算的最大和最小值对数据进行变换
%p1n=tramnmx(p1,minp,maxp);
%对变换后的测试数据进行仿真
y = sim(net,p1);

% 将仿真结果还原成原始数据
%[y]=postmnmx(yn); 

%———————————————————————————————————————
%画图
figure;
j=1:length(myTestdata);
subplot(2,1,1)
plot(j,t1,'b',j,y,'r');
title('BP神经网络的函数逼近结果检验');
xlabel('测试样本数据');
ylabel('测试结果');
legend('测试样本数据','测试结果',1);
E(j)=sqrt((y(j)-t1(j)).^2)';
EE = mean(E);
MSE = (1/52)*sum((y-t1).^2)';
subplot(2,1,2)
plot(j,E(j),'r')
title('测试误差曲线');
xlabel('测试样本个数');
ylabel('误差');
legend('测试样本个数','测试误差',1);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -