當前位置:首頁 » 分析預測 » lstm股票走勢matlab代碼
擴展閱讀
張國榮同性戀的原因 2024-11-17 23:12:10
西安自駕游 2024-11-17 23:04:27
山東俊富公司股票 2024-11-17 22:38:43

lstm股票走勢matlab代碼

發布時間: 2022-09-03 07:10:42

『壹』 BP神經網路的原理的BP什麼意思

人工神經網路有很多模型,但是日前應用最廣、基本思想最直觀、最容易被理解的是多層前饋神經網路及誤差逆傳播學習演算法(Error Back-Prooaeation),簡稱為BP網路。

在1986年以Rumelhart和McCelland為首的科學家出版的《Parallel Distributed Processing》一書中,完整地提出了誤差逆傳播學習演算法,並被廣泛接受。多層感知網路是一種具有三層或三層以上的階層型神經網路。典型的多層感知網路是三層、前饋的階層網路(圖4.1),即:輸入層、隱含層(也稱中間層)、輸出層,具體如下:

圖4.1 三層BP網路結構

(1)輸入層

輸入層是網路與外部交互的介面。一般輸入層只是輸入矢量的存儲層,它並不對輸入矢量作任何加工和處理。輸入層的神經元數目可以根據需要求解的問題和數據表示的方式來確定。一般而言,如果輸入矢量為圖像,則輸入層的神經元數目可以為圖像的像素數,也可以是經過處理後的圖像特徵數。

(2)隱含層

1989年,Robert Hecht Nielsno證明了對於任何在閉區間內的一個連續函數都可以用一個隱層的BP網路來逼近,因而一個三層的BP網路可以完成任意的n維到m維的映射。增加隱含層數雖然可以更進一步的降低誤差、提高精度,但是也使網路復雜化,從而增加了網路權值的訓練時間。誤差精度的提高也可以通過增加隱含層中的神經元數目來實現,其訓練效果也比增加隱含層數更容易觀察和調整,所以一般情況應優先考慮增加隱含層的神經元個數,再根據具體情況選擇合適的隱含層數。

(3)輸出層

輸出層輸出網路訓練的結果矢量,輸出矢量的維數應根據具體的應用要求來設計,在設計時,應盡可能減少系統的規模,使系統的復雜性減少。如果網路用作識別器,則識別的類別神經元接近1,而其它神經元輸出接近0。

以上三層網路的相鄰層之間的各神經元實現全連接,即下一層的每一個神經元與上一層的每個神經元都實現全連接,而且每層各神經元之間無連接,連接強度構成網路的權值矩陣W。

BP網路是以一種有教師示教的方式進行學習的。首先由教師對每一種輸入模式設定一個期望輸出值。然後對網路輸入實際的學習記憶模式,並由輸入層經中間層向輸出層傳播(稱為「模式順傳播」)。實際輸出與期望輸出的差即是誤差。按照誤差平方最小這一規則,由輸出層往中間層逐層修正連接權值,此過程稱為「誤差逆傳播」(陳正昌,2005)。所以誤差逆傳播神經網路也簡稱BP(Back Propagation)網。隨著「模式順傳播」和「誤差逆傳播」過程的交替反復進行。網路的實際輸出逐漸向各自所對應的期望輸出逼近,網路對輸入模式的響應的正確率也不斷上升。通過此學習過程,確定下各層間的連接權值後。典型三層BP神經網路學習及程序運行過程如下(標志淵,2006):

(1)首先,對各符號的形式及意義進行說明:

網路輸入向量Pk=(a1,a2,...,an);

網路目標向量Tk=(y1,y2,...,yn);

中間層單元輸入向量Sk=(s1,s2,...,sp),輸出向量Bk=(b1,b2,...,bp);

輸出層單元輸入向量Lk=(l1,l2,...,lq),輸出向量Ck=(c1,c2,...,cq);

輸入層至中間層的連接權wij,i=1,2,...,n,j=1,2,...p;

