《量化投资:以MATLAB为工具》

MATLAB技术论坛

 找回密码
 注册账号
查看: 470|回复: 3
收起左侧

[提问] 编程BP算法的神经网络,同一个程序运行多次得到的R^2结果迥异,这是什么原因呢?

[复制链接]
发表于 2017-6-18 11:15:57 | 显示全部楼层 |阅读模式
      新人求助各位大神:先介绍下我的研究问题,使用3个自变量、1个因变量,通过神经网络运算找到之间的映射关系,从而建立一个预测实际工程造价的模型。现在的遇到的问题是,运行同一程序,多次得到的结果差距很大,R^2可以从0.1到0.9,请问这是什么原因呢?
      盼回复,感谢感谢!!


PS:附上我的程序代码

% 清空和载入变量
clear all
clc
load shizhengweihu_3.mat

% 随机生成训练和测试数据
temp=randperm(size(x,1));
P_train=x(temp(1:57),:)';
T_train=y(temp(1:57),:)';
P_test=x(temp(58:end),:)';
T_test=y(temp(58:end),:)';
N=size(P_test,2);

%% 设计bp算法神经网络

% 创建网络
P=P_train
T=T_train

n=4
net =newff(P,T,n);
% 设置训练参数
net.trainParam.epochs = 1000;
net.trainParam.goal = 1e-3;
net.trainParam.lr = 0.01;

net=train(net,P_train,T_train);

%%保存得到的bp模型net
save curve_filt_bp_shizhengweihu_2 net

%% 测试
% 测试数据
xx=P_test

% 加载训练模型 上一步训练得到的net保存在design_shizhengweihu_rfb.m中
load curve_filt_bp_shizhengweihu_2 net

% 网络仿真
yy=sim(net,xx)

%% 评估参数
% 相对误差
error_bp = abs(yy - T_test)./T_test;
% 决定系数
R2_bp = (N * sum(yy .* T_test) - sum(yy) * sum(T_test))^2 / ((N * sum((yy).^2) - (sum(yy))^2) * (N * sum((T_test).^2) - (sum(T_test))^2))

%% 绘图
% 仿真得到的拟合数据与原始值相比
figure(1)
plot(1:N,T_test,'b:*',1:N,yy,'r:+')

% 图例 标题
legend('实际数据','拟合数据')
xlabel('测试数据编码');ylabel('实际造价')
string = {'实际造价预测结果对比(BP)';['R^2=' num2str(R2_bp) '(BP)'];['隐含层节点数=' num2str(n)]};
title(string)
发表于 2017-6-18 12:50:57 | 显示全部楼层
这是正常的吧,,,数据没啥规律的话,有波动是正常的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-18 14:46:59 | 显示全部楼层
这个波动了太大了吧,我看教程光谱分析那个,运算多次,结果都差别不大呢?
难道是因为我的数据没规律?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-18 14:48:49 | 显示全部楼层
edisonbaby 发表于 2017-6-18 12:50
这是正常的吧,,,数据没啥规律的话,有波动是正常的

这个波动了太大了吧,我看教程光谱分析那个,运算多次,结果都差别不大呢?
难道是因为我的数据没规律?
我应该怎么去改进呢?
我的数据总量是67组,用了57组训练神经网络,剩余10组测试。我可以增加数据量吗?可以以加入人为噪音的方式来增加数据量,会对结果稳定有帮助吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|网站地图|MATLAB技术论坛|Simulink仿真论坛 ( 蜀ICP备19014457号 

GMT+8, 2020-4-2 23:48 , Processed in 0.050616 second(s), 14 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表