91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何基于Keras和Tensorflow用LSTM進行時間序列預測

zhKF_jqr_AI ? 來源:未知 ? 作者:李倩 ? 2018-09-06 08:53 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

編者按:本文將介紹如何基于Keras和Tensorflow,用LSTM進行時間序列預測。文章數(shù)據(jù)來自股票市場數(shù)據(jù)集,目標是提供股票價格的動量指標。

GitHub:github.com/jaungiers/LSTM-Neural-Network-for-Time-Series-Prediction

什么是LSTM?

自提出后,傳統(tǒng)神經(jīng)網(wǎng)絡(luò)架構(gòu)一直沒法解決一些基礎(chǔ)問題,比如解釋依賴于信息和上下文的輸入序列。這些信息可以是句子中的某些單詞,我們能用它們預測下一個單詞是什么;也可以是序列的時間信息,我們能基于時間元素分析句子的上下文。

簡而言之,傳統(tǒng)神經(jīng)網(wǎng)絡(luò)每次只會采用獨立的數(shù)據(jù)向量,它沒有一個類似“記憶”的概念,用來處理和“記憶”有關(guān)各種任務(wù)。

為了解決這個問題,早期提出的一種方法是在網(wǎng)絡(luò)中添加循環(huán),得到輸出值后,它的輸入信息會通過循環(huán)被“繼承”到輸出中,這是它最后看到的輸入上下文。這些網(wǎng)絡(luò)被稱為遞歸神經(jīng)網(wǎng)絡(luò)(RNN)。雖然RNN在一定程度上解決了上述問題,但它們還是存在相當大的缺陷,比如在處理長期依賴性問題時容易出現(xiàn)梯度消失。

這里我們不深入探討RNN的缺陷,我們只需知道,既然RNN這么容易梯度消失,那么它就不適合大多數(shù)現(xiàn)實問題。在這個基礎(chǔ)上,Hochreiter&Schmidhuber于1997年提出了長期短期記憶網(wǎng)絡(luò)(LSTM),這是一種特殊的RNN,它能使神經(jīng)元在其管道中保持上下文記憶,同時又解決了梯度消失問題。具體工作原理可讀《一文詳解LSTM網(wǎng)絡(luò)》。

上圖是LSTM的一個典型內(nèi)部示意圖,它由若干節(jié)點和若干操作組成。其中,操作充當輸入門、輸出門和遺忘門,為節(jié)點狀態(tài)提供信息。而節(jié)點狀態(tài)負責在網(wǎng)絡(luò)中記錄長期記憶和上下文。

一個簡單的正弦曲線示例

為了演示LSTM在預測時間序列中的作用,我們先從最基礎(chǔ)的開始:一個時間序列——標準正弦曲線。

代碼數(shù)據(jù)文件夾中提供的數(shù)據(jù)包含我們創(chuàng)建的sinewave.csv文件,該文件包含5001個正弦曲線時間段,幅度和頻率為1(角頻率為6.28),時間差為0.01。它的圖像如下所示:

正弦曲線數(shù)據(jù)集

有了數(shù)據(jù),接下來就是實現(xiàn)目標。在這個任務(wù)中,我們希望LSTM能根據(jù)提供的數(shù)據(jù)學習正弦曲線,并預測此后的N步,持續(xù)輸出曲線。

為了做到這一點,我們需要先對CSV文件中的數(shù)據(jù)進行轉(zhuǎn)換,把處理后的數(shù)據(jù)加載到pandas的數(shù)據(jù)框架中。之后,它會輸出numpy數(shù)組,饋送進LSTM。Keras的LSTM一般輸入(N, W, F)三維numpy數(shù)組,其中N表示訓練數(shù)據(jù)中的序列數(shù),W表示序列長度,F(xiàn)表示每個序列的特征數(shù)。

在這個例子中,我們使用的序列長度是50(讀取窗口大小),這意味著網(wǎng)絡(luò)能在每個序列中都觀察到完整的正弦曲線形狀,便于學習。

