JiunYi Yang
摘要
聽眾可以透過本講題更了解: 如何以 Python 套件進行資料前處理與轉換、特徵篩選、建構 GBDT分類器、長短期記憶模型(LSTM) 架構。過程中使用套件將在有限時間內聚焦介紹 pandas, multiprocessing, GBDT(xgboost/lightgbm), tensorflow.Keras,並比較兩種模型成效數據。 本講題分享應用案例:透析用低血壓預測模型研究。透析用低血壓是末期腎臟病病患在進行血液透析時,最常見的併發症問題;若不即時處理,嚴重將導致各種心血管、大腦的合併症狀。而現況限制是血壓儀器的測量頻率最高只能每 30 分鐘一次,存在量測前就發生低血壓的風險;『因此提前預測下一次量測時是否發生低血壓,將有助於醫護人員提前注意該病患狀況。』 本研究目標為預測該病患下次量測是/否會出現低血壓,為二元分類問題,搭配特徵篩選找出較佳模型:lightGBM (AUC: 0.954)、LSTM (AUC: 0.966),最終使用 Blending Ensemble 得到最佳模型 (AUC: 0.975, Sensitivity: 0.942, Specificity: 0.88)。
說明
pandas 在本研究中用於處理數值表格和時間序列資料結構。原始資料共 46 位病患,共 21,409 筆血壓量測紀錄、739,618 筆相關儀器量測數據,經過缺失值填補、異常值排除、以2分鐘為一筆資料的時間單位將多份資料集合併,最終剩餘 7,112 筆血壓量測紀錄、128,741 筆合併數據,維度共 179 項特徵欄位。接著,依據血壓量測點對標上一次量測的前 60 分鐘,為訓練資料範圍,序列過長則從時間較遠處截斷、時間長度不足則從時間較遠處補0 (padding)。最後,將要進行 GBDT 分類預測的資料集做聚合平均、要進行 LSTM 分類預測的資料集,shape: (7112, 179),根據每次血壓量測的對標點產生序列訓練資料,格式為 .npy,shape: (7112, 30, 179)。
載入數據的過程使用 multiprocessing 進行多執行緒處理,所需時間從30分鐘減少至6分鐘。
本研究的機器學習分類器中使用到數種 GBDT 算法。如 xgboost 基於 Gradient Boosted Decision Tree (GBDT) 的改良與延伸,透過貪婪演算法,在樹的每層建構過程中優化目標函式的最大增益;lightgbm 與 xgboost 不同的是對增益最大的節點進行深入分解,如此一來節省大量分裂節點產生的成本。
本研究為了測試深度學習中的 RNN 家族是否在時間序列上的預測更佳,選擇較經典的 LSTM 及 GRU,並以 tensorflow.Keras 架構神經網絡。tf.keras 是 TensorFlow 的高階 API,用於建構及訓練深度學習模型。
使用 GridSearchCV 對機器學習模型進行參數搜尋;而神經網絡超參數搜尋則應用開源套件 Hyperas 實作
套件相關連結:
pandas
multiprocessing
scikit-learn
xgboost
lightgbm
tensorflow
hyperas
內文引用相關文章:
*註1:Best Language for Machine Learning | springboard
影片