
背景數據描述
膽固醇、高血脂、高血壓是壓在廣大中年男性頭上的三座大山,如何有效的監控他們,做到早發現、早預防、早治療尤為關鍵,趁著這個假期我就利用TF2.0構建了一套時序預測模型,一來是可以幫我預發疾病,二來也可以體驗下TF2.0的特性
先來看下數據結構:

- date表示的是測量日期
- cholesterol代表膽固醇數值
- blood_fat代表血脂
- blood_pressure代表血壓
整個的建模思路就是將這三個數值一起構建時序模型,因為這三個指標不能獨立來看,他們是相互有影響的,互為特征和目標值。
代碼詳解
廢話不多說,我們先看下完整的代碼,代碼比較長,我把整個代碼分為數據探查、網絡構建、模型訓練、模型保存和預測這4個模塊進行拆分并講解,可以參見代碼中的注釋進行模塊區分。環境使用的是python3.7、TensorFlow2.0版本。(完整代碼見文末)
1數據探查
在數據探查模塊使用了pandas將數據讀取進來,然后用diff函數構建了時序數據的增長率曲線圖,因為做時序數據預測,更多地是去看數據的增長或者降低趨勢。通過matplotlib可以把數據的成長曲線畫出來:

2網絡結構構建
使用的是標準的lstm網絡結構,可以通過model.summary函數將深度學習網絡結構打印出來,如下圖所示:

3模型訓練
在模型訓練環節主要是構建了收斂函數MSPE,MSPE是一種殘差收斂算法,具體計算公式比較簡單:
(y_true - y_pred)**2/(tf.maximum(y_true**2,1e-7))
4模型存儲和預測
第四部分先使用model.save這個TF的官方模型保持函數將模型保存到本地,建議盡量使用這種官方的模型保持方案。

然后load模型對象,用model.predict函數對下一階段的3個指標數據做一個預測。最終的預測結果存放在arr_predict對象中,預測結果為:
[[0.26552328,0.33151102,0]]
以上預測的是數據的增長率,假設最后一階段的三個指標的數據分別為4.5、3.2、119,那么最終下一階段的預測值就是:
[[4.5+0.26552328,3.2+0.33151102,119+0]]
完整代碼如下,有興趣的同學可以跑一跑玩一玩。
import