蔣淮?,譚 浪,李時杰,劉 昱,王峻峰
(1.天津大學 微電子學院,天津 300072; 2.北京智芯微電子科技有限公司,北京 102200; 3.云南省第一人民醫院,昆明 650031)
高血壓是一種嚴重威脅人類健康的慢性病,根據美國高血壓控制委員會制定的標準[1],反復測量的收縮壓超過14 mmHg或舒張壓超過90 mmHg可認定為高血壓。英國權威雜志《柳葉刀》(The Lancet)2017年的研究顯示[2],1975年全球高血壓患病人數為6×109,到2015為止增加至11×109,患病人數幾乎翻了一倍;在世界范圍內每年有750×104人死于高血壓或由其引發的并發癥。 中國“十二五”高血壓抽樣調查結果顯示,2017年中國有2.45×109的成年人為高血壓患者,占成年人比例的23.2%;有1.25×109人不知道自己是否患有高血壓,此人數超過患者人數的一半;此外1.5×109的患者未使用藥物進行治療,只有約3 700×104的高血壓患者得到了控制;而處在高血壓的邊緣人數也達到了4.35×109[3]。目前高血壓在中國呈現低知曉率、低治療率、低控制率的形勢。
影響血壓狀況的因素有很多,如性別、年齡、吸煙、肥胖以及不健康的飲食等,有諸多研究在這方面進行探索[4-6],結果顯示不良的飲食是高血壓形成與發展的重要影響因素。日常生活中飲食與人密切相關,合理的飲食可以促進身心健康和預防疾病,而飲食可以理解為營養成分攝入,因此不同種類和數量的營養成分攝入會影響疾病的發生以及人們的健康狀況。研究也證實了飲食營養與血壓值存在一定關系,如高血壓患者的血壓與膳食中鈉攝入成正相關[7];高血壓患者血漿中的總包和脂肪酸含量較正常人更高,脂肪與血壓成正相關[8];服用維生素A、C、E能降低高血壓患者的血壓尤其是收縮壓[9]。
高血壓早期因無明顯癥狀而不易被發現,很難引起重視,若能及早發現問題,通過合理飲食及相關醫療措施,可有效控制并避免后期引起并發癥。飲食在高血壓的發生及發展中都起到很大作用,所以建立一種通過分析營養成分來預測高血壓的模型十分必要。近年來,有學者在高血壓的風險因素分析以及預測方面進行了研究,但通過飲食營養來預測高血壓的研究較少,方法體系還不成熟。如Dong 等[10]通過改進的反向傳播神經網絡算法研究了高血壓的影響因素,包括遺傳因素,生活方式因素,肥胖和合理飲食。Sinkuo chai等[11]基于數據挖掘技術建立了高血壓并發癥的預測模型。張偉等[12]提出了一種改進的C4.5決策樹算法,通過使用住院患者的醫療相關數據來預測高血壓,最終獲得了81.58%的準確率。Nimmala等[13]通過基于AAA的J48分類器使用年齡、憤怒和焦慮程度來預測高血壓,獲得了84.30%的準確率。以上研究成果對高血壓的發生機制進行了深入探討,但研究數據主要為影響高血壓的一般特征,且使用的分析預測模型較為單一,對比性不強。
因此,以營養成分為主要特征,以年齡、身形體態等一般特征為輔助特征,結合機器學習、統計學習等相關技術提出了一個高血壓預測的五階段方案,并搭建了基于XGBoost的分析營養成分預測高血壓模型,結果顯示所提出的預測模型具有較高準確率、精確率、召回率與F1分數。此外還針對高血壓預測中不同營養特征的影響因子完成風險分析,分析結果可以幫助醫生以及患者提早發現問題,采取措施或進行治療,降低醫療成本并提高患者生存率。
通過對問題進行分析和解構,筆者要實現高血壓預測需要經過以下步驟:1)需要將人的飲食數據轉換為所需要的營養成分數據,并篩選出有利于模型預測的一般特征;2)處理得到的營養成分和一般特征數據會伴隨著缺失等問題,需要對數據進行清理;3)分類模型可分為二元分類和多元分類模型,通過分析人的每天營養成分攝入以及相關特征來預測高血壓為二元分類任務,需要搭建相應的二元分類模型來實現預測。據研究提出了一個5階段方案,具體流程如圖1所示。