中間層至輸出層的連接權vjt,j=1,2,...,p,t=1,2,...,p;

中間層各單元的輸出閾值θj,j=1,2,...,p;

輸出層各單元的輸出閾值γj,j=1,2,...,p;

參數k=1,2,...,m。

(2)初始化。給每個連接權值wij、vjt、閾值θj與γj賦予區間(-1,1)內的隨機值。

(3)隨機選取一組輸入和目標樣本

提供給網路。

(4)用輸入樣本

、連接權wij和閾值θj計算中間層各單元的輸入sj,然後用sj通過傳遞函數計算中間層各單元的輸出bj

基坑降水工程的環境效應與評價方法

bj=f(sj) j=1,2,...,p (4.5)

(5)利用中間層的輸出bj、連接權vjt和閾值γt計算輸出層各單元的輸出Lt,然後通過傳遞函數計算輸出層各單元的響應Ct

基坑降水工程的環境效應與評價方法

Ct=f(Lt) t=1,2,...,q (4.7)

(6)利用網路目標向量

,網路的實際輸出Ct,計算輸出層的各單元一般化誤差

基坑降水工程的環境效應與評價方法

(7)利用連接權vjt、輸出層的一般化誤差dt和中間層的輸出bj計算中間層各單元的一般化誤差

基坑降水工程的環境效應與評價方法

(8)利用輸出層各單元的一般化誤差

與中間層各單元的輸出bj來修正連接權vjt和閾值γt

基坑降水工程的環境效應與評價方法

(9)利用中間層各單元的一般化誤差

,輸入層各單元的輸入Pk=(a1,a2,...,an)來修正連接權wij和閾值θj

基坑降水工程的環境效應與評價方法

(10)隨機選取下一個學習樣本向量提供給網路,返回到步驟(3),直到m個訓練樣本訓練完畢。

(11)重新從m個學習樣本中隨機選取一組輸入和目標樣本,返回步驟(3),直到網路全局誤差E小於預先設定的一個極小值,即網路收斂。如果學習次數大於預先設定的值,網路就無法收斂。

(12)學習結束。

可以看出,在以上學習步驟中,(8)、(9)步為網路誤差的「逆傳播過程」,(10)、(11)步則用於完成訓練和收斂過程。

通常,經過訓練的網路還應該進行性能測試。測試的方法就是選擇測試樣本向量,將其提供給網路,檢驗網路對其分類的正確性。測試樣本向量中應該包含今後網路應用過程中可能遇到的主要典型模式(宋大奇,2006)。這些樣本可以直接測取得到,也可以通過模擬得到,在樣本數據較少或者較難得到時,也可以通過對學習樣本加上適當的雜訊或按照一定規則插值得到。為了更好地驗證網路的泛化能力,一個良好的測試樣本集中不應該包含和學習樣本完全相同的模式(董軍,2007)。

『貳』 如何在Python中用LSTM網路進行時間序列預測

時間序列模型

時間序列預測分析就是利用過去一段時間內某事件時間的特徵來預測未來一段時間內該事件的特徵。這是一類相對比較復雜的預測建模問題,和回歸分析模型的預測不同,時間序列模型是依賴於事件發生的先後順序的,同樣大小的值改變順序後輸入模型產生的結果是不同的。
舉個栗子:根據過去兩年某股票的每天的股價數據推測之後一周的股價變化;根據過去2年某店鋪每周想消費人數預測下周來店消費的人數等等

RNN 和 LSTM 模型

時間序列模型最常用最強大的的工具就是遞歸神經網路(recurrent neural network, RNN)。相比與普通神經網路的各計算結果之間相互獨立的特點,RNN的每一次隱含層的計算結果都與當前輸入以及上一次的隱含層結果相關。通過這種方法,RNN的計算結果便具備了記憶之前幾次結果的特點。

典型的RNN網路結構如下:

