赞
踩
- % elm_stockpredict.m
-
- %% 清除工作空间中的变量和图形
- clear,clc
- close all
-
- %% 1.加载337期上证指数开盘价格
- load matlab.mat
-
- whos
- rng(1)
- %% ARMA模型
- z=iddata(y1);
- m=armax(z(1:19),'na',2,'nc',1);
- yp = predict(m,y1,1);
- yp=yp';
-
- yp=yp(:,157:end);
- %% 2.构造样本集
- % 数据个数
- price=y1;
- n=length(price);
-
- % 确保price为列向量
- price=price(:);
-
- % x(n) 由x(n-1),x(n-2),...,x(n-L)共L个数预测得到.
- L = 6;
-
- % price_n:每列为一个构造完毕的样本,共n-L个样本
- price_n = zeros(L+1, n-L);
- for i=1:n-L
- price_n(:,i) = price(i:i+L);
- end
-
- %% 划分训练、测试样本
- % 将前280份数据划分为训练样本
- % 后51份数据划分为测试样本
-
- trainx = price_n(1:6, 1:150);
- trainy = price_n(7, 1:150);
-
- testx = price_n(1:6, 151:end);
- testy = price_n(7, 151:end);
-
- %% 创建Elman神经网络
-
- % 包含15个神经元,训练函数为traingdx
- net=elmannet(1:2,15,'traingdx');
-
- % 设置显示级别
- net.trainParam.show=1;
-
- % 最大迭代次数为2000次
- net.trainParam.epochs=2000;
-
- % 误差容限,达到此误差就可以停止训练
- net.trainParam.goal=0.00001;
-
- % 最多验证失败次数
- net.trainParam.max_fail=5;
-
- % 对网络进行初始化
- net=init(net);
-
- %% 网络训练
-
- %训练数据归一化
- [trainx1, st1] = mapminmax(trainx);
- [trainy1, st2] = mapminmax(trainy);
-
- % 测试数据做与训练数据相同的归一化操作
- testx1 = mapminmax('apply',testx,st1);
- testy1 = mapminmax('apply',testy,st2);
-
- % 输入训练样本进行训练
- [net,per] = train(net,trainx1,trainy1);
-
- %% 测试。输入归一化后的数据,再对实际输出进行反归一化
-
- % 将训练数据输入网络进行测试
- train_ty1 = sim(net, trainx1);
- train_ty = mapminmax('reverse', train_ty1, st2);
-
- % 将测试数据输入网络进行测试
- test_ty1 = sim(net, testx1);
- test_ty = mapminmax('reverse', test_ty1, st2);
-
-
-
- % 显示真实值
- plot(x,testy,'b-');
- hold on
- % 显示神经网络的输出值
- plot(x,test_ty,'r--')
-
- % 显示ARMA的输出值
- plot(x,yp,'k--')
-
- legend('real price','prediction price of Elman','prediction price of ARMA')
- title('Test Results');
-
- % 显示均方误差
- mse2 = mse(test_ty - testy);
- fprintf(' Elman_mse = \n %f\n', mse2)
- mse3 = mse(yp - testy);
- fprintf(' ARMA_mse = \n %f\n', mse3)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。