蔣雯音
(寧波衛(wèi)生職業(yè)技術學院 寧波315100)
隨著全面“二孩”政策的放開,高齡和高危孕婦明顯增多,這給婦幼保健管理和婦產科相關人員帶來前所未有的挑戰(zhàn)。高危妊娠中早產(PTB)和低出生體重兒(Low Birth Weight,LBW)成為重點關注的問題。世界衛(wèi)生組織將早產兒定義為胎齡小于37周出生的新生兒,低出生體重兒是指出生體重在2 500克以下者。早產兒、低出生體重兒生命脆弱,抵抗力低下,容易患病導致死亡,是新生兒的脆弱人群,是圍產兒死亡的重要原因之一。世界衛(wèi)生組織呼吁社會更多地關注早產問題,加強相關研究,采取有效行動,從而增加預防、應對早產的辦法。
隨著存儲技術的發(fā)展和醫(yī)院信息化的深入,醫(yī)院數(shù)據(jù)庫積累大量的數(shù)據(jù),傳統(tǒng)的數(shù)據(jù)分析和處理方法無法獲得數(shù)據(jù)之間的隱藏信息和內在關聯(lián),但通過數(shù)據(jù)分析挖掘潛在知識、信息和規(guī)律的需求廣泛存在。機器學習(Machine Learning,ML)是利用已有數(shù)據(jù)訓練出模型,然后使用模型預測的一種方法。充分利用積累的原始數(shù)據(jù),應用機器學習方法建立早產兒、低出生體重兒的預測模型,以期對高危妊娠中早產和低出生體重兒預測和實施有效干預提供輔助決策,從而降低早產兒、低出生體重兒的出生率和病死率,提高出生人口質量。
2.1.1 邏輯回歸(Logical Regression,LR) 機器學習中的一種常用分類模型,主要用于二分類問題(即輸出只有兩種,分別代表兩個類別),通常是利用已知的自變量來預測一個離散型因變量的值。邏輯回歸基于Sigmoid函數(shù),算法主要思想是:用極大似然估計法來求模型參數(shù),通過建立似然函數(shù)L(θ),對其進行簡單變換后為損失函數(shù)J(θ),再用優(yōu)化方法(如梯度下降)迭代求解出最優(yōu)(即最小化損失函數(shù))的模型參數(shù)(θ)。由于算法具有計算量小、簡單、高效等特點,實際應用非常廣泛,主要應用于預測某些事件發(fā)生的概率。
2.1.2 支持向量機(Support Vector Machine,SVM) 在統(tǒng)計學習理論和結構風險最小原理基礎上發(fā)展起來的一種機器學習方法,其機器學習策略是結構風險最小化原則。主要思想是尋找一個最優(yōu)分割超平面,使得該平面兩側距超平面最近的兩類樣本之間的距離最大化,通過分割面將數(shù)據(jù)進行分類。具有全局最優(yōu)、最大泛化能力、推廣能力強等優(yōu)點,在解決小樣本、非線性及高維模式識別中表現(xiàn)出許多特有的優(yōu)勢,能夠推廣應用到函數(shù)擬合中,較好地解決許多實際預測問題[1]。
2.1.3 隨機森林(Random Foresrt,RF) 一種以決策樹為基本分類器,將多個決策樹進行組合來提高預測精度的集成學習方法。隨機森林的構建過程大致如下[2]:從原始訓練集中隨機有放回采樣選出m個樣本,共進行n次采樣,生成n個訓練集;分別訓練生成n個決策樹模型;對于單個決策樹模型,假設訓練樣本特征的個數(shù)為n,那么每次分裂時根據(jù)信息增益(或GINI指數(shù))選擇最好的特征進行分裂;每棵樹一直分裂直到該節(jié)點的所有訓練樣例都屬于同一類;將生成的多棵決策樹組成隨機森林。對多重共線性不敏感、準確率高,不容易過擬合,而且能處理維度很高的數(shù)據(jù)集,所以在眾多算法中較為突出。
本研究采用以上3種機器學習方法分別建立預測模型并進行比較,使用PyCharm作為集成開發(fā)環(huán)境,利用Python 2.7中numpy、pandas、matplotlib包進行數(shù)據(jù)處理和分析,應用機器學習包scikit-learn(簡稱sklearn)構建預測模型[3],進行模型測試和評估。
本研究數(shù)據(jù)來自寧波市某婦幼保健院的725例高危孕婦病例,根據(jù)《寧波市高危妊娠評分標準》并結合樣本數(shù)據(jù),初步選出高危妊娠因素共26個(其中每種危險因素分輕、中、重3個等級)。原始數(shù)據(jù)一般存在缺失值、冗余重復、格式不一致、維度高等問題,需要進行數(shù)據(jù)清洗和預處理工作。對于本研究數(shù)據(jù)集經過清洗異常樣本、插補缺失值、數(shù)據(jù)變換等處理,使數(shù)據(jù)格式和質量達到建模要求,生成最終可用于研究使用的樣本705條,數(shù)據(jù)集正負樣本比例,見圖1。在現(xiàn)實機器學習任務中通常還要做進一步的特征選擇[4],即選取對問題研究有用的屬性(相關特征),用于后續(xù)建立預測模型的輸入變量。本研究通過過濾低方差特征并根據(jù)自變量與目標變量間的關聯(lián)大小選擇特征,最終選取出14個特征作為預測模型的輸入變量,包括年齡、體重指數(shù)、遺傳病史、流產、異常分娩史、異常妊娠史、消化系統(tǒng)(肝損ALT、肝炎病毒)、內分泌系統(tǒng)(糖尿病、甲亢、甲低)、腫瘤(子宮肌瘤、卵巢腫瘤)、胎位、胎兒、試管嬰兒、不孕時間、宮高等常見高危因素。另外在數(shù)據(jù)集最后添加標簽列,設置生產早產兒或低體重兒的樣本標簽為1,正常嬰兒體重的樣本標簽為0??梢婎A測目標實際上就是一個二分類問題。
圖1 數(shù)據(jù)集正負樣本比例
建立模型前用sklearn.model_selection庫中的train_test_split函數(shù)先將數(shù)據(jù)集按比例隨機劃分為訓練集和測試集,語句如下:
X_train,X_test,y_train,y_test=
train_test_split(r_data,labels,test_size=0.3, random_state=20)
其中r_data是數(shù)據(jù)樣本的特征集,labels是樣本標簽(取值為1或0);參數(shù) test_size=0.3表示隨機抽取樣本的30%作為測試集用來測試模型性能,樣本的70%作為訓練集用于模型訓練;設定random_state參數(shù),是該組隨機數(shù)的編號,在需要重復試驗時可以保證得到一組相同的隨機數(shù),即保證每次試驗劃分的訓練集和測試集都是相同的。函數(shù)返回劃分后的訓練集和測試集以及各自對應的標簽,其中X_train和y_train分別是訓練數(shù)據(jù)的特征集及對應標簽,X_test和y_test分別是測試數(shù)據(jù)的特征集和標簽。
數(shù)據(jù)準備好后分別調用sklearn中的linear_model.LogisticRegression、svm.svc和ensemble. RandomForestClassifier類,即邏輯回歸、支持向量機和隨機森林3種分類模型分別對數(shù)據(jù)集進行訓練和預測。通過以下方式建立模型:
from sklearn import linear_model, svm, ensemble
lr_model = linear_model.LogisticRegression() #建立邏輯回歸模型
svm_model = svm.SVC() #建立支持向量機模型
rf_model = ensemble.RandomForestClassifier() #建立隨機森林模型
每種模型都有多個參數(shù),當使用不同的參數(shù)配置時會產生預測性能不同的分類器,需要進行參數(shù)選擇(即調參)。在實際訓練中結果對于訓練集的擬合程度通常較好,但是對于訓練集之外的數(shù)據(jù)的擬合程度通常較差。本研究利用交叉驗證方法[5],基本思想是將訓練數(shù)據(jù)集分為訓練集和驗證集,首先用訓練集對分類器進行訓練,再利用驗證集來測試訓練得到的模型性能。如10折交叉驗證就是將數(shù)據(jù)集分成10份,輪流將其中9份做訓練、1份做驗證,將10次結果的均值作為對算法精度的估計,由此可相對客觀地判斷這些參數(shù)對訓練集之外的數(shù)據(jù)的擬合程度,從而得到最優(yōu)參數(shù)和模型。利用GridSearchCV可系統(tǒng)地遍歷多種參數(shù)組合,通過網格搜索確定最佳效果參數(shù)(即模型調參)[6-7],形式如下:
from sklearn.grid_search import GridSearchCV
#通過GridSearchCV來尋求最佳參數(shù)空間
gs_model =
GridSearchCV(model_name, param_grid=params, cv=6, scoring='roc_auc')
其中model_name是上述建立的3種模型名稱(即lr_model、svm_model和rf_model),param_grid是需要優(yōu)化的參數(shù)取值,cv=6表示采用6折交叉驗證,scoring='roc_auc'表示以auc值作為評價標準,選取其值最高時的參數(shù)為模型最佳參數(shù)。各模型需要優(yōu)化的參數(shù)及其取值范圍名,見表1。
表1 各模型優(yōu)化參數(shù)取值
續(xù)表1
設置好模型和評價指標后用不同的參數(shù)通過fit()方法訓練模型,交叉驗證訓練模型后利用gs_model.best_params_屬性得到最佳參數(shù),運行結果如下。
邏輯回歸模型:
交叉驗證...
最優(yōu)參數(shù):{′C′:1}
支持向量機模型:
交叉驗證...
最優(yōu)參數(shù):{′C′:10,′gamma′:0.1}
隨機森林模型:
交叉驗證...
最優(yōu)參數(shù):{′n_estima tors′:100}
用gs_model.best_estimator_屬性獲得最優(yōu)模型,然后使用最優(yōu)模型的predict()方法進行預測,方法如下:
gs_model.fit(X_train, y_train) #訓練模型
best_model= gs_model.best_estimator_ #獲得最優(yōu)模型best_model
best_model.predict(X_test) #利用最優(yōu)模型進行預測
訓練好模型后使用python中的pickle模塊來保存和讀取模型,可利用此模型進行預測,實現(xiàn)語句如下:
import pickle
pickle.dump(best_model, f) #保存模型
model=pickle.load(f) #加載模型
模型訓練后得到不同分類算法的最優(yōu)模型,需比較不同算法模型的泛化性能,得到最適合本研究數(shù)據(jù)樣本的預測模型。在訓練模型前數(shù)據(jù)集的一部分作為測試集用來測試模型對新樣本的預測性能,以評估模型在實際使用時的泛化能力。用模型預測結果和測試集真實值構建混淆矩陣,利用sklearn.metrics模塊的accuracy_score、f1_score、roc_curve函數(shù)分別計算出不同模型的準確率、F1值、偽陽性率即錯誤命中率(False Positive Rate,F(xiàn)PR)和真陽性率即靈敏度(True Positive Rate,TPR),以FPR為橫坐標、以TPR為縱坐標繪制ROC曲線,見圖2。求得AUC值,AUC 能夠較好地評估模型的預測值與真實值之間的差異,3種模型評估結果,見表2。用y_test表示測試集真實值,y_train表示測試集預測值,predict_proba表示測試集預測概率,具體實現(xiàn)如下:
from sklearn.metrics import precision_score, f1_score, roc_curve,auc
accuracy = accuracy_score(y_test,y_train) #準確率
F1 =f1_score(y_test,y_train) #F1值
fpr, tpr, _ = roc_curve(y_test,predict_proba) #FPR和TPR
auc(fpr, tpr) #AUC值
圖2 3種模型的POC曲線比較
表2 3種預測模型評估結果
根據(jù)各項評估指標對3類預測模型的性能比較后發(fā)現(xiàn)隨機森林算法在測試結果中的各類指標上都高于其他兩種算法,AUC值為0.861 9,若設定合適的閾值,模型具有一定的預測價值。因此用隨機森林算法構建的模型更適合本研究數(shù)據(jù)集對于高危妊娠中早產和低體重兒的預測。最后利用基于隨機森林算法的預測模型得到所有特征的權重值如下。
各feature的重要性:[0.115 777 33、0.023 856、0.078 223 5、0.115 411 45、0.057 786 33、0.125 978 77、0.078 623 07、0.035 271 67、0.036 850 01、0.015 649 09、0.186 131 75、0.030 612 83、0.016 419 54、0.083 399 06]
其大小反映與該特征對應的高危因素對早產及低出生體重兒影響程度的大小。結果顯示在本數(shù)據(jù)集研究的各高危因素中導致早產和低出生體重兒的前幾位高危因素分別是雙胎及胎兒過大、疤痕子宮及附件手術史、年齡、流產(自然、人工)≥2次及自然流產≥3次。
本研究應用機器學習方法探索效果最佳的高危妊娠中早產和低出生體重兒預測模型,以常用分類器評估指標來評估模型預測性能,確定基于隨機森林算法的預測模型為適用于本研究的最優(yōu)模型,利用模型分析得到導致早產、低出生體重兒的主要高危因素。實驗結果一定程度上驗證隨機森林作為一種重要的基于Bagging的集成學習方法的優(yōu)勢,后期將會進一步研究和應用集成學習中的Boosting方法,繼續(xù)探索預測性能更優(yōu)的模型。此外還需要考慮與平臺的整合以實現(xiàn)實時的數(shù)據(jù)分析和預測,輔助醫(yī)生診斷,幫助醫(yī)生及時關注高危人群并采取有效措施,為臨床早期干預和妊娠期的關鍵監(jiān)測提供參考,也希望為機器學習在醫(yī)學輔助決策中的應用和發(fā)展做出一定的理論和實驗貢獻。