1. 程式人生 > >matlab實現BP演算法,預測上證指數漲跌

matlab實現BP演算法,預測上證指數漲跌

文章目錄

基本情況

  1. 對於很多人人為,股票預測是一個很難的問題。其實不然,運用今天這種數學工具你可以大概預測出股票的短期走勢。因為長期走勢受很多因素的影響。

  2. 運用MATLAB神經網路工具箱,快速建立BP網路結構。那麼你會問什麼是神經網路,那麼我下面就給大家簡單的介紹一下:

  3. 人工神經網路就是模擬人思維的第二種方式。這是一個非線性動力學系統,其特色在於資訊的分散式儲存和並行協同處理。雖然單個神經元的結構極其簡單,功能有限,但大量神經元構成的網路系統所能實現的行為卻是極其豐富多彩的。

  4. 人工神經網路首先要以一定的學習準則進行學習,然後才能工作。現以人工神經網路對手寫“A”、“B”兩個字母的識別為例進行說明,規定當“A”輸入網路時,應該輸出“1”,而當輸入為“B”時,輸出為“0”。

  5. 所以網路學習的準則應該是:如果網路作出錯誤的的判決,則通過網路的學習,應使得網路減少下次犯同樣錯誤的可能性。首先,給網路的各連線權值賦予(0,1)區間內的隨機值,將“A”所對應的圖象模式輸入給網路,網路將輸入模式加權求和、與門限比較、再進行非線性運算,得到網路的輸出。在此情況下,網路輸出為“1”和“0”的概率各為50%,也就是說是完全隨機的。這時如果輸出為“1”(結果正確),則使連線權值增大,以便使網路再次遇到“A”模式輸入時,仍然能作出正確的判斷。

  6. 如果輸出為“0”(即結果錯誤),則把網路連線權值朝著減小綜合輸入加權值的方向調整,其目的在於使網路下次再遇到“A”模式輸入時,減小犯同樣錯誤的可能性。如此操作調整,當給網路輪番輸入若干個手寫字母“A”、“B”後,經過網路按以上學習方法進行若干次學習後,網路判斷的正確率將大大提高。這說明網路對這兩個模式的學習已經獲得了成功,它已將這兩個模式分佈地記憶在網路的各個連線權值上。當網路再次遇到其中任何一個模式時,能夠作出迅速、準確的判斷和識別。一般說來,網路中所含的神經元個數越多,則它能記憶、識別的模式也就越多。

  7. 如圖所示拓撲結構的單隱層前饋網路,一般稱為三層前饋網或三層感知器,即:輸入層、中間層(也稱隱層)和輸出層。它的特點是:各層神經元僅與相鄰層神經元之間相互全連線,同層內神經元之間無連線,各層神經元之間無反饋連線,構成具有層次結構的前饋型神經網路系統。單計算層前饋神經網路只能求解線性可分問題,能夠求解非線性問題的網路必須是具有隱層的多層神經網路。

!BP神經網路

BP網路原始碼

%bp.m​

%處理資料

clear

close all

echo on  %視窗響應執行過程

clc

pause

a=xlsread('learn.xls',1,'A2:A301');%樣本時間序號

a1=xlsread('learn.xls',1,'A7:A301');%預測時間序號

b=xlsread('learn.xls',1,'C2:C301');%讀取指數

for i=1:1:295

    y(i)=b(i+5);%理想輸出

end       

for i=1:1:295

    for j=1:1:5

        x(j,i)=b(i+j-1);%輸入

    end

end

a

x    %以前五日預測明天的大盤指數的輸入矩陣

y    %理想的輸出

%pause

[xn,minx,maxx,yn,miny,maxy]=premnmx(x,y) %資料歸一化處理

xn

yn

%pause

tic;

%建立神經網路

net=newff(minmax(xn),[11,1],{'tansig','purelin'},'trainlm');

net.trainparam.show=50;    %顯示迭代過程

net.trainparam.lr=0.5;    %學習率

net.trainparam.epochs=1000; %最大訓練次數

net.trainparam.goal=1e-3;  %訓練要求精度

net.trainparam.mc=0;     %動量因子

 [net,tr]=train(net ,xn,yn); %訓練bp網路

t = toc;

t

pause

inputWeights=net.iw{1,1} %輸入層權值

inputbias=net.b{1}      %輸入層閾值

layerWeights=net.lw{2,1} %輸出層權值

layerbias=net.b{2}       %輸出層閾值

%對網路模擬預測

On = sim (net ,xn);

E=On-yn %計算誤差

M=sse(E) 

N=mse(E)

%pause

 

a2=postmnmx(On,miny,maxy)

plot(a1,xn)

title('歸一化處理後的樣本','FontSize',12);

xlabel('統計時間2014.9.6-2015.11.10','FontSize',10);

ylabel('歸一化後的上證指數','FontSize',10);

figure;

plot(a1,yn)

plot(a,b,'*');

title('上證指數預測收盤價格','FontSize',12);

xlabel('統計時間2014.9.1-2015.11.10','FontSize',10);

ylabel('上證指數','FontSize',10);

hold on

plot(a1,a2,'r+');

legend('實際值','r預測值');

echo off

pause 

clc

實現結果

在這裡插入圖片描述
在這裡插入圖片描述

資料集在我網盤,有需要請聯絡博主