序列本身是滑動窗口,因此如果我們每次只移動1,所得圖像其實和先前的圖像是完全一樣的。下面是我們在示例中截取的窗口圖像:

為了加載這些數(shù)據(jù),我們在代碼中創(chuàng)建了一個DataLoader類。你可能會注意到,在初始化DataLoader對象時,會傳入文件名、傳入確定用于訓練與測試的數(shù)據(jù)百分比的拆分變量,以及允許選擇一列或多列數(shù)據(jù)的列變量用于單維或多維分析。

當我們有一個允許加載數(shù)據(jù)的數(shù)據(jù)對象之后,就是時候準備構(gòu)建深層神經(jīng)網(wǎng)絡(luò)模型了。我們的代碼框架利用模型類型和config.json文件,再加上存儲在配置文件中的架構(gòu)和超參數(shù),可以輕松構(gòu)建出模型。其中執(zhí)行構(gòu)建命令的主要函數(shù)是build_model(),它負責接收解析的配置文件。

這個函數(shù)的代碼如下所示,它可以輕松擴展,以便用于更復雜的架構(gòu)。

加載數(shù)據(jù)并建立模型后,現(xiàn)在我們可以用訓練數(shù)據(jù)訓練模型。如下代碼所示,我們創(chuàng)建了一個單獨的運行模塊,它會利用我們的模型和DataLoader一起訓練,輸出預測結(jié)果和可視化。

對于輸出,我們會進行兩種類型的預測:一是逐點預測,即先讓模型預測單個點的值,在圖中繪出位置,然后移動滑動窗口,用完整的測試數(shù)據(jù)預測下個點的值。二是預測一個完整序列,即只用訓練數(shù)據(jù)的第一部分初始化一次訓練窗口,然后就像逐點預測一樣,不斷移動滑動窗口并預測下一個點。

和第一種做法不同的是,第二種做法是在用預測所得的數(shù)據(jù)進行預測,即在第二次預測時,模型所用數(shù)據(jù)中有一個數(shù)據(jù)點(最后一個點)來自之前的預測;第三次預測時,數(shù)據(jù)中就有兩個點來自之前的預測……以此類推,到第50次預測時,測試集里的數(shù)據(jù)已經(jīng)完全是預測的數(shù)據(jù)。這意味著模型可預測的時間序列被大大延長。

逐點預測結(jié)果

完整序列預測結(jié)果

作為參考,你可以在下面的配置文件中看到用于正弦曲線示例的網(wǎng)絡(luò)架構(gòu)和超參數(shù)。

我們可以從上面兩幅圖中發(fā)現(xiàn),如果用第二種方法進行預測,隨著測試集中被不斷加入新的預測數(shù)據(jù)點,模型的性能會漸漸下降,預測結(jié)果和真實結(jié)果的誤差越來越大。但正弦函數(shù)是一個非常簡單的零噪聲震蕩函數(shù),總體來看,我們的模型在沒有過擬合的同時還是能很好的模型曲線大致情況的。

接下來,就讓我們在股票數(shù)據(jù)上試試LSTM。

沒那么簡單的股票市場

很多股民都做過這樣一個夢:如果我能準確預測大盤走向,那一夜暴富豈不是手到擒來?但一覺醒來,現(xiàn)實是殘酷的,預測這件事并不像數(shù)字模擬那么簡單。

和正弦曲線不同,股票市場的時間序列并不是某個特定靜態(tài)函數(shù)的映射,它最明顯的屬性是隨機性。真正的隨機是不可預測的,也沒有預測的價值,但是,很多人相信股票市場不是一個純粹的隨機市場,它的時間序列可能存在某種隱藏模式。而根據(jù)上文的介紹,LSTM無疑是捕捉這種長期依賴關(guān)系的一個好方法。

下文使用的數(shù)據(jù)是Github數(shù)據(jù)文件夾中的sp500.csv文件。此文件包含2000年1月至2018年9月的標準普爾500股票指數(shù)的開盤價、最高價、最低價、收盤價以及每日交易量。

