1. bp神经网络股票价格预测的MATLAB编程
P=[];‘输入,开盘价,最高价,最低价,收盘价成交量依次5天的数据’
T=[];’输出,即第二日的收盘’
net=newff(minmax(P),[7,1],{'tansig','logsig'},'traingdx');
net.trainParam.epochs=1000; ‘最大训练次数,根据需要可自行调节’
net.trainParam.goal=0.01; ‘误差’
net.trainParam.lr=0.01; ‘学习率’
net=train(net,P,T); ‘训练网络’
test=[];‘待预测数据输入’
out=sim(net,test); ‘仿真预测’
我的这个程序没有进行初始化,你还需要先将数据进行初始化后才能算。
2. 利用BP神经网络预测股票价格走势
参考 matlab神经网络30例 中有一个股票预测的案例
我觉得svm做这个更好
3. 谁能教我写一个MATLAB实现BP神经网络预测股票价格的编码,我要写毕业论文,不懂,多谢啊!
网络的训练过程与使用过程了两码事。
比如BP应用在分类,网络的训练是指的给你一些样本,同时告诉你这些样本属于哪一类,然后代入网络训练,使得这个网络具备一定的分类能力,训练完成以后再拿一个未知类别的数据通过网络进行分类。这里的训练过程就是先伪随机生成权值,然后把样本输入进去算出每一层的输出,并最终算出来预测输出(输出层的输出),这是正向学习过程;最后通过某种训练算法(最基本的是感知器算法)使得代价(预测输出与实际输出的某范数)函数关于权重最小,这个就是反向传播过程。
您所说的那种不需要预先知道样本类别的网络属于无监督类型的网络,比如自组织竞争神经网络。
4. 为什么我的BP神经网络的预测输出结果几乎是一样的呢
最大的可能性是没有归一化。具体原因见下:
下面这个是经典的Sigmoid函数的曲线图:
如果不进行归一化,则过大的输入x将会导致Sigmoid函数进入平坦区,全部趋近于1,即最后隐层的输出全部趋同。输出层是个purelin,线性组合后的输出层输出当然也全是几乎相同的了。
使用matlab进行归一化通常使用mapminmax函数,它的用法:
[Y,PS] = mapminmax(X,YMIN,YMAX)——将数据X归一化到区间[YMIN,YMAX]内,YMIN和YMAX为调用mapminmax函数时设置的参数,如果不设置这两个参数,这默认归一化到区间[-1, 1]内。标准化处理后的数据为Y,PS为记录标准化映射的结构体。我们一般归一化到(0,1)区间内。
5. bp神经网络预测一组数据
关键在于输入向量的制定:可选择前3年的数据作为输入,输入节点设为3;第4年的数据为输出,输出节点数设为1;隐层节点数设为4左右。这样便形成了样本,用这些样本去训练bp神经网络,将训练好的网络用于预测。
最后是以06、07、08的数据作为输入,去预测09的数据。再滚动迭代下去,直至将2012的数据预测出来。
附件是一个电力负荷的预测实例,按照我上面所说,稍微修改一下样本和节点数即可应用。
6. BP神经网络预测代码
你这是在做时间序列呢。
你可以去《神经网络之家》nnetinfo----》学习教程二--->神经网络在时间序列上的应用
上面有讲解。我把代码摘抄给你
% time series:神经网络在时间序列上的应用
% 本代码出自《神经网络之家》
timeList = 0 :0.01 : 2*pi; %生成时间点
X = sin(timeList); %生成时间序列信号
%利用x(t-5),x(t-4),x(t-3),x(t-2),x(t-1)作为输入预测x(t),将x(t)作为输出数据
inputData = [X(1:end-5);X(2:end-4);X(3:end-3);X(4:end-2);X(5:end-1)];
outputData = X(6:end);
%使用用输入输出数据(inputData、outputData)建立网络,
%隐节点个数设为3.其中隐层、输出层的传递函数分别为tansig和purelin,使用trainlm方法训练。
net = newff(inputData,outputData,3,{'tansig','purelin'},'trainlm');
%设置一些常用参数
net.trainparam.goal = 0.0001; %训练目标:均方误差低于0.0001
net.trainparam.show = 400; %每训练400次展示一次结果
net.trainparam.epochs = 1500; %最大训练次数:15000.
[net,tr] = train(net,inputData,outputData);%调用matlab神经网络工具箱自带的train函数训练网络
simout = sim(net,inputData); %调用matlab神经网络工具箱自带的sim函数得到网络的预测值
figure; %新建画图窗口窗口
t=1:length(simout);
plot(t,outputData,t,simout,'r')%画图,对比原来的输出和网络预测的输出
%------------------附加:抽取数学表达式----------------------------top
%希望脱离matlab的sim函数来使用训练好网络的话,可以抽取出数学的表达式,|
%这样在任何软件中,只需要按表达式计算即可。 |
%============抽取数学表达式==================
%抽取出网络的权值和阈值
w12 = net.iw{1,1}; %第1层(输入层)到第2层(隐层)的权值
b2 = net.b{1}; %第2层(隐层)的阈值
w23 = net.lw{2,1}; %第2层(隐层)到第3层(输出层)的权值
b3 = net.b{2}; %第3层(输出层)的阈值
%由于有归一化,必须先将归一化信息抓取出来
iMax = max(inputData,[],2);
iMin = min(inputData,[],2);
oMax = max(outputData,[],2);
oMin = min(outputData,[],2);
%方法1:归一化--->计算输出--->反归一化
normInputData=2*(inputData -repmat(iMin,1,size(inputData,2)))./repmat(iMax-iMin,1,size(inputData,2)) -1;
tmp = w23*tansig( w12 *normInputData + repmat(b2,1,size(normInputData,2))) + repmat(b3,1,size(normInputData,2));
myY = (tmp+1).*repmat(oMax-oMin,1,size(outputData,2))./2 + repmat(oMin,1,size(outputData,2));
%方法2:用真正的权值和阈值进行计算
%公式请参考《提取对应原始数据的权重和阈值》
W12 = w12 * 2 ./repmat(iMax' -iMin',size(w12,1),1);
B2 = -w12* (2*iMin ./(iMax - iMin) + 1) + b2;
W23 = w23 .*repmat((oMax -oMin),1,size(w23,2))/2;
B3 = (oMax -oMin) .*b3 /2 + (oMax -oMin)/2 + oMin;
%最终的数学表达式:
myY2 = W23 *tansig( W12 *inputData + repmat(B2,1,size(inputData,2))) + repmat(B3,1,size(inputData,2));
7. BP神经网络预测,预测结果与样本数据的理解。
输入节点数是3,说明输入向量的行数m=3,你给的样本只有1行,是不是不全?输出节点只有一个,说明每3个输入数据对应一个预测的输出数据。
其实样本数量很少,就不需要训练那么多次了,训练了也白训练。你问“这样的预测结果代表着什么?”,你也没说这些数据在现实中是什么,怎么会知道呢。
8. bp神经网络函数中哪个预测性能好
traingdm是带动量的梯度下降法,trainlm是指L-M优化算法,trainscg是指量化共轭梯度法,除此之外还有traingdx、traingda等,都是权值的训练算法。看MATLAB结合神经网络的基础书上都有介绍。tansig和logsig 统称Sigmoid函数,logsig是单极性S函数,tansig是双极性S函数,也叫双曲正切函数,purelin是线性函数,是节点的传输函数。
学习函数和训练函数的区别:学习函数的输出是权值和阈值的增量,训练函数的输出是训练好的网络和训练记录,在训练过程中训练函数不断调用学习函数修正权值和阈值,通过检测设定的训练步数或性能函数计算出的误差小于设定误差,来结束训练。
下面是几个仿真实验,用了不同的训练函数:
1.创建BP网络的学习函数,训练函数和性能函数都采用default值,分别为learngdm,trainlm和mse时的逼近结果:
由此可见,进过200次训练后,虽然网络的性能还没有为0,但是输出均方误差已经很小了,MSE=6.72804e-0.06,显示的结果也证明P和T之间非线性映射关系的拟合是非常精确的;
2.建立一个学习函数为learnd,训练函数为traingd,和性能函数为msereg的BP网络,来完成拟合任务:
可见,经过200次训练后,网络的输出误差比较大,而且网络误差的收敛速度非常慢。这是由于训练函数traingd为单纯的梯度下降训练函数,训练速度比较慢,而且容易陷入局部最小的情况。结果显示网络精度确实比较差。
3.将训练函数修改为traingdx,该i函数也是梯度下降法训练函数,但是在训练过程中,他的学习速率是可变的
在200次训练后,以msereg函数评价的网络性能为1.04725,已经不是很大,结果显示P和T之间非线性关系的拟合情况不错,网络的性能不错。