圖1 預測高血壓五階段方案流程圖Fig. 1 Flow chart of five stage scheme for predicting hypertension
本次實驗的數據來自于中國營養與健康調查(CHNS, china health and nutrition survey),該項目由中美合作,從20世紀80年代起對中國多個地區居民的飲食結構和營養狀況等變化進行追蹤研究,至今共進行了10次調查,其所有研究調查數據面向公眾開放,詳細信息請參見[14]。CHNS調查時間跨度較大,因此實驗只選擇從2006年開始的最近3次調查的數據進行分析。CHNS數據并未直接提供研究所需的營養成分數據,而是記錄了調查期間每個人食用的食物名稱及重量,以及相應的身高、體重、臀圍、頭圍等基本信息和每個人的血壓值。因此對調查數據做出以下處理:
CHNS所提供的食物數據包含食物消耗量和相應的食物代碼,中國疾病預防控制中心營養與食品安全研究所發布的中國食物成分表包含了每種食物的食物代碼,以及每100g食物所含有的26種營養成分的數量[15],研究使用MySQL搭建數據庫建立2個字段之間的關系,將CHNS食物數據轉換為對應的26種營養成分數據。
CHNS同時提供了被調查者的血壓值檢測數據,據統計約有60%的人進行了連續3次測量,30%進行了2次測量,10%左右的人只有一次測量結果或者沒有記錄數據。高血壓診斷需要進行多次反復測量,因此只選擇了包含3次的測量結果數據。之后對高壓與低壓分別取平均值,若高壓≥140 mmHg或者低壓≥90 mmHg,則視為高血壓,標記為01作為正樣本;否則為非高血壓,標記為10作為負樣本。
通過前面處理辦法,將飲食數據轉換為所需的營養成分數據,并首先選擇了這26種營養數據作為預測模型的主要特征。考慮到不同年齡段人們的飲食習慣和結構不同,如年輕人由于工作和其他原因更傾向于食用高碳水化合物和高能量的食物,總體攝入量相對較高。老年人則傾向于食用低碳水化合物、高纖維的食物。此外,不同身形的人的飲食攝入也有差異[16]。因此,希望將年齡和身形體態作為預測模型的輔助特征,從而使預測結果更加合理準確。CHNS數據庫中給出了每個調查者的身高和體重,通過身高和體重可以計算出每個人的身體質量指數(BMI, body mass index)來表示個人的身形。
為了更好地驗證上述想法,需要使用特征選擇方法從全部特征中剔除不相關或者冗余的特征來減少特征個數,從而提高模型精確度及減少運行時間,使構建出來的模型更好。本實驗為二分類問題,故采用單變量特征選擇方法驗證年齡與BMI值是否可作為本分類實驗的特征。單變量特征選擇方法有4種,選擇了適合二元分類任務的SelectKBest方法,SelectKBest中的score_func參數選擇f_classif,它會計算單變量與訓練目標之間的方差分析F值(Anova F-value),F值越大,說明特征影響分類結果越大。選擇了CHNS數據庫中提供的基本信息,包括參與者的性別、出生年份、上臂圍、三頭肌皮褶、臀圍、腰圍以及要驗證的年齡和BMI作為變量特征進行驗證。最終將輸出結果由高到低排序,如表2所示。

