使用Tensorflow實現的基於LSTM的預測例項
引言
- 演算法在工程中的應用越來越廣泛,tensorflow在工業界大放異彩。筆者的專案也使用了LSTM演算法的預測能力,大大降低了運用的成本,提高了運營效率。
- 為了體驗tensorflow的開發模式,筆者使用tensorflow實現了一個基於LSTM演算法的預測例項,與大家分享。
LSTM的前世今生
- 在LSTM之前,我們先介紹另一個如雷貫耳的名詞RNN(Recurrent Neural Networks),中文名是遞迴神經網路。LSTM是對RNN隱含層的改進。RNN最主要的用途是處理序列資料,且該序列的當前輸出與前面的輸出也有關。比如,要分析一段文字的含義時,當前詞彙與上一個詞彙是有關係的,並不是孤立存在的,上文對當前的輸出產生了影響。因此RNN在NLP(Natural Language Processing)中獲得非常成功的應用。
- LSTM因為《Long short-term memory》這篇論文為世人所熟知,LSTM的出現是為了解決RNN無法有效處理長期記憶(Long Term Dependencies)的問題。
- 標準RNN在進行長期記憶計算會產生‘梯度消失或者梯度膨脹問題’(原作者描述為“vanishing or exploding gradients”),即RNN的梯度資料會在若干次遞迴計算後,由於反向多次求導的遞迴過程中產生的計算誤差的疊加,導致梯度消失或者梯度膨脹。粗略的說,‘梯度消失’的表現為很多個小於1的項連乘就很快的逼近零。
- LSTM是如何做到避免梯度消失,簡單的說,LSTM在神經元的狀態轉移時,不對狀態值新增scale引數或矩陣變換。同時,引入‘門函式’,如輸入門,輸出門,遺忘門,控制輸入資訊、狀態轉移,以及輸出資訊的有選擇性地表達。
tensorflow
- tensorflow是google釋出的一個使用資料流圖進行數值計算的開源軟體庫,計算的物件稱為張量,即多維陣列。已經發布了可用於生產環境的1.0版本, 被工業界廣泛用於機器學習和深度學習的研究和演算法應用開發。
- 官方主頁:https://www.tensorflow.org/
預測場景
- LSTM非常適用於基於時序資料的預測,比如預測未來的股票行情,預測未來某個時間段的交通情況,預測未來的房價等。
- 本文使用房價資料作為訓練樣本,因為人在對房價進行預測時,基本上都會參考近期房價和歷史趨勢,對未來的價格作出一個預判。也就是說,歷史上的房價資料,是會對未來的房價產生重大影響的,即當前輸出受歷史輸出的影響,則房價的預測符合LSTM的應用優勢。
定義LSTM模型
- 本文使用單層的LSTM模型對資料進行預測,更為複雜的多層LSTM模型也是基於單層LSTM模型進行擴充套件。定義一個基本的LSTM模型,需要定義如下幾個部分:
1. 定義時間步, 定義每個輸入資料與前多少個有序的輸入的資料有關聯
2. 定義隱層神經元的數量
3. 定義每批訓練樣本數
4. 定義輸入層維度、權重、偏置
5. 定義輸出層維度、權重、偏置
6. 定義學習率,學習率越小,越容易陷入區域性最優結果,學習率越大,相鄰兩次訓練結果間的抖動越大
7. 定義損失函式
8. 定義訓練次數
9. 構建訓練資料集
10. 構建測試資料集
獲取資料集
- 在預測房價之前,需要先獲取房價的資料,本文的資料來源為某房地產中介平臺的交易資料。
- 如何使用python編寫一個爬蟲精確爬取資料,詳見另一篇文章:
Python爬蟲實戰, 這也是為什麼使用房價作為例項場景的原因,因為這個資料已經被爬取過了。
基於Tensorflow的LSTM實現
- 基於LSTM的demo程式碼實現在github上釋出,傳送門:https://github.com/huntertan/lstm-spider/tree/master/prediction
-
關鍵檔案
-
PricePredictor.py
- LSTM預測模型實現
-
chargeInfo.txt
- 房價資料
-
演算法效果
- 縱座標數值的單位為 萬RMB
結束語
- 本文實現的demo離實際的工程應用還有差距,僅供體驗和參考
- 演算法的應用在某些場景中能夠帶來令人驚喜的效果,但在一個新的場景或者應用領域中,演算法的效果具有很大的不確定性。
- 演算法的基礎理論晦澀難懂,二次開發和準確應用的門欄都相對較高,在工程應用過程中,不免會碰到演算法持續改進了幾個月,卻在複雜的業務場景中表現不佳,無法真正上線應用的情況。
- 由於演算法的不確定性,在進行嚴格排期的工程實施中,要準確回答‘使用演算法解決xxx問題,需要幾個人日’的問題,的確是個頗為困難的事。
- 希望越來越多成功的演算法應用,能夠不斷改善人們的體驗,解放人們的想象力,創造更加美好的生活。
相關文章
- 使用LSTM模型做股票預測【基於Tensorflow】模型
- 如何基於TensorFlow使用LSTM和CNN實現時序分類任務CNN
- 基於MXNET框架的線性迴歸從零實現(房價預測為例)框架
- Tensorflow實現RNN(LSTM)手寫數字識別RNN
- MongoDB 6.0 單例項基於使用者角色實現授權登入MongoDB單例
- 基於AWR實現STATSPACK報告(6-例項元件)元件
- jQuery實現的圖片預載入程式碼例項jQuery
- 基於 JMeter的壓測工具的實現JMeter
- 基於WOA最佳化的CNN-LSTM的時間序列迴歸預測matlab模擬CNNMatlab
- Practical Netty (1) 基於Netty實現的一個rdate server例項NettyServer
- 基於Kubernetes的hpa實現pod例項數量的自動伸縮
- 基於MySQL的Apache使用者認證例項(轉)MySqlApache
- 基於laravel的事件監聽例項Laravel事件
- 10 個基於 JavaScript 的機器學習例項JavaScript機器學習
- 基於WOA最佳化的CNN-LSTM-Attention的時間序列迴歸預測matlab模擬CNNMatlab
- 基於AWR實現STATSPACK報告(8-例項元件二)元件
- 基於LSTM模型的智慧選股策略模型
- 基於TensorFlow的深度學習實戰深度學習
- 基於TensorFlow Serving的深度學習線上預估深度學習
- 基於NCF的多模組協同例項
- 基於規則的應用例項——流
- 基於大資料的使用者行為預測大資料
- 3.基於LSTM+CTC實現不定長文字圖片OCR
- 機器學習入門實戰——基於knn的airbnb房租預測機器學習KNNAI
- 《深度學習——基於Tensorflow的實戰》公開課語音直播預告深度學習
- 基於PSO粒子群最佳化的CNN-LSTM的時間序列迴歸預測matlab模擬CNNMatlab
- 基於Python實現的口罩佩戴檢測Python
- 使用ul li實現的文章列表效果程式碼例項
- 使用jquery實現的清空表單元素程式碼例項jQuery
- jQuery實現圖片預載入程式碼例項jQuery
- Restlet - 基於Spring的Restlet開發例項RESTSpring
- 使用原生js實現選項卡功能例項教程JS
- 基於統計的預警:同環比預警實現深度剖析
- [機器學習實戰-Logistic迴歸]使用Logistic迴歸預測各種例項機器學習
- Vue例項方法之事件的實現Vue事件
- jQuery實現的動畫簡單例項jQuery動畫單例
- canvas實現的刮刮樂程式碼例項Canvas
- 實現Web桌面託拽的例項Web