在第一個例子中,正弦曲線的取值范圍是-1到1,這和股票市場不同,收盤價是個不斷變化的絕對價格,這意味著如果我們不做歸一化處理就直接訓練模型,它永遠不會收斂。

為了解決這個問題,我們設(shè)訓練/測試的滑動窗口大小為n,對每個窗口進行歸一化,以反映從該窗口開始的百分比變化。

n = 價格變化的歸一化列表[滑動窗口]

p = 調(diào)整后每日利潤的原始列表[滑動窗口]

歸一化:ni= pi/p0- 1

反歸一化:pi= p0( ni+ 1)

處理完數(shù)據(jù)后,我們就可以和之前一樣運行模型。但是,我們做了一個重要的修改:不使用model.train() ,而是用model.traingenerator()。這樣做是為了在處理大型數(shù)據(jù)集時節(jié)約內(nèi)存,前者會把完整數(shù)據(jù)集全部加載到內(nèi)存中,然后一個窗口一個窗口歸一化,容易內(nèi)存溢出。此外,我們還調(diào)用了Keras的fitgenerator()函數(shù),用python生成器動態(tài)訓練數(shù)據(jù)集來繪制數(shù)據(jù),進一步降低內(nèi)存負擔。

在之前的例子中,逐點預測的結(jié)果比完整序列預測更精確,但這有點欺騙性。在這種情況下,除了預測點和最后一次預測的數(shù)據(jù)點之間的距離,神經(jīng)網(wǎng)絡(luò)其實不需要了解時間序列本身,因為即便它這次預測錯誤了,在進行下一次預測時,它也只會考慮真實結(jié)果,完全無視自己的錯誤,然后繼續(xù)產(chǎn)生錯誤預測。

雖然這聽起來不太妙,但其實這種方法還是有用的,它至少能反映下一個點的范圍,可用于波動率預測等應用。

逐點預測結(jié)果

接著是完整序列預測,在正弦曲線那個例子中,這種方法的偏差雖然越來越大,但它還是保留了整體波動形狀。如下圖所示,在復雜的股票價格預測中,它連這個優(yōu)勢都沒了,除了剛開始橙線略有波動,它預測的整體趨勢是一條水平線。

完整序列預測結(jié)果

最后,我們對該模型進行了第三種預測,我將其稱為多序列預測。這是完整序列預測的混合產(chǎn)物,因為它仍然使用測試數(shù)據(jù)初始化測試窗口,預測下一個點,然后用下一個點創(chuàng)建一個新窗口。但是,一旦輸入窗口完全由過去預測點組成,它就會停止,向前移動一個完整的窗口長度,用真實的測試數(shù)據(jù)重置窗口,然后再次啟動該過程。

實質(zhì)上,這為測試數(shù)據(jù)提供了多個趨勢線預測,以便我們評估模型對未知數(shù)據(jù)的預測性能。

多序列預測結(jié)果

如上圖所示,神經(jīng)網(wǎng)絡(luò)似乎正確地預測了絕大多數(shù)時間序列的趨勢(和趨勢幅度),雖然不完美,但它確實表明LSTM在時間序列問題中確實有用武之地。

結(jié)論

雖然本文給出了LSTM應用的一個示例,但它只觸及時間序列預測問題的表面。現(xiàn)如今,LSTM已成功應用于眾多現(xiàn)實問題,從文本自動糾正、異常檢測、欺詐檢測到自動駕駛汽車技術(shù)開發(fā)。

它還存在一些局限性,特別是在金融時間序列任務(wù)上,通常這類任務(wù)很難建模。此外,一些基于注意力機制的神經(jīng)網(wǎng)絡(luò)也開始在其他任務(wù)上表現(xiàn)出超越LSTM的性能。

