尹梓名 張震宇 胡曉暉 吳洪亮 樂珺怡黃偉杰 林勇
1.上海理工大學醫(yī)療器械與食品學院,上海 200093 2.上海康復(fù)器械工程技術(shù)研究中心,上海 200093 3.上海市浦東新區(qū)浦南醫(yī)院骨科,上海 200125
骨質(zhì)疏松癥(osteoporosis,OP)是一種最常見的骨骼疾病,是一種以骨強度下降和骨折風險增加為主要特征的骨骼疾病[1]。原發(fā)性骨質(zhì)疏松為骨質(zhì)疏松癥中的主要類型,且原發(fā)性骨質(zhì)疏松發(fā)生的概率隨著年齡增長而不斷增加。目前我國60歲以上人口已經(jīng)超過2.5億[2],而因為原發(fā)性骨質(zhì)疏松導致骨折每年的花費達到10億美元,所以原發(fā)性骨質(zhì)疏松也是導致老年患者致殘和致死的主要原因之一[3]。原發(fā)性骨質(zhì)疏松起病隱匿,且對其的診斷涉及到骨密度、骨折情況、骨代謝標志物、其他臨床特征和既往病史等多方面的因素,雖然目前診斷骨質(zhì)疏松的主要方法為根據(jù)各類骨密度識別骨質(zhì)疏松,但原發(fā)性骨質(zhì)疏松的臨床診斷較為復(fù)雜,醫(yī)生需要綜合臨床的各類特征信息做出診斷,目前尚無較為全面且易于使用的診斷模型。
隨著人工智能的迅速發(fā)展,在包括醫(yī)學的許多領(lǐng)域都顯示出了較好的效果并得到了廣泛的應(yīng)用,在骨質(zhì)疏松診斷和預(yù)測方面國內(nèi)外也有學者進行了研究。神經(jīng)網(wǎng)絡(luò)是人工智能機器學習中重要的一種方法,因此在骨質(zhì)疏松患者中使用BP神經(jīng)網(wǎng)絡(luò)進行輔助診斷預(yù)測取得到了不錯的效果[4-6]。其中包括分析患者既往病史,生活習慣等指標進行風險預(yù)測,疾病診斷并最終取得了不錯的效果。除此之外,機器學習中的其他經(jīng)典方法,例如支持向量機方法(support vector machines,SVM)通過學習骨質(zhì)疏松患者骨代謝標志物和其他骨密度指標進而對骨質(zhì)疏松診斷預(yù)測也有應(yīng)用[7]。通過支持向量機建立的模型對相應(yīng)的骨質(zhì)疏松問題有較好的預(yù)測結(jié)果。另外,在基因表達層面對基因與骨質(zhì)疏松關(guān)系進行學習也取得了不錯的結(jié)果[8]。此外,基于模糊邏輯的模糊決策樹算法在頸椎骨質(zhì)疏松疾病的應(yīng)用,較好地實現(xiàn)了對頸椎骨質(zhì)疏松類別和嚴重程度的預(yù)測和判斷[9]。
目前,針對骨質(zhì)疏松診斷的機器學習模型多數(shù)都是基于單一機器學習模型,存在精度有限、模型魯棒性低、過擬合風險高等問題。所以本研究考慮采用更加合理的集成學習方法,將單一分類器納入集成學習算法中,提出骨質(zhì)疏松診斷模型SAB-SVMKNN,期望可以提高骨質(zhì)疏松的診斷準確率。
本實驗采用的實驗數(shù)據(jù)是從上海市浦南醫(yī)院獲得的200例原發(fā)性骨質(zhì)疏松患者臨床數(shù)據(jù)。在這200例受試者中,經(jīng)綜合診斷為原發(fā)性骨質(zhì)疏松的患者數(shù)量為65例,骨量減少患者為102例,正常骨密度者為33例。數(shù)據(jù)包含受試者基本數(shù)據(jù):身高、體重、年齡等,受試者臨床檢查和化驗數(shù)據(jù):血糖、血紅蛋白、癌胚抗原等,受試者各部分骨密度數(shù)據(jù):腰2錐體骨密度值、腰1椎體骨密度值等,其相關(guān)特征屬性見表1。
表1 原始數(shù)據(jù)特征Table 1 Raw data characteristics
原始數(shù)據(jù)存在缺失值,離群值和屬性值范圍不統(tǒng)一的問題。缺失值、離群值問題:考慮到數(shù)據(jù)本身內(nèi)容較少,本文采用平均值代替的方法進行處理。對于因男女性別不同產(chǎn)生的固有屬性缺失值,使用0來填充進行處理。數(shù)據(jù)歸一化問題:為了消除不同屬性之間的量綱和單位影響,對不同種類的屬性值進行標準化,轉(zhuǎn)化為0~1的數(shù)值,這里使用min-max標準化方法,公式如下:
(1)
其中x*為歸一化后的值,x為對應(yīng)屬性原始值。數(shù)據(jù)不平衡問題:由于原始數(shù)據(jù)中不同類別對應(yīng)的樣本數(shù)目不相同且差異較大,這里使用SMOTE升采樣對數(shù)據(jù)進行增強:SMOTE是一種通過過采樣來合成更多少數(shù)類樣本的算法[10],通過這種方法將骨質(zhì)疏松類樣本(標記為0)和正常骨密度樣本(標記為2)的數(shù)量擴充至與骨量減少(標記為1)的樣本數(shù)量相同,其中骨量減少樣本數(shù)量為102,因此數(shù)據(jù)增強后的樣本數(shù)量為306個。
由于原始數(shù)據(jù)具有的特征數(shù)量較多,因此需要根據(jù)屬性相關(guān)性對屬性進行排序和篩選,這里使用多算子的特征排序方法,其示意圖見圖1。
圖1 特征選擇示意圖Fig.1 Diagram of feature selection
如圖1所示,對原始數(shù)據(jù)特征進行9種特征選擇算法計算屬性與最終診斷結(jié)果的相關(guān)性,再將相關(guān)性進行歸一化、求和并排序后,使用支持向量機單模型進行特征選擇,保留準確度最高時相關(guān)性較強的若干屬性。
集成學習(ensemble learning)是機器學習的分支領(lǐng)域,是一種可以將若干不同或相同的弱學習器通過集成方法提升為強學習器的思想和方法。集成學習被認為是目前用于提高經(jīng)典機器學習算法乃至深度學習算法性能的有效方法。
Adaboost算法:Adaboost是集成學習的一種算法[11],可以通過串行訓練若干弱學習器從而將其提升為強學習器。設(shè)數(shù)據(jù)集為D={(x1,y1),(x2,y2),…,(xm,ym)},則在初始狀態(tài)下,每一個樣本的權(quán)重為1/m,在每一輪訓練中,分類錯誤的樣本所占的權(quán)重會提升,從而使得該樣本在后續(xù)的分類中得到更高的關(guān)注。其中,每一個分類器的權(quán)重由下式給出:
(2)
其中,αt表示第t個學習器的決策權(quán)重,εt表示該學習器的分類錯誤率。另外,在每一輪訓練中,對屬性的權(quán)重更新方法為:
(3)
其中,Dt+1(x)表示下一輪中樣本的權(quán)重分布,Dt(x)表示當前樣本的權(quán)重分布,zt是令Dt+1滿足分布條件的歸一化因子,f(x)和ht(x)表示樣本的實際值和當前學習器的預(yù)測值。得到所有基學習器訓練好的模型后,集成學習最后的輸出如下所示:
(4)
最后的輸出為所有分類器按照自己權(quán)重決策的加權(quán)組合,最終以符號判別輸出。
Bagging算法:Bagging為另一種并行訓練若干基分類器并將其進行組合而達到集成分類目的的分類器[12]。其具體方法為通過從樣本中有放回采樣得到若干采樣集,分別訓練并綜合所有的分類器從而得到集成的結(jié)果,最后的輸出如下所示:
(5)
其中輸出值y為樣本實際值,且y屬于樣本輸出空間Y。I為指示函數(shù),學習器最終的輸出結(jié)果為所有基分類器投票的結(jié)果。
Stacking算法:Stacking是另一種可以集成多種異構(gòu)分類器的集成方法[13],其通過先訓練若干一級學習器,再將一級學習器的輸出作為二級學習器的訓練輸入,將原始樣本標記作為二級學習器的標記進行學習。Stacking算法的示意圖見圖2。
圖2 Stacking算法示意圖Fig.2 Diagram of the stacking algorithm
根據(jù)集成學習思想和方法的指導,本文構(gòu)建了面向骨質(zhì)疏松輔助診斷的機器學習模型SAB-SVMKNN,見圖3。在模型最外層使用Stacking集成模型,其中一級學習器分別使用一個Bagging算法和一個Adaboost算法,在這兩種算法中使用支持向量機分類模型作為串行和并行訓練所用的模型,由于一級學習器的輸出為二維的分類結(jié)果標簽,因此二級學習器使用KNN分類算法對一級學習器的結(jié)果進行進一步學習分類。根據(jù)特征相關(guān)性算法處理過的原始數(shù)據(jù)將會被分為訓練集和測試集進入骨質(zhì)疏松篩查識別模型。當前模型含兩個基學習器:一個為Adaboost集成算法,另一個為Bagging集成算法。因此訓練數(shù)據(jù)也被劃分為兩部分,將兩部分分別用作基學習器的訓練過程,再使用兩個模型分別對測試集數(shù)據(jù)進行預(yù)測,預(yù)測的結(jié)果會進行平均并作為次級學習器的預(yù)測樣本數(shù)據(jù)。
圖3 SAB-SVMKNN結(jié)構(gòu)示意圖Fig.3 Diagram of SAB-SVMKNN
從Stacking的結(jié)構(gòu)可以判斷,當構(gòu)成Stacking一級學習器的各個學習器之間差異越大時,模型對于更復(fù)雜問題的過擬合風險就會越低,所以在對骨質(zhì)疏松篩查模型使用兩種集成方式完全不一樣的集成學習模型時,可將篩查識別的準確率和篩查模型的泛化性能得到均衡的提升。
混淆矩陣:混淆矩陣也成為誤差矩陣,是在監(jiān)督學習中用以評價模型泛化預(yù)測性能的一種標準格式,通常使用n行n列的矩陣表示,見表2。其中以3分類舉例:則在實際值與預(yù)測值相同時代表模型對測試樣本的預(yù)測正確,其余均為預(yù)測與實際值不相等的情形。
表2 多分類混淆矩陣Table 2 Multi-class confusion matrix
(1)準確率(Accuracy):準確率定義公式如下:其表示分類正確的樣本數(shù)占總樣本數(shù)的比例。
(6)
(2)精確率(Precision):精確率指在對當前分類的預(yù)測中,正確分類的數(shù)量占所有預(yù)測為該分類數(shù)量的比率,以類0為例可由下式表示:
(7)
(3)特異率(Specificity):特異率指在對當前分類的預(yù)測中,正確判斷不是當前分類的數(shù)量占所有不是該分類數(shù)量的比率,以類0為例的特異率如下:
(8)
(4)召回率(Recall):召回率指對當前分類的預(yù)測中,正確分類的數(shù)量占所有真實該分類數(shù)量的比例,以類0為例的召回率可以表示為:
(9)
(5)F值(F-measure):F值為綜合精確度和召回率的平均值,其計算公式如下:
(10)
(6)Kappa系數(shù)(Kappa):Kappa系數(shù)是基于多分類問題所提出的用于衡量模型泛化預(yù)測性能和分類精度的計算指標。通過計算總體分類精度p0即準確率(Accuracy)和pe數(shù)值最終計算出Kappa值(Kappa),其中p0、pe和Kappa值的計算方法如下:
(11)
(12)
(13)
Kappa值計算的結(jié)果通常為0~1,根據(jù)模型性能和預(yù)測結(jié)果可以分為5個等級:0.0~0.2為極低的預(yù)測性能;0.21~0.40為一般的預(yù)測性能;0.41~0.60為中等的性能;0.61~0.80為高度的性能;0.81~1被認為具有極高的性能。
(7)Friedman檢驗(Friedman Test):Friedman檢驗是一種用于判斷多個樣本是否具有齊一性的檢驗[14],通過該檢驗可以確定研究模型最終的分類結(jié)果與同等數(shù)據(jù)條件下的其他對照模型是否有區(qū)別。
通過特征篩選挑選出的8類特征從高到低的重要性排序依次為:腰2椎體骨密度值、腰1椎體骨密度值、頸部骨密度值、大粗隆骨密度值、絕經(jīng)年齡、腰椎體骨密度均值、Ward’s三角區(qū)骨密度值和性別,其歸一化權(quán)重見表3。
表3 特征重要性與權(quán)重Table 3 Importance and weight of features
為驗證特征篩選的有效性,研究使用5種單模型機器學習算法、2種經(jīng)典集成學習算法和使用與本研究基分類器不相同的Stacking算法進行對比,該算法在Stacking內(nèi)部使用雙Bagging集成,一級學習器使用KNN,二級學習器使用樸素貝葉斯分類算法(簡稱SDB-KNNNB算法)對特征篩選前后的準確率、精確率均值、特異率均值、召回率均值、F值均值和Kappa值進行記錄。由于類別不平衡問題,模型均在使用SMOTE數(shù)據(jù)增強后進行訓練,實驗結(jié)果采用10折交叉驗證計算。其中1為準確率(%),2為精確率均值(%),3為特異度均值(%),4為召回率均值(%),5為F值均值(%),6為Kappa值。各模型特征篩選前性能見表4。
表4 多種模型對比結(jié)果(特征篩選前)
表5為經(jīng)過特征篩選后各個模型的性能,其中1為準確率(%),2為精確率均值(%),3為特異度均值(%),4為召回率均值(%),5為F值均值(%),6為Kappa值。
表5 多種模型對比結(jié)果(特征篩選后)
通過比較研究方法與相應(yīng)對照試驗的顯著性區(qū)別,選用Friedman檢驗將特征篩選后本文所建模型的預(yù)測結(jié)果與對照模型的預(yù)測結(jié)果進行Frideman檢驗,其秩結(jié)果見表6,最終結(jié)果見表7。
表6 Frideman檢驗的秩Table 6 Rank of Friedman test
表7 Frideman檢驗結(jié)果Table 7 Results of Friedman test
由表1可得,在特征篩選前,準確率最高的模型為基于SVM基分類器的Adaboost模型,準確率為85.95%,且其F值均值也為最高,F(xiàn)值較本研究模型SAB-SVMKNN高5.65%。此外,SVM單模型、邏輯回歸、神經(jīng)網(wǎng)絡(luò)的模型準確率也較高,均在80%以上。經(jīng)過特征篩選后,所有模型均獲得了性能提升,其中提升最為顯著的為SAB-SVMKNN模型,準確率提高了18.63%,F(xiàn)值均值提高了14.39%。經(jīng)過特征篩選模型性能變化最小的為SVM單模型,其準確率約提升了2.62%,F(xiàn)值均值提升了2.54%,Kappa值提升了0.042。經(jīng)過特征篩選后,KNN模型、基于KNN的Bagging分類和SDB-KNNNB分類的準確率也提升較高,均在10%以上,說明了特征篩選的有效性。
從Frideman檢驗的結(jié)果可以看出,表4得出的雙尾P統(tǒng)計量約為0.011,小于0.05,因此可以認為本方法提出的模型與其他各模型之間的預(yù)測結(jié)果具有顯著性差異。
本文根據(jù)臨床獲得的200例原發(fā)性骨質(zhì)疏松臨床患者的體檢數(shù)據(jù)和各項骨密度數(shù)據(jù)出發(fā),首先通過9種不同相關(guān)性算子對31項骨質(zhì)疏松特征進行了特征相關(guān)性分析,并通過算法將其結(jié)合以得到特征相關(guān)性排序。使用各模型綜合對數(shù)據(jù)進行特征篩選訓練,得出了使得模型精度最高的8類特征及其排序,為原發(fā)性骨質(zhì)疏松臨床診斷提供了參考。并在此基礎(chǔ)上使用基于Stacking的集成學習方法,通過集成進一步提高了單模型的預(yù)測精度,與此同時使用雙層集成也降低了模型潛在的過擬合問題。由于無關(guān)性特征的干擾,SAB-SVMKNN模型在特征篩選前的性能并不突出,在特征篩選之后模型的性能得到了大幅度的提升,進一步說明在模型特征選擇階段對于模型構(gòu)建的重要性。
本模型使用的內(nèi)部集成算法Adaboost和Bagging均使得基分類器進行了10次迭代。在后續(xù)的研究中將嘗試其他的迭代次數(shù)以期進一步提高模型的性能。此外,本研究嘗試將神經(jīng)網(wǎng)絡(luò)加入集成模型進行訓練但實際性能較低,原因可能為當前數(shù)據(jù)不適合使用神經(jīng)網(wǎng)絡(luò)進行訓練和預(yù)測,對于特征選擇的權(quán)重數(shù)值,在本研究中只起到了特征的重要性比較和排序作用,故在后續(xù)的研究中嘗試將對應(yīng)的特征權(quán)重數(shù)值與實際模型結(jié)合起來,再嘗試使用融合了特征權(quán)重值的數(shù)據(jù)對神經(jīng)網(wǎng)絡(luò)進行訓練,將更加合適的神經(jīng)網(wǎng)絡(luò)加入本模型中,使得本研究中的模型進一步提高數(shù)據(jù)屬性的利用效率,增強預(yù)測的精確度和適應(yīng)性。
本文介紹了一種基于人工智能方法,使用多種特征相關(guān)性權(quán)重計算原發(fā)性骨質(zhì)疏松臨床屬性重要性的特征選擇算法,通過算法確定了對于原發(fā)性骨質(zhì)疏松診斷影響最大的若干特征及其具體的重要性權(quán)重,對于診斷具有重要意義。并在此基礎(chǔ)上提出了一種對于臨床診斷具有重要意義的預(yù)測模型,經(jīng)過與其他模型的對比,其分類預(yù)測的精度更高,采用集成學習設(shè)計的模型對新數(shù)據(jù)的適應(yīng)性更強,有效地增強了模型的魯棒性。本模型對于醫(yī)生在原發(fā)性骨質(zhì)疏松臨床診斷具有重要參考意義,有助于提高臨床醫(yī)生對于原發(fā)性骨質(zhì)疏松診斷的準確率。