bp matlab预测结果差,BP神经网络 预测 精度差

我有76个数据,用BP神经网络来做预测,预测效果在这组数据上一直不好,但是其他数据上效果不错,请大家帮忙看看,是哪里出了问题?不甚感谢

%% I. 清空环境变量

clear all

clc

%% II. 训练集/测试集产生

%%

% 1. 导入数据

% load spectra_data.mat

filename1 = 'input76_gai.xlsx';

filename2 = 'output76_gai.xlsx';

input = xlsread(filename1); %读取输入参数

output=xlsread(filename2); %读取输入参数

%%

% 2. 随机产生训练集和测试集

temp = randperm(size(input,1));

% 训练集——65个样本

P_train = input(temp(1:65),:)';

T_train = output(temp(1:65),:)';

% 测试集——11个样本

P_test = input(temp(66:end),:)';

T_test = output(temp(66:end),:)';

N = size(P_test,2);

p_train=P_train;

p_test=P_test;

t_train=T_train;

%% IV. BP神经网络创建、训练及仿真测试

%%

% 1. 创建网络

net = feedforwardnet([4]);

%% 2. 设置训练参数

net.trainFcn='trainlm';

net.trainParam.epochs =15000;

net.trainParam.goal = 1e-4;

net.trainParam.lr = 0.05;

%%

net.divideFcn = '';           %清除'dividerand'。该函数把样本数据三分为训练集、验证集和测试集,默认比例是6:2:2。程序中清除该属性再训练:

%%

% 3. 训练网络

net = train(net,p_train,t_train);

%%

% 4. 仿真测试

t_sim = sim(net,p_test);

%%

T_sim=t_sim;

%% V. 性能评价

%%

perf=perform(net,p_train,t_train);

perf1=mse(net,p_train,t_train);

% 1. 相对误差error

relative_error = abs(T_sim - T_test)./T_test;

absolute_error=abs(T_sim - T_test);

%%

%  2. 决定系数R^2

R2 = (N .* sum(T_sim(1,:) .* T_test(1,:)) - sum(T_sim(1,:)) .* sum(T_test(1,:))).^2 / ((N .* sum((T_sim(1,:)).^2) - (sum(T_sim(1,:))).^2) .* (N .* sum((T_test(1,:)).^2) - (sum(T_test(1,:))).^2));

%%

% 3. 结果对比

result = [T_test' T_sim' absolute_error' relative_error'];

error_max=sortrows(abs(relative_error'),1,'descend');

[n3,m3]=size(output);

%%

ylabelname=["回弹"];

stringname=["测试集回弹预测结果对比"];

for i=1:m3

% 2. 决定系数R^2(B站公式)

R2(i) = (N .* sum(T_sim(i,:) .* T_test(i,:)) - sum(T_sim(i,:)) .* sum(T_test(i,:))).^2/((N .* sum((T_sim(i,:)).^2) - (sum(T_sim(i,:))).^2) .* (N .* sum((T_test(i,:)).^2) - (sum(T_test(i,:))).^2));

% 2. 决定系数R^2(书上公式)

R22(i)=1-(sum((T_test(i,:)-T_sim(i,:)).^2)/sum((T_test(i,:)-mean(T_test(i,:))).^2)) ;

%% VI. 绘图

figure

plot(1:N,T_test(i,:),'b:*',1:N,T_sim(i,:),'r-o')

legend('真实值','预测值')

xlabel('预测样本')

ylabel(ylabelname(i))

string = {stringname(i);['R^2=' num2str(R2(i))]};

title(string)

end

save netBP net;

a70cbf5f56cb187f20fb09bae08ed3de.gif

2021-1-18 10:46 上传

点击文件名下载附件

818 Bytes, 下载次数: 3

a70cbf5f56cb187f20fb09bae08ed3de.gif

2021-1-18 10:48 上传

点击文件名下载附件

713 Bytes, 下载次数: 3

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值