姓名:王正帥
學(xué)號:14020120007
轉(zhuǎn)載自:mp.weixin.qq.com/s ,有刪節(jié)
【嵌牛導(dǎo)讀】:截至 11 月 22 日,比特幣的價格再創(chuàng)歷史新高(約 1 比特幣兌 8120 美元),在驚訝于虛擬貨幣「不可戰(zhàn)勝」的同時,我們或許能可以從這一波熱潮中學(xué)到些什么。本文中,博士畢業(yè)于倫敦大學(xué)學(xué)院(UCL)的 David Sheehan 為我們介紹了使用 Keras 基于 LSTM 預(yù)測比特幣價格走勢的詳細(xì)方法。在測試中,這個機器學(xué)習(xí)預(yù)測法似乎有著不錯的準(zhǔn)確度。
【嵌牛鼻子】:比特幣、虛擬貨幣、Keras、比特幣價格走勢
【嵌牛提問】:比特幣有何神奇之處?如何用機器學(xué)習(xí)預(yù)測比特幣價格走勢?
【嵌牛正文】:
如果要列出 2017 年最為荒謬的三樣事物,則一定是指尖陀螺、人工智能,當(dāng)然,還有加密虛擬貨幣(cryptocurrency)。以上是玩笑話,實際上我對虛擬貨幣的原理印象深刻,而且非??春眠@種顛覆性技術(shù)的長期前景。我試圖通過深度學(xué)習(xí)、機器學(xué)習(xí)或者說人工智能(是的,所有這三個!)成功預(yù)測虛擬貨幣的價格。
我認(rèn)為把深度學(xué)習(xí)和虛擬貨幣結(jié)合起來是非常獨特的想法,但是在寫本文時,我發(fā)現(xiàn)了一些類似的內(nèi)容(http://www.jakob-aungiers.com/articles/a/Multidimensional-LSTM-Networks-to-Predict-Bitcoin-Price)。這篇文章只關(guān)注比特幣(最有名的虛擬貨幣),但是我還想討論一下以太幣。
我們打算使用 LSTM 模型,一種非常適合時序數(shù)據(jù)的深度學(xué)習(xí)模型。
數(shù)據(jù)
在構(gòu)建模型之前,我們需要先獲取一些數(shù)據(jù)。Kaggle 上的數(shù)據(jù)集(https://www.kaggle.com/mczielinski/bitcoin-historical-data)非常詳細(xì)地記錄了近幾年的比特幣價格。在這個時間長度(數(shù)年)中,噪聲可能蓋住了信號,因此我們需要選擇單日價格數(shù)據(jù)。問題在于我們可能沒有充足的數(shù)據(jù)(我們需要數(shù)百行而不是數(shù)千行、數(shù)百萬行)。在深度學(xué)習(xí)中,沒有模型可以克服數(shù)據(jù)嚴(yán)重缺乏的問題。我同樣不想使用靜態(tài)文件,因為未來使用新數(shù)據(jù)更新模型時,這種做法會復(fù)雜化更新流程。于是,我們計劃從網(wǎng)站和 API 中抓取數(shù)據(jù)。
我們將在一個模型中使用多種虛擬貨幣,因此從同一個數(shù)據(jù)源抓取數(shù)據(jù)或許是一個不錯的主意。我們將使用 coinmarketcap.com?,F(xiàn)在,我們只需要考慮比特幣和以太幣,但是使用這種方法添加最新火起來的山寨幣(altcoin)就很難了。在輸入數(shù)據(jù)之前,我們必須加載一些 Python 包,這樣會容易一些。
為了證明數(shù)據(jù)是準(zhǔn)確的,我們將兩種虛擬幣的價格和成交量按時間作圖:

訓(xùn)練、測試和隨機游走
有了數(shù)據(jù),接下來就該建立模型了。深度學(xué)習(xí)中,通常把數(shù)據(jù)分為訓(xùn)練集和測試集。模型建立在訓(xùn)練集上,隨后用未見過的測試集評估。在時間序列模型中,我們通常使用一段時期的數(shù)據(jù)訓(xùn)練,然后用另一段時期的數(shù)據(jù)進行測試。我把時間界限定為 2017 年 6 月 1 日(即模型將使用該日期之前的數(shù)據(jù)進行訓(xùn)練,用該日期之后的數(shù)據(jù)進行測試)。
結(jié)果很不錯!除了一些缺陷,該模型基本上追蹤到了兩種貨幣的實際收盤價。它甚至捕捉到了六月中旬和八月下旬的以太幣價格上升(和隨后的下跌)。正如在其他博客中提到的,由于誤差無法傳遞到隨后的預(yù)測中,單點預(yù)測的模型通常是有誤導(dǎo)性的。由于將真實價格饋送到模型中,無論誤差有多大,都會在下一個時間點被重新設(shè)置。比特幣隨機游走其實特別具欺騙性,因為 y 軸的分布范圍很寬,才使得預(yù)測線看起來很平滑。
長短期記憶(LSTM)
如果讀者對 LSTM 的理論比較感興趣,可以查看上文機器之心發(fā)過的教程與解釋。在本文中,我們并不需要從頭構(gòu)建一個 LSTM 網(wǎng)絡(luò),我們甚至都不需要理解它就能通過如 Keras 或 PyTorch 那樣的深度學(xué)習(xí)框架完成實現(xiàn)。本文選擇的是 Keras 框架,因為它只需要很少的理論知識,并且是目前最直觀的深度學(xué)習(xí)框架。
只是為了打敗隨機游走模型的話也太 low 了。對比 LSTM 模型和更合適的時序模型(加權(quán)平均值,ARIMA 或 Facebook 的 Prophet)豈不是更加有趣!另外,我確定很難再提升我們的 LSTM 模型了(添加更多層和/或神經(jīng)元,改變批量大小、學(xué)習(xí)率等)??赡芴摂M貨幣價格變化沒有規(guī)律吧,可能沒有一個模型可以把信號和噪聲分離開(類似于使用深度學(xué)習(xí)預(yù)測地震的優(yōu)點)。以后的文章中可能會討論這些話題。
我確定他們最終最終會找到深度學(xué)習(xí)的使用案例的。同時,你可以下載完整的 Python 代碼構(gòu)建自己的模型。