背景数据描述
胆固醇、高血脂、高血压是压在广大中年男性头上的三座大山,如何有效的监控他们,做到早发现、早预防、早治疗尤为关键,趁着这个假期我就利用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