4. 模型訓練和結果預測
將上述數據集按4:1的比例隨機拆分為訓練集和驗證集,這是為了防止過度擬合。訓練模型。然後將數據的X列作為參數導入模型便可得到預測值,與實際的Y值相比便可得到該模型的優劣。

實現代碼

  • 時間間隔序列格式化成所需的訓練集格式

  • import pandas as pdimport numpy as npdef create_interval_dataset(dataset, look_back):

  • """ :param dataset: input array of time intervals :param look_back: each training set feature length :return: convert an array of values into a dataset matrix. """

  • dataX, dataY = [], [] for i in range(len(dataset) - look_back):

  • dataX.append(dataset[i:i+look_back])

  • dataY.append(dataset[i+look_back]) return np.asarray(dataX), np.asarray(dataY)


  • df = pd.read_csv("path-to-your-time-interval-file")

  • dataset_init = np.asarray(df) # if only 1 columndataX, dataY = create_interval_dataset(dataset, lookback=3) # look back if the training set sequence length

  • 這里的輸入數據來源是csv文件,如果輸入數據是來自資料庫的話可以參考這里

  • LSTM網路結構搭建

  • import pandas as pdimport numpy as npimport randomfrom keras.models import Sequential, model_from_jsonfrom keras.layers import Dense, LSTM, Dropoutclass NeuralNetwork():

  • def __init__(self, **kwargs):

  • """ :param **kwargs: output_dim=4: output dimension of LSTM layer; activation_lstm='tanh': activation function for LSTM layers; activation_dense='relu': activation function for Dense layer; activation_last='sigmoid': activation function for last layer; drop_out=0.2: fraction of input units to drop; np_epoch=10, the number of epoches to train the model. epoch is one forward pass and one backward pass of all the training examples; batch_size=32: number of samples per gradient update. The higher the batch size, the more memory space you'll need; loss='mean_square_error': loss function; optimizer='rmsprop' """

  • self.output_dim = kwargs.get('output_dim', 8) self.activation_lstm = kwargs.get('activation_lstm', 'relu') self.activation_dense = kwargs.get('activation_dense', 'relu') self.activation_last = kwargs.get('activation_last', 'softmax') # softmax for multiple output

  • self.dense_layer = kwargs.get('dense_layer', 2) # at least 2 layers

  • self.lstm_layer = kwargs.get('lstm_layer', 2) self.drop_out = kwargs.get('drop_out', 0.2) self.nb_epoch = kwargs.get('nb_epoch', 10) self.batch_size = kwargs.get('batch_size', 100) self.loss = kwargs.get('loss', 'categorical_crossentropy') self.optimizer = kwargs.get('optimizer', 'rmsprop') def NN_model(self, trainX, trainY, testX, testY):

  • """ :param trainX: training data set :param trainY: expect value of training data :param testX: test data set :param testY: epect value of test data :return: model after training """

  • print "Training model is LSTM network!"

  • input_dim = trainX[1].shape[1]

  • output_dim = trainY.shape[1] # one-hot label

  • # print predefined parameters of current model:

  • model = Sequential() # applying a LSTM layer with x dim output and y dim input. Use dropout parameter to avoid overfitting

  • model.add(LSTM(output_dim=self.output_dim,

  • input_dim=input_dim,

  • activation=self.activation_lstm,

  • dropout_U=self.drop_out,

  • return_sequences=True)) for i in range(self.lstm_layer-2):

  • model.add(LSTM(output_dim=self.output_dim,

  • input_dim=self.output_dim,

  • activation=self.activation_lstm,

  • dropout_U=self.drop_out,

  • return_sequences=True)) # argument return_sequences should be false in last lstm layer to avoid input dimension incompatibility with dense layer

  • model.add(LSTM(output_dim=self.output_dim,

  • input_dim=self.output_dim,

  • activation=self.activation_lstm,

  • dropout_U=self.drop_out)) for i in range(self.dense_layer-1):

  • model.add(Dense(output_dim=self.output_dim,

  • activation=self.activation_last))

  • model.add(Dense(output_dim=output_dim,

  • input_dim=self.output_dim,

  • activation=self.activation_last)) # configure the learning process

  • model.compile(loss=self.loss, optimizer=self.optimizer, metrics=['accuracy']) # train the model with fixed number of epoches

  • model.fit(x=trainX, y=trainY, nb_epoch=self.nb_epoch, batch_size=self.batch_size, validation_data=(testX, testY)) # store model to json file

  • model_json = model.to_json() with open(model_path, "w") as json_file:

  • json_file.write(model_json) # store model weights to hdf5 file

  • if model_weight_path: if os.path.exists(model_weight_path):

  • os.remove(model_weight_path)

  • model.save_weights(model_weight_path) # eg: model_weight.h5

  • return model

  • 這里寫的只涉及LSTM網路的結構搭建,至於如何把數據處理規范化成網路所需的結構以及把模型預測結果與實際值比較統計的可視化,就需要根據實際情況做調整了。

    『叄』 lstm工具箱2016matlab有嗎

    有的。
    Matlab2016b官方版是一款出自MathWorks公司之手的科學計算工具,Matlab2016b最新版功能強勁,能夠幫助用戶輕松進行工程計算、控制設計、信號處理與通訊、圖像處理、信號檢測等操作,MathworksMatlab2016b操作簡便,可實現數值分析、數值和符號計算、工程與科學繪圖等。
    此版本增加了新的功能以簡化MATLAB中的大數據處理過程,還包括Simulink的其他新功能、一個新的工具箱RiskManagementToolbox以及其它83款產品的更新和問題修復。除此之外,Matlab2016b還增加一個時間表數據容器,用於索引和同步帶時間戳的表格數據,增加了字元串數組,用於進行有效的進行文本數據的操作、比較和存儲,以及增加其它用於數據預處理的新功能。

    『肆』 matlab2018a中有lstm工具箱嗎

    matlab工具箱就是省去了matlab編程的過程。

    他就是把程序轉換成界面,便於初學者的學習,操作。裡面有各種工具箱,比如小波工具箱,神經網路工具箱,粒子演算法優化工具箱,模擬模擬工具箱等等。

    sum=xlsread('name.xls');%name為文件名,將excel數據儲存在sum矩陣中。sum1=sum(:,1);%取出sum第一列數據為sum1,很多時候會用到取出某一行;如果是取出列,類似的。

    服務支持:

    Simulink®: Simulation Performance Advisor,鏈接庫模塊的封裝,以及通過邏輯表達式控制有效變數。

    Simulink: 除 LEGO® MINDSTORMS® NXT、Arino®、Pandaboard 和 Beagleboard 外,還為 Raspberry Pi™ 和 Gumstix® Overo® 硬體提供了內置支持。

    SimRF™: 針對快速模擬和模型載入時間的電路包絡求解器。

    SimMechanics™: 發布了用於從 CAD 和其他系統導入模型的 XML 架構。

    Simulink Design Verifier™: 數組超出邊界檢查。

    『伍』 使用MATLAB裡面的LSTM,Invalid training data. Responses must be a vector of categorical responses

    responses 變數需要定義為categorical類型。比如你的變數是a,你加一句:a=categorical(a);

    『陸』 什麼演算法可以改進lstm

    基於模糊聚類演算法改進lstm的預測方法。
    發明的目的在於解決股票市場中的價格預測問題,提供一種基於模糊聚類演算法改進lstm的預測方法,該預測方法引入模糊聚類演算法,對已序列化的數據進行模糊聚類得到隸屬度矩陣,並利用隸屬度矩陣對經過融合的lstm網路輸出進行加權求和,最終得到股票價格預測值,可以有效的模擬股票趨勢中的波動特點及場景,使得預測結果更加准確且符合實際。

    『柒』 matlab中如何調用更改lstm的權重

    方法/步驟

    • 在電腦上打開Matlab軟體,並將要進行預測的Excel中數據保存到Matlab工作路徑下

    • 總結:

      1.打開Matlab,將要處理的數據保存到工作路徑下

      2.接著新建一個腳本文件

      3.在腳本文件中輸入程序,讀取數據、建立LSTM網路,並訓練網路

      4.編寫好程序以後點擊「保存」,接著點擊「運行」捷克語在figure頁面看導預測結果

    『捌』 什麼是BP神經網路

    誤差反向傳播(Error Back Propagation, BP)演算法
    1、BP演算法的基本思想是,學習過程由信號的正向傳播與誤差的反向傳播兩個過程組成。
    1)正向傳播:輸入樣本->輸入層->各隱層(處理)->輸出層
    注1:若輸出層實際輸出與期望輸出(教師信號)不符,則轉入2)(誤差反向傳播過程)
    2)誤差反向傳播:輸出誤差(某種形式)->隱層(逐層)->輸入層
    其主要目的是通過將輸出誤差反傳,將誤差分攤給各層所有單元,從而獲得各層單元的誤差信號,進而修正各單元的權值(其過程,是一個權值調整的過程)。
    注2:權值調整的過程,也就是網路的學習訓練過程(學習也就是這么的由來,權值調整)。
    2、BP演算法實現步驟(軟體):
    1)初始化
    2)輸入訓練樣本對,計算各層輸出
    3)計算網路輸出誤差
    4)計算各層誤差信號
    5)調整各層權值
    6)檢查網路總誤差是否達到精度要求
    滿足,則訓練結束;不滿足,則返回步驟2)
    3、多層感知器(基於BP演算法)的主要能力:
    1)非線性映射:足夠多樣本->學習訓練
    能學習和存儲大量輸入-輸出模式映射關系。只要能提供足夠多的樣本模式對供BP網路進行學習訓練,它便能完成由n維輸入空間到m維輸出空間的非線性映射。
    2)泛化:輸入新樣本(訓練時未有)->完成正確的輸入、輸出映射
    3)容錯:個別樣本誤差不能左右對權矩陣的調整
    4、標准BP演算法的缺陷:
    1)易形成局部極小(屬貪婪演算法,局部最優)而得不到全局最優;
    2)訓練次數多使得學習效率低下,收斂速度慢(需做大量運算);
    3)隱節點的選取缺乏理論支持;
    4)訓練時學習新樣本有遺忘舊樣本趨勢。
    注3:改進演算法—增加動量項、自適應調整學習速率(這個似乎不錯)及引入陡度因子

    『玖』 lstm序列指什麼

    LSTM(Long Short-Term Memory)是長短期記憶網路,是一種時間遞歸神經網路,適合於處理和預測時間序列中間隔和延遲相對較長的重要事件。

    LSTM 已經在科技領域有了多種應用。基於 LSTM 的系統可以學習翻譯語言、控制機器人、圖像分析、文檔摘要、語音識別圖像識別、手寫識別、控制聊天機器人、預測疾病、點擊率和股票、合成音樂等等任務。
    工作原理
    LSTM區別於RNN的地方,主要就在於它在演算法中加入了一個判斷信息有用與否的"處理器",這個處理器作用的結構被稱為cell。

    一個cell當中被放置了三扇門,分別叫做輸入門、遺忘門和輸出門。一個信息進入LSTM的網路當中,可以根據規則來判斷是否有用。只有符合演算法認證的信息才會留下,不符的信息則通過遺忘門被遺忘。

    說起來無非就是一進二出的工作原理,卻可以在反復運算下解決神經網路中長期存在的大問題。目前已經證明,LSTM是解決長序依賴問題的有效技術,並且這種技術的普適性非常高,導致帶來的可能性變化非常多。各研究者根據LSTM紛紛提出了自己的變數版本,這就讓LSTM可以處理千變萬化的垂直問題。

    『拾』 matlablstm工具箱在哪裡打開

    工具箱的打開方式在左下角有個Start
    ---toolbox裡面,看你需要什麼工具箱了。