先前的代码如下,求高手指点。。。
clc
clear
close all
%---------------------------------------------------
% 产生训练样本与测试样本
tic,
dd=load('data.txt');
%数据归一化
A=min(dd);
C=max(dd);
for i=1:length(dd)
aa(i)=(dd(i)-A)/(C-A);
end
dd=aa;
p=1;
for i=1:1:100
for j=p:10+p-1
n1(i,j-p+1)=dd(j);
x1(i,1)=dd(j+1);
end
p=p+1;
end %d是1-2001,行向量
n2=[];x2=[];
q=1;
for i=1:1:40
for j=q:10+q-1
n2(i,j-q+1)=dd(j+100);
x2(i,1)=dd(j+100+1);
end
q=q+1;
end
xn_train = n1'; % 训练样本,每一列为一个样本
dn_train = x1'; % 训练目标,行向量
xn_test = n2'; % 测试样本,每一列为一个样本
dn_test = x2'; % 测试目标,行向量
%---------------------------------------------------
% 函数接口赋值
NodeNum = 12; % 隐层节点数
TypeNum = 1; % 输出维数
p1 = xn_train; % 训练输入
t1 = dn_train; % 训练输出
Epochs = 2000; % 训练次数
P = xn_test; % 测试输入
T = dn_test; % 测试输出(真实值)
%---------------------------------------------------
% 设置网络参数
TF1 = 'logsig';TF2 = 'purelin';
net = newff(minmax(p1),[NodeNum TypeNum],{TF1 TF2},'trainlm');
net.trainParam.epochs = Epochs; % 最大训练次数
net.trainParam.goal = 1e-8; % 最小均方误差
net.trainParam.min_grad = 1e-20; % 最小梯度
net.trainParam.show = 200; % 训练显示间隔
net.trainParam.time = inf; % 最大训练时间
%---------------------------------------------------
% 训练与测试
net = train(net,p1,t1); % 训练
toc
X = sim(net,P); % 测试 - 输出为预测值
%---------------------------------------------------
% 结果作图
e = sum((dn_test-X).^2) % 测试误差的平方和
plot(1:length(n2),x2,'r+:',1:length(n2),X,'bo:')
title('+为真实值,o为预测值')


雷达卡



京公网安备 11010802022788号