表2 SelectKBest特征選擇結果
從表中可知,年齡與BMI的F值分別為374.47、145.97,明顯高于其他特征的F值,說明年齡與BMI可以作為預測高血壓分類模型的特征,而性別、臀圍等基本信息的F值過低,則直接剔除。最終,預測高血壓分類模型選擇26種營養成分數據以及年齡與BMI共計28維,作為輸入特征。
在機器學習領域中獲得的原始數據通常伴有缺失值,即數據集中某些特征屬性的值不完全。為了保證數據完整性,利于模型準確預測,需要判斷缺失值的類型并完成填充。機器學習中常用的處理缺失值的方法有人工填寫、特殊值填寫、均值填充、中位數填充、多重插補等。由于營養數據特征是通過飲食記錄轉換而來,因此若飲食記錄有缺失,數據本身的性質無法使用上述方法進行填充,所以這一部分缺失數據直接刪除。年齡和BMI 2個特征本身缺失值比例小于5%,這一部分缺失值對整體模型預測影響不大,故使用中位數填充進行替換。
研究顯示,18歲及以下未成年人的血壓會隨著年齡、身高的增長以及體重的增加在標準范圍內升高[17],若非家族遺傳,很少患有高血壓,所以這一部分數據不具有代表性,為了更好地評估模型準確性,刪除了18歲及以下未成年人的數據。通過整個數據清理過程,最終得到了包含28個特征的1 582個數據樣本,包括826個患高血壓的正樣本與756個未患病的負樣本,比例接近1∶ 1。
由于輸入特征主要是每日營養成分攝入量,種類繁多且單位不同,同時某些營養特征的總體方差過大,可能會導致一些機器學習算法的主目標函數阻止參數估計其學習其他特征,造成很難收斂或不能收斂的狀況。數據標準化是將數據按比例縮放,使之落入一個小的特定區間,可以將其轉化為無量綱的純數值來去除數據的單位限制,便于不同單位或量級的指標能夠進行比較和加權。因此對數據集進行了標準化處理,使每個特征值的平均值為0,方差為1,相當于轉化成為標準正態分布即高斯分布。標準化的公式如下
其中:xi指的是數據集中特定維度的所有數據;min(x)是數據集中同一維度的最小數據;max(x)是數據集中同一維度的最大數據;x′表示標準化數據的值。
XGBoost(extreme gradient boosting)又稱極端梯度提升,由Chen等于2014年開發和推出[18],并且在近年來的Kaggle比賽中取得非常突出的表現。XGBoost是基于梯度提升決策樹(GBDT)的改進算法,通過boosting思想將個體學習器組合在一起,產生依賴關系,同時可以有效構建提升樹且并行運行。XGBoost算法因其運算快速、高效準確、泛化能力強等優點廣泛應用于分類與回歸領域。其核心概念是通過添加樹,擬合最后預測的殘差來學習新功能,然后獲得樣本得分,通過將每棵樹的分數相加,可以得出樣本的最終預測分數。對于具有m個特征的n個標記樣本,使用K個加法函數預測分數的公式如下
F={f(x)=wq(x)(q:Rm→T,w∈RT)},
(3)
其中:F是回歸樹的空間;f(x)是其中一個回歸樹;wq(x)表示每個T葉樹的獨立結構分數。XGBoost的目標函數被定義為

其中:l代表了模型的損失函數;Ω是正則化項;T表示葉節點的數量;w是葉節點的分數;γ與λ代表了防止過度擬合的控制系數。當生成第n棵樹時,預測分數公式可以寫成

為了加速優化,使用泰勒二階展開式
通過添加樣本的損失函數,重新組合樣本,最后利用頂點公式求出最優的w以及目標函數公式L如下
Gi=∑i∈Ijgi,
(11)
Hi=∑i∈Ijhi。
(12)
XGBoost在尋找最佳分割點時結合了傳統的貪心算法以及近似算法,根據百分位法列舉幾個可能成為分割點的候選項,然后根據式(9)、(10)計算出最佳分割點。XGBoost使用多種方法來避免過度擬合,例如引入正則化、行采樣以及特征采樣,同時還增加了對稀疏數據的處理。此外XGBoost還具有其他的優勢,例如能進行并行處理,使速度有了很大提升;具有高度的靈活性,可自定義優化目標與評價標準;內置交叉驗證,允許在每一輪boosting迭代中使用交叉驗證。綜合以上XGBoost在分類算法中的優勢,選擇了XGBoost作為通過分析營養成分預測高血壓的模型。
通過分類算法搭建模型并最終實現高血壓預測,需要通過定義算法函數、調用函數搭建網絡模型、訓練與驗證模型、期間調整參數及最后測試與評估模型等步驟。
基于XGBoost的高血壓預測模型的設計流程圖如圖2所示,具體流程如下:首先定義算法函數,調用XGBoost函數搭建網絡模型;隨后設定初始參數并輸入訓練集,進行模型訓練,每訓練一次調整一次權值,直到訓練誤差最小或達到要求的最高訓練次數1 000次;訓練后存儲當前網絡文件,輸入驗證集,對比評估指標來確定需要人工手動調整的參數是否最優,如此循環直到所有參數全部最優;隨后進入測試階段,對模型評估獲得相應指標,完成通過分析營養成分預測高血壓的分類實驗。
互聯網企業關于員工的培訓主要包括新員工培訓和優秀外出學習培訓。雖然新員工入職后有相應地提升員工技能的培訓環節,但后續的培訓形式主要為員工定期參加外部培訓公司的課程活動。企業雖有設置內部培訓但并沒有形成系統的員工培訓體系,使得公司外部與內部培訓未能很好結合。這從一定程度上來說,這既增加了企業的培訓運營成本,又無法有效地達成企業所制定的發展目標。