但截至目前,LSTM相比傳統(tǒng)神經(jīng)網(wǎng)絡(luò)還是進步明顯,它能夠非線性地建模關(guān)系并以非線性方式處理具有多個維度的數(shù)據(jù),這是幾十年前的人們夢寐以求的。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 神經(jīng)網(wǎng)絡(luò)

    關(guān)注

    42

    文章

    4814

    瀏覽量

    103564
  • keras
    +關(guān)注

    關(guān)注

    2

    文章

    20

    瀏覽量

    6206
  • rnn
    rnn
    +關(guān)注

    關(guān)注

    0

    文章

    89

    瀏覽量

    7108

原文標題:基于LSTM深層神經(jīng)網(wǎng)絡(luò)的時間序列預測

文章出處:【微信號:jqr_AI,微信公眾號:論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    TensorFlow常用Python擴展包

    TensorFlow 能夠?qū)崿F(xiàn)大部分神經(jīng)網(wǎng)絡(luò)的功能。但是,這還是不夠的。對于預處理任務(wù)、序列化甚至繪圖任務(wù),還需要更多的 Python 包。下面列出了一些常用的 Python 包:Numpy:這是
    發(fā)表于 07-28 14:35

    介紹有關(guān)時間序列預測時間序列分類

    通過之前有關(guān)LSTM的8遍基礎(chǔ)教程和10篇處理時間序列預測任務(wù)的教程介紹,使用簡單的序列數(shù)據(jù)示例,已經(jīng)把
    發(fā)表于 07-12 09:18

    怎樣去搭建一套用于多步時間序列預測LSTM架構(gòu)?

    如何開發(fā)和評估家庭電力數(shù)據(jù)集的預測模型?LSTM在多步時間序列預測方面具有哪些優(yōu)勢?怎樣去搭建一套用于多步
    發(fā)表于 07-22 06:19

    自回歸滯后模型進行多變量時間序列預測案例分享

    1、如何建立一個模型來進行多元時間序列預測呢?  下圖顯示了關(guān)于不同類型葡萄酒銷量的月度多元時間序列。每種葡萄酒類型都是時間
    發(fā)表于 11-30 15:33

    基于SARIMA、XGBoost和CNN-LSTM時間序列預測對比

    1、基于SARIMA、XGBoost和CNN-LSTM時間序列預測對比  時間序列
    發(fā)表于 12-20 16:34

    小波回聲狀態(tài)網(wǎng)絡(luò)的時間序列預測

    為了更好的對具有多尺度特性的時間序列進行預測,運用小波分析方法與回聲狀態(tài)網(wǎng)絡(luò)模型相結(jié)合來創(chuàng)建小波回聲狀態(tài)網(wǎng)絡(luò)預測模型。利用小波方法對原始
    發(fā)表于 01-13 11:40 ?0次下載
    小波回聲狀態(tài)網(wǎng)絡(luò)的<b class='flag-5'>時間</b><b class='flag-5'>序列</b><b class='flag-5'>預測</b>

    KerasTensorFlow究竟哪個會更好?

    Keras 依然作為一個庫,與 TensorFlow 分開,進行獨立操作,所以仍存在未來兩者會分開的可能性;然而,我們知道 Google 官方同時支持 Keras
    的頭像 發(fā)表于 10-11 10:05 ?2.2w次閱讀

    TensorFlowKeras哪個更好用?

    作為一個庫,Keras 仍然可以單獨使用,因此未來兩者可能會分道揚鑣。不過,因為谷歌官方支持 KerasTensorFlow,所以似乎不太可能出現(xiàn)這種情況。
    的頭像 發(fā)表于 10-31 09:40 ?1.1w次閱讀

    如何用Python進行時間序列分解和預測

    預測是一件復雜的事情,在這方面做得好的企業(yè)會在同行業(yè)中出類拔萃。時間序列預測的需求不僅存在于各類業(yè)務(wù)場景當中,而且通常需要對未來幾年甚至幾分鐘之后的
    的頭像 發(fā)表于 02-14 11:34 ?2777次閱讀
    如何用Python<b class='flag-5'>進行時間</b><b class='flag-5'>序列</b>分解和<b class='flag-5'>預測</b>?

    基于TensorFlowKeras的圖像識別

    TensorFlowKeras最常見的用途之一是圖像識別/分類。通過本文,您將了解如何使用Keras達到這一目的。定義如果您不了解圖像識別的基本概念,將很難完全理解本文的內(nèi)容。因此在正文開始之前
    的頭像 發(fā)表于 01-13 08:27 ?1189次閱讀
    基于<b class='flag-5'>TensorFlow</b>和<b class='flag-5'>Keras</b>的圖像識別

    keras模型轉(zhuǎn)tensorflow session

    在這篇文章中,我們將討論如何將Keras模型轉(zhuǎn)換為TensorFlow session。 KerasTensorFlow簡介 Keras
    的頭像 發(fā)表于 07-05 09:36 ?871次閱讀

    LSTM神經(jīng)網(wǎng)絡(luò)在時間序列預測中的應用

    時間序列預測是數(shù)據(jù)分析中的一個重要領(lǐng)域,它涉及到基于歷史數(shù)據(jù)預測未來值。隨著深度學習技術(shù)的發(fā)展,長短期記憶(LSTM)神經(jīng)網(wǎng)絡(luò)因其在處理
    的頭像 發(fā)表于 11-13 09:54 ?2036次閱讀

    如何使用Python構(gòu)建LSTM神經(jīng)網(wǎng)絡(luò)模型

    numpy tensorflow 2. 準備數(shù)據(jù) LSTM模型通常用于序列數(shù)據(jù),比如時間序列預測
    的頭像 發(fā)表于 11-13 10:10 ?1571次閱讀

    如何使用RNN進行時間序列預測

    一種強大的替代方案,能夠?qū)W習數(shù)據(jù)中的復雜模式,并進行準確的預測。 RNN的基本原理 RNN是一種具有循環(huán)結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò),它能夠處理序列數(shù)據(jù)。在RNN中,每個輸入序列的元素都會通過一個或
    的頭像 發(fā)表于 11-15 09:45 ?909次閱讀

    使用BP神經(jīng)網(wǎng)絡(luò)進行時間序列預測

    使用BP(Backpropagation)神經(jīng)網(wǎng)絡(luò)進行時間序列預測是一種常見且有效的方法。以下是一個基于BP神經(jīng)網(wǎng)絡(luò)進行時間序列
    的頭像 發(fā)表于 02-12 16:44 ?767次閱讀
    主站蜘蛛池模板: 四虎www成人影院观看 | 美女扒开尿口给男人捅 | 一级毛片视屏 | 人人艹在线观看 | 国产男人搡女人免费视频 | 扒开末成年粉嫩的小缝强文 | 欧美最猛黑人xxxx黑人猛交黄 | 激情五月婷婷小说 | 色偷偷av男人的天堂 | 日本三级黄| 欧美精品久久久久久久小说 | 一级做a爱片特黄在线观看 一级做a爱片特黄在线观看免费看 | 综合色久七七综合七七蜜芽 | 高清一区二区三区四区五区 | 日韩一级片在线 | 午夜免费啪在线观看视频网站 | 久久久久久久久久久观看 | 四虎成人免费观看在线网址 | 天天激情站| 免费看黄资源大全高清 | 欧美一级特黄aaaaaa在线看片 | 亚洲电影二区 | 最黄色的视频 | 日本 韩国 三级 国产 欧美 | 亚洲综合久久久久久888 | 伊人久久成人 | 亚洲精品福利视频 | 一级做a爱片特黄在线观看 一级做a爱片特黄在线观看免费看 | 一区二区三区四区视频在线 | 香蕉视频在线免费播放 | 狠狠丁香激情久久综合 | 亚洲 丝袜 制服 欧美 另类 | 久久婷婷综合五月一区二区 | 欧美巨大xxxx做受中文字幕 | 日本成本人三级在线观看2018 | 狠狠色丁香久久婷婷综 | 九九热在线免费观看 | 精品国产成人三级在线观看 | 中韩日欧美电影免费看 | 午夜啪啪福利视频 | 特黄特色大片免费播放器9 特黄特色大片免费视频播放 |