圖2 XGBoost建模流程圖Fig. 2 XGBoost modeling flow chart
目前的研究中很少有通過分析營養成分來預測患高血壓風險的模型,提出了通過分析營養成分來預測高血壓的5階段方案,搭建了基于XGBoost的高血壓預測模型,同時與多種常見機器學習分類算法進行對比來驗證模型的有效性。算法包括隨機森林(RFs, random forest)、支持向量機(SVM, support vector machine)以及人工神經網絡(ANN, artificial neural network)。RFs主要利用的是集成學習中的bagging算法,將多棵樹集成到一同分類,樹與樹之間關系為并行,互不影響[19]。SVM作為一種機器學習的有監督分類方法是建立在統計學習理論的VC維理論和結構風險最小原理的基礎上,根據有限的樣本信息在模型的復雜性和學習能力之間尋求最佳平衡[20],它在解決小樣本、非線性以及高維模式識別中表現出諸多優勢。ANN是一個局部最優解的分類和預測算法,由大量神經元相互連接而成, 每個神經元節點都是一些動態的權重參數,ANN的學習過程是對大量樣本進行歸納學習,然后內部進行自適應,過程中各個神經元節點調整相應權重,使神經網絡處于穩定的范圍且權重收斂[21]。這些對比算法的建模過程從形式上與XGBoost有相同部分,不同點在于SVM中有4種核函數,本實驗中的特征個數遠小于樣本個數,故選擇了徑向基核函數;RFs衡量分裂質量的性能函數選擇為entropy,即為信息增益的熵;ANN需要確定隱藏層以及各個層神經元個數,由于輸入特征為28個,經過實驗最終選擇28-56-56-2的神經元結構,其中包括1個輸入層、1個輸出層和2個隱藏層。
在完成分類模型構建之后,需要對模型的效果進行評估,在二分類問題中評價模型最簡單也最常用的是準確率(Accuracy),但若數據集正負樣本不均衡,準確率并不能很好地評估模型的有效性,因此引入精準率(Precision)、召回率(Recall)以及F1分數(F1_score)[22],具體公式如下

其中:TP為真正類,即實際是正類且預測也為正類的個數;FP為假正類,即實際是負類但預測為正類的個數;TN為真負類,即實際是負類且預測也為負類的個數;FN為假負類,即實際是正類但預測為負類的個數。
除了以上指標,還使用ROC(receiveroperatingcharacteristic)曲線,是反應特異性與靈敏度這2個連續變量的綜合指標,它以平面曲線圖的形式來全面且客觀地對模型以及系統進行分析和評估[23]。ROC曲線以真正類率(TPR,truepositiverate)為y軸,以假正類率(FPR,falsepositiverate)為x軸,x、y兩軸取值范圍均為0~1。當FPR值保持不變時,TPR值越大,曲線越接近(0,1)點,表明模型越好越穩定。ROC曲線下面積即AUC(areaunderroccurve)值,用來直觀地反應ROC曲線圖的情況,AUC值越接近1則代表ROC曲線越接近(0,1)點,說明模型的分類性能越好。
以上為提出的高血壓預測的五階段方案,通過數據轉換得到了所需要的營養成分數據;通過特征選擇確定了以26種營養成分為主要特征,年齡與BMI為輔助特征的28維特征;通過數據清理與標準化去除了數據冗余,提高了模型運算速度和準確度;在模型搭建中選擇了運算速度快、準確率高、泛化能力強的XGBoost模型;最終通過與其他分類模型一同比較評估來驗證提出的方法與模型的有效性。

表3 4種分類算法結果對比
從表中可以看出,包括XGBoost在內的4種分類算法的測試準確率與F1分數均超過0.72,其中準確率最低為0.721,最高為0.857;F1分數最低為0.759,最高為0.859。由SVM和ANN這2個分類算法得到的準確率與F1分數均低于0.80,說明這2種算法解決本分類問題的能力較差;RFs與XGBoost的準確率與F1分數均超過0.80,性能較好。其中與RFs相比,XGBoost獲得了0.857的最高的準確率與0.859的最高的F1分數,同時召回率為0.926,精確率為0.804也為最高。因此,綜合以上指標可以得出,XGBoost為通過分析營養成分預測高血壓的最佳模型。
由于實驗測試所用試數據集正負樣本并不是完全的1∶ 1,為了更好地比較這4個分類算法的性能,畫出了測試過程中4個分類算法的ROC曲線圖,并將其組合到了一張圖中,具體如圖3所示。其中不同的顏色代表不同分類算法的ROC曲線,藍色點劃線為XGBoost,綠色點劃線為RFs,紫色點劃線為SVM,紅色點劃線為ANN。從圖中可以看出XGBoost的ROC曲線更接近(0,1)點,分類效果最好,而ANN的ROC曲線離(0,1)點最遠,分類效果最差。此外還可以通過對比ROC曲線下面積即AUC值,來更加直觀地看出算法分類的效果,具體如表4所示。

圖3 4種分類算法的ROC曲線圖Fig. 3 ROC curve of four classification algorithms

表4 4種分類算法AUC值
從表中得知XGBoost的AUC值最高且超過了0.9,而其他各個算法的AUC值均未超過0.9。通過觀察這4種分類算法的ROC曲線與AUC值得出的結論與表3中評估指標得出的結論相同。搭建的基于XGBoost的通過分析營養成分預測高血壓的模型,擁有較高的準確率、精確率、召回率與F1分數,分類效果好,穩定性強。
由于XGBoost中參數較多,借助網絡搜索(GridSearchCV)方法來優化XGBoost中需要手動調整的參數。最終XGBoost模型達到最佳效果時的最佳參數如表5所示。

表5 XGBoost的最佳參數
表中共展示了XGBoost的7種可變參數,每個參數都有不同的含義,其中learning_rate為算法的學習率,控制每次迭代更新權重的步長,默認值為0.3,選取的最佳參數為0.01;n_estimators為總的迭代次數即基礎學習器的個數,通常以樹的形式存在,默認值為10,選擇的最佳參數為1000;max_depth代表樹的最大深度,默認值為6,典型值為3~10,值越大越容易過擬合,選取的最佳參數為3;min_child_weight是最小葉子權重,默認值為1,典型值為2~10,值越小越容易過擬合,選取的最佳參數為5;gamma為懲罰項系數,是指定節點分裂所需的最小損失函數下降值,默認值為0,選取的最佳參數為0.3;subsample表示用于訓練模型的子樣本占整個樣本集合的比例,默認值為1,取值范圍為0~1,選擇適當比例可防止過擬合,選擇的最佳參數為0.75;colsample_bytree代表用于訓練模型的特征占全部特征的比例,默認值為1,取值范圍為0~1,本文選擇的最佳參數為0.85。
通過算法進行分類最重要的部分是用于進行預測的特征,某些特征在預測中 起到非常重要的作用,因此為了進一步探索營養成分與高血壓之間的關系,以及驗證模型的有效性與穩定性,引用了特征重要性分析。在前面的實驗中XGBoost模型驗證為營養成分預測高血壓的最佳模型,而XGBoost可以根據結構分數的增益作為某個特征的分割點,特征的重要性得分可以用特征在所有樹中被調用出現次數的總和表示。在調參最優的XGBoost中,根據特征重要性排序,最終獲得了影響高血壓分類的前12個特征,具體如表6所示。

表6 影響高血壓分類的前12個特征
表中特征重要性得分從高到低排序,可以看出影響高血壓分類的前2個因素是年齡和BMI值,它們的特征重要性得分分別為301和225,不同年齡和不同身形的人的飲食結構不同,也就是說年齡和BMI值影響著其他營養成分特征,且隨著年齡增長和體重增加,高血壓的患病率會逐漸上升,所以年齡與BMI值處于前2個位置是合理的。排名在3~12的營養成分特征分別是:脂肪(Fat)、維生素C(VC)、鐵(Fe)、鈉(Na)、鎂(Mg)、碳水化合物(CHO)、維生素E(VE)、鈣(Ca)、維生素B2(VB2)、膽固醇(CHOL)。
文獻[7-8]中指出膳食中鈉的攝入與脂肪的攝入與人的血壓成正相關,文獻[9]中指出服用維生素C對降低高血壓患者的血壓值具有一定的作用,而鈉、脂肪與維生素C在高血壓預測模型中的營養成分特征重要性得分中也排在前5位。文獻[24]指出對抑制高血壓有積極影響的營養成分有鎂、鈣、鉀和膳食纖維,對抑制高血壓有消極影響的營養成分有鈉和碳水化合物,其中鎂、鈣、鈉以及碳水化合物這4種,也位于XGBoost模型獲得的影響高血壓分類的營養成分的前10位。
對高血壓的預測問題展開了深入研究,在現有的幾種以醫療相關指標與一般信息為主要特征的高血壓預測方法的基礎上,針對膳食營養與血壓值之間的聯系,提出了一種通過分析營養成分預測高血壓的五階段方案,搭建了基于XGBoost的高血壓預測模型,通過分析個人日常攝入的營養成分信息以及年齡與BMI來預測其是否患高血壓。從實驗結果來看提出的方法獲得了85.7%的準確率以及0.859的F1分數,相比其他分類算法均為最高,驗證了提出的高血壓預測五階段方案的可行性;通過特征重要性分析,獲得了影響高血壓的前10個營養成分,對比各類文獻可知,鈉、脂肪、維生素C、鎂、鈣以及碳水化合物對高血壓的影響與現有醫學結論相同,從而驗證了模型的有效性。