方克邦, 張?jiān)迫A
(浙江理工大學(xué) 信息學(xué)院, 杭州 310018)
隨著社會(huì)的發(fā)展和人們生活方式的轉(zhuǎn)變,高血脂癥的發(fā)病率在逐漸升高,給人們的健康帶來極大困擾。因此必須對(duì)高血脂癥做到早發(fā)現(xiàn)、早治療、早預(yù)防[1]。而在進(jìn)行疾病診斷時(shí)醫(yī)生卻由于受到專業(yè)限制或主觀因素影響,容易造成疾病的誤診或更嚴(yán)重的后果。結(jié)合現(xiàn)代計(jì)算機(jī)技術(shù)的快速發(fā)展,若能將計(jì)算機(jī)數(shù)據(jù)分析技術(shù)應(yīng)用到疾病診斷,將大大提高診斷準(zhǔn)確率和效率。
海量的醫(yī)療數(shù)據(jù)中蘊(yùn)藏的知識(shí),是現(xiàn)代計(jì)算機(jī)和醫(yī)學(xué)分析的巨大資源寶庫(kù)。針對(duì)這些數(shù)據(jù)分析前通常都要進(jìn)行數(shù)據(jù)的特征處理,找出最優(yōu)的特征子集以便數(shù)據(jù)的分析處理,這也是數(shù)據(jù)分析的重要前提。因此本文以高血脂為研究對(duì)象,首先改進(jìn)BP神經(jīng)網(wǎng)絡(luò)算法,考慮到其具有的對(duì)數(shù)據(jù)自適應(yīng)、容錯(cuò)性和自組織性強(qiáng)等優(yōu)點(diǎn),在此基礎(chǔ)上進(jìn)行數(shù)據(jù)特征選擇。然后把這些數(shù)據(jù)使用K-C4.5分類算法模型進(jìn)行預(yù)測(cè)分析。最后根據(jù)特征選擇和分類預(yù)測(cè)算法模型設(shè)計(jì)了一套高血脂輔助診斷系統(tǒng),此系統(tǒng)能幫助醫(yī)生進(jìn)行更加全面和準(zhǔn)確的診斷。
BP神經(jīng)網(wǎng)絡(luò)中可以借助信息的正向傳播和反向傳播,來提高接受信息的準(zhǔn)確程度。輸入層各神經(jīng)元接收來自外界的輸入信息,并傳遞給中間層各神經(jīng)元[2]。中間層是內(nèi)部信息處理層,用于信息變換,根據(jù)信息變化能力的需求,中間層可以設(shè)計(jì)為單隱層或多隱層結(jié)構(gòu)[3]。最后一個(gè)隱層傳遞到輸出層各神經(jīng)元的信息,經(jīng)過進(jìn)一步處理后,完成一次正向的傳播過程,由輸出層向外界輸出信息處理的結(jié)果[4]。當(dāng)實(shí)際輸出與期望輸出不同時(shí),進(jìn)入誤差的反向傳播階段。誤差通過輸出層,按誤差梯度下降的方式修正各層權(quán)值,向隱層、輸入層、逐層反傳[5]。周而復(fù)始的信息正向傳播和誤差反向傳播過程,是各層權(quán)值不斷調(diào)整的過程,也是神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)訓(xùn)練的過程[6],此過程一直進(jìn)行到網(wǎng)絡(luò)輸出的誤差減少到可以接受的程度或者預(yù)先設(shè)定的學(xué)習(xí)次數(shù)為止。綜上論述可知,BP網(wǎng)絡(luò)由3部分組成:輸入層、隱藏層和輸出層[7]。BP算法的定義公式如下:
(1)
分析可知,其輸出是輸入的非線性函數(shù),范圍是0-1。BP網(wǎng)絡(luò)的示意圖如圖1所示。
圖1 BP神經(jīng)網(wǎng)絡(luò)模型圖
數(shù)據(jù)進(jìn)行前向傳播的過程根據(jù)如下公式計(jì)算得出:
(2)
第一層網(wǎng)絡(luò)參數(shù)為:
(3)
第二層網(wǎng)絡(luò)參數(shù)為:
(4)
第三層網(wǎng)絡(luò)參數(shù)為:
W(3)=[w(4,6),w(5,6)],b(3)=[b6],
(5)
第一層隱藏層有3個(gè)神經(jīng)元:neu1、neu2、neu3,該層的輸入為:
(6)
以神經(jīng)元neu1為例,則其輸入為:
z1=w(x1,1)*x1+w(x2,1)*x2+b1,
(7)
同理有:
z2=w(x1,2)*x1+w(x2,2)*x2+b2,
z3=w(x1,3)*x1+w(x2,3)*x2+b3.
(8)
假設(shè)研究選擇函數(shù)f(x)作為該層的激活函數(shù),那么該層的輸出為:f1(z1)、f2(z2)、f3(z3)。
假設(shè)要對(duì)第k層的參數(shù)W(k)和b(k)求偏導(dǎo)數(shù),設(shè)z(k)表示第k層神經(jīng)元的輸入,即:z(k)=W(k)*n(k-1)+b(k),其中n(k-1)為前一層神經(jīng)元的輸出,則根據(jù)鏈?zhǔn)椒▌t有:
(9)
本次研究中利用了BP算法的前向傳播和反向傳播,首先通過前向傳播對(duì)數(shù)據(jù)進(jìn)行降維處理,充分利用了其傳播的特性,使得最后得到的數(shù)據(jù)能夠更加接近準(zhǔn)確值,但是傳播過程難免會(huì)有一定的誤差,采用BP算法的后向傳播來解決這個(gè)問題。
通過BP算法得到的低維數(shù)據(jù),再構(gòu)建C4.5決策得到更加準(zhǔn)確的分類數(shù)據(jù)。分類技術(shù)是數(shù)據(jù)挖掘領(lǐng)域中一種常用的基本研究方法[10]。決策樹技術(shù)是數(shù)據(jù)挖掘的重要分支,由于其具有簡(jiǎn)單直觀,易于理解,分類效率高等特點(diǎn)[11],被廣泛應(yīng)用。C4.5算法構(gòu)造決策樹時(shí)選擇分支節(jié)點(diǎn)屬性的依據(jù)是信息增益率[12]。C4.5算法以信息增益率為屬性節(jié)點(diǎn)的選擇依據(jù),克服了ID3算法的傾向于選擇取值較多的屬性的不足[13]。
經(jīng)典的ID3算法由于不具備對(duì)連續(xù)屬性的處理策略,以及其信息增益度偏向于具有大量的屬性[14]。針對(duì)這些缺點(diǎn),改進(jìn)衍生出C4.5算法。在ID3算法中算法的屬性選擇計(jì)算公式為:
(10)
其中,Pi為數(shù)據(jù)集T(類屬性值的個(gè)數(shù)為n)中任意元組屬于類Ci(i=1,2,…,n)的不為0的概率,并用|Tci|/|T|進(jìn)行估算得到;而Info(TAj)是按屬性A(屬性值個(gè)數(shù)為m)劃分T的元組分類的信息熵。
C4.5算法用信息增益率的計(jì)算代表ID3算法中的信息增益公式,其計(jì)算公式如式(11)所示:
(11)
其中,SplitInfoA(T)是在數(shù)據(jù)集T中,屬性A的分裂信息,具體計(jì)算公式為:
(12)
在對(duì)C4.5算法進(jìn)行使用分析中,采用改進(jìn)算法執(zhí)行過程的計(jì)算公式來優(yōu)化算法,針對(duì)信息增益的計(jì)算公式結(jié)合泰勒公式和對(duì)數(shù)換底公式,可以將信息增益公式簡(jiǎn)化為式(11)。泰勒公式和對(duì)數(shù)換底公式分別表示為:
(13)
(14)
這樣變換是為了簡(jiǎn)化數(shù)據(jù)運(yùn)算,省去了對(duì)數(shù)運(yùn)算,如此一來就避免了對(duì)數(shù)運(yùn)算時(shí)的函數(shù)調(diào)用,大大縮短了運(yùn)算時(shí)間。采用泰勒公式進(jìn)行變換的原因是,泰勒公式是用一個(gè)函數(shù)在某點(diǎn)的信息,描述其附近取值的公式。如果函數(shù)足夠平滑,當(dāng)已知函數(shù)在某一點(diǎn)的不同階導(dǎo)數(shù)值的情況下,泰勒公式可以利用這些導(dǎo)數(shù)值來做系數(shù),構(gòu)建一個(gè)多項(xiàng)式近似函數(shù),求得在這一點(diǎn)的鄰域中的值。也就是說,用一個(gè)多項(xiàng)式函數(shù)從函數(shù)圖像上的某個(gè)點(diǎn)去逼近一個(gè)給定的函數(shù)。變換后的公式如下所示:
(15)
在數(shù)據(jù)集中有些條件的屬性值是相對(duì)穩(wěn)定的,這類條件屬性的信息增益率就會(huì)比較大;但有些信息增益率比較小的條件屬性在理論情況下是不穩(wěn)定的屬性值,但如果這些屬性是比較重要的屬性,一旦被舍棄將會(huì)造成分類不準(zhǔn)確,為了避免這一問題,采用描述屬性值變化率的平均值的平均波動(dòng)率[15]來解決,同時(shí)還引入一個(gè)描述屬性重要程度的屬性“應(yīng)用權(quán)重[15]”來平衡數(shù)據(jù)集在具體應(yīng)用中對(duì)于某些屬性關(guān)注程度。
引入這兩個(gè)參數(shù)之后, C4.5 的信息增益率計(jì)算公式則變成:
ApliWeight,
(16)
公式(16) 即為最終的屬性選擇的度量公式,這樣改進(jìn)后的度量公式,不僅消除了由于屬性值的影響,而且不存在對(duì)屬性的倚重程度而帶來的不合理的劃分問題。
此后,就對(duì)數(shù)據(jù)進(jìn)行KNN算法的數(shù)據(jù)表預(yù)測(cè),分別對(duì)分類出來的每類樣本進(jìn)行預(yù)測(cè),每類的70%的樣本用于訓(xùn)練,而剩下的30%樣本則作為預(yù)測(cè),樣本預(yù)測(cè)的步驟可分為下面幾步:
Step1隨機(jī)挑選出70%的樣本作為訓(xùn)練集S,輸入訓(xùn)練集S。
Step2確定K值,在訓(xùn)練集S中隨機(jī)挑選出n個(gè)樣本xt進(jìn)行預(yù)測(cè),t=1,2,…n,在訓(xùn)練集S中找到與樣本xt距離最近的k個(gè)樣本yi組成集合Stk,其中i=1,2,…,k。
Step3利用高斯函數(shù)計(jì)算權(quán)值,權(quán)值計(jì)算公式為:
(17)
其中,wti為集合Stk中第i個(gè)樣本的權(quán)值;Li為集合Stk中第i個(gè)樣本到樣本Xt的距離;c為標(biāo)準(zhǔn)差;a取值為1。
Step5計(jì)算準(zhǔn)確度。計(jì)算時(shí)將用到如下數(shù)學(xué)公式:
(18)
Step6若準(zhǔn)確度R達(dá)到要求,則訓(xùn)練完成,并對(duì)剩余的30%的樣本進(jìn)行預(yù)測(cè),得出預(yù)測(cè)結(jié)果,計(jì)算準(zhǔn)確度;若準(zhǔn)確度達(dá)不到R要求,則返回Step 2重新確定k值。
本實(shí)驗(yàn)是在2個(gè)數(shù)據(jù)庫(kù)的混合數(shù)據(jù)上進(jìn)行的,共2 000個(gè)特征屬性,選用單隱含層的BP神經(jīng)網(wǎng)絡(luò),隱含層激活函數(shù)使用Sigmoid函數(shù),輸出層激活函數(shù)為線性函數(shù)。為了得到較好的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),實(shí)驗(yàn)中分別對(duì)當(dāng)隱含節(jié)點(diǎn)為1~50時(shí)的網(wǎng)絡(luò)分類情況來判斷哪個(gè)隱含節(jié)點(diǎn)數(shù)較好。將每個(gè)隱層節(jié)點(diǎn)數(shù)下的網(wǎng)絡(luò)訓(xùn)練10次,由此得到這10次實(shí)驗(yàn)中的測(cè)試集識(shí)別率,并求出和的平均值,得到如圖2所示的結(jié)果。
圖2 隱層節(jié)點(diǎn)平均識(shí)別率圖
由圖2可知,當(dāng)隱層單元節(jié)點(diǎn)為25時(shí),其測(cè)試集平均識(shí)別率為95.12%,此時(shí)的網(wǎng)絡(luò)結(jié)構(gòu)分類能力最強(qiáng)。所以本實(shí)驗(yàn)最終選擇隱層節(jié)點(diǎn)數(shù)為25的BP神經(jīng)網(wǎng)絡(luò)進(jìn)行實(shí)驗(yàn)。
以上步驟是對(duì)數(shù)據(jù)的特征選擇,選擇出來的最優(yōu)特征子集是后續(xù)分類預(yù)測(cè)的重要基礎(chǔ)。在綜合測(cè)試中為了減少分類結(jié)果的誤差,提高分類精度,本分類模型共進(jìn)行10次實(shí)驗(yàn),并且為了突出實(shí)驗(yàn)的有效性,這部分采用UCI數(shù)據(jù)集做驗(yàn)證。最終的相關(guān)實(shí)驗(yàn)結(jié)果指標(biāo)參數(shù),都采用多次實(shí)驗(yàn)結(jié)果取平均值的做法。實(shí)驗(yàn)分類的結(jié)果繪制如圖3、圖4所示,實(shí)驗(yàn)分類結(jié)果數(shù)據(jù)詳見表1。
圖3 算法的分類準(zhǔn)確率比較圖
圖4 算法靈敏度實(shí)驗(yàn)對(duì)比圖
Fig. 4 Comparison of experimental sensitivity of the algorithm
表1 BP_K-C4.5算法模型分類結(jié)果
通過實(shí)驗(yàn)數(shù)據(jù)可以清晰地觀測(cè)到,改進(jìn)后的算法模型相較傳統(tǒng)的分類算法,在精度、準(zhǔn)確度、效率上都有所提升。
本次研究中,前端部分使用vue框架進(jìn)行開發(fā)設(shè)計(jì),并兼容主流的瀏覽器。服務(wù)端開發(fā)使用Java語言,使用Spring Boot作為后臺(tái)框架、數(shù)據(jù)庫(kù)使用MySQL、緩存使用Redis、消息中間件使用kafka等。
3.1.1 功能模塊
高血脂輔助診療系統(tǒng)如圖5所示,主要分為系統(tǒng)設(shè)置模塊、數(shù)據(jù)維護(hù)模塊、輔助診斷模塊、患者管理模塊。系統(tǒng)的核心模塊為輔助診斷模塊。該模塊重點(diǎn)是對(duì)數(shù)據(jù)集進(jìn)行主成分分析,提取出數(shù)據(jù)集中的主要成分,達(dá)到降低數(shù)據(jù)復(fù)雜度和維度的效果,再對(duì)主成分?jǐn)?shù)據(jù)集進(jìn)行分類預(yù)測(cè),最終根據(jù)不同的分析結(jié)果參數(shù),進(jìn)行信息提示。數(shù)據(jù)維護(hù)模塊主要包括電子病歷管理、歷史數(shù)據(jù)維護(hù)、統(tǒng)計(jì)報(bào)表功能;患者管理模塊主要包括自主診斷分析、預(yù)約掛號(hào)、病情跟蹤等功能。基礎(chǔ)服務(wù)模塊主要包括權(quán)限設(shè)置、日志管理、幫助服務(wù)、數(shù)據(jù)字典維護(hù)等功能。
圖5 高血脂輔助診斷和信息管理系統(tǒng)功能模塊
Fig. 5 Functional module of hyperlipidemia-assisted diagnosis and information management system
3.1.2 系統(tǒng)架構(gòu)
系統(tǒng)設(shè)計(jì)架構(gòu)見圖6,對(duì)此擬做研究論述如下。
(1)調(diào)用方:系統(tǒng)設(shè)計(jì)可調(diào)用的前端應(yīng)用平臺(tái)包括:響應(yīng)式Web網(wǎng)頁(yè)、移動(dòng)端等。
(2)分布式微服務(wù):該部分采用的是分布式微服務(wù)系統(tǒng)Spring Boot。具體分為網(wǎng)關(guān)層、代理層、服務(wù)層。網(wǎng)關(guān)層主要負(fù)責(zé)統(tǒng)一請(qǐng)求入口,配合前端完成權(quán)限驗(yàn)證,對(duì)外提供restful API,并對(duì)API進(jìn)行動(dòng)態(tài)限流。 代理層負(fù)責(zé)抽象出公共的服務(wù)接口,在代理層將請(qǐng)求路由到具體的服務(wù)。
圖6 高血脂分類挖掘系統(tǒng)框架
Fig. 6 Framework of a hyperlipidemia classification and mining system
3.1.3 系統(tǒng)流程
系統(tǒng)的詳細(xì)使用流程如圖7所示,主要包括數(shù)據(jù)錄入、主成分分析提取模塊、模型構(gòu)建、預(yù)測(cè)分析等模塊。對(duì)此流程可做闡釋分述如下。
圖7 系統(tǒng)使用流程圖
(1)特征選擇:首先將請(qǐng)求發(fā)送到網(wǎng)關(guān)層進(jìn)行權(quán)限校驗(yàn),校驗(yàn)通過則由代理層將請(qǐng)求路由到具體的服務(wù)。服務(wù)層首先需要對(duì)數(shù)據(jù)進(jìn)行清洗,然后利用PCA主成分分析算法提取出數(shù)據(jù)集中的主要成分并保存到數(shù)據(jù)庫(kù)。
(2)數(shù)據(jù)錄入:在客戶端進(jìn)行電子病歷的錄入等操作時(shí),請(qǐng)求在網(wǎng)關(guān)層進(jìn)行安全校驗(yàn),然后代理層將數(shù)據(jù)中的各項(xiàng)指標(biāo)請(qǐng)求路由到具體的服務(wù),服務(wù)層會(huì)將有效的數(shù)據(jù)保存至數(shù)據(jù)庫(kù)。
(3)模型構(gòu)建:首先請(qǐng)求會(huì)在網(wǎng)關(guān)層進(jìn)行權(quán)限的校驗(yàn),校驗(yàn)通過后會(huì)通過代理層將具體的請(qǐng)求路由到具體的服務(wù)。然后具體的服務(wù)將對(duì)數(shù)據(jù)進(jìn)行量化處理,再使用C4.5分類算法對(duì)數(shù)據(jù)進(jìn)行分類挖掘,找出高血脂相關(guān)的關(guān)聯(lián)規(guī)則,此后將該關(guān)聯(lián)規(guī)則保存在數(shù)據(jù)庫(kù)。
(4)預(yù)測(cè)分析:點(diǎn)擊預(yù)測(cè)分析按鈕后,請(qǐng)求經(jīng)校驗(yàn)通過后,由代理層將請(qǐng)求路由到服務(wù)層后,對(duì)數(shù)據(jù)進(jìn)行關(guān)聯(lián)分析,并返回分析結(jié)果及信息提示。
在經(jīng)過模塊調(diào)試、系統(tǒng)整體功能調(diào)試以及兼容性測(cè)試等一系列工作后,系統(tǒng)達(dá)到預(yù)期目標(biāo)。系統(tǒng)可正常完成頁(yè)面設(shè)計(jì)功能。這里將擷選系統(tǒng)核心功能部分頁(yè)面進(jìn)行展示。對(duì)此可描述為:
輔助診斷模塊首先是選擇需要分析的數(shù)據(jù),進(jìn)行特征選擇,特征處理結(jié)果如8所示,在此可以選擇需要分析的特征,默認(rèn)為全選。執(zhí)行分析頁(yè)面可以編輯要分析的特征以及權(quán)重和閾值,如圖9所示。在執(zhí)行分析后分析結(jié)果如圖10所示,將詳細(xì)展現(xiàn)患者基本信息和分析結(jié)果的圖標(biāo)展示,以及分析意見與建議。
圖8 特征選擇頁(yè)面
圖9 執(zhí)行分析圖
圖10 分析結(jié)果圖
高血脂癥是一種常見的發(fā)病率極高的慢性病,因此高血脂的防治顯得尤為重要。本文首先改進(jìn)特征選擇算法BP神經(jīng)網(wǎng)絡(luò)算法的反饋網(wǎng)絡(luò)的權(quán)值、閾值,使神經(jīng)網(wǎng)絡(luò)修正更加精確高效,然后對(duì)最優(yōu)特征子集使用改進(jìn)的K-C4.5算法進(jìn)行分類預(yù)測(cè),該改進(jìn)的分類模型綜合C4.5算法和K階最近鄰算法的優(yōu)點(diǎn),并改進(jìn)C4.5算法的數(shù)據(jù)讀取方式,最終改進(jìn)的算法模型相較傳統(tǒng)算法,有著更高的分類精度和效率。基于改進(jìn)后的算法模型設(shè)計(jì)的高血脂輔助診斷系統(tǒng),能夠有效地輔助醫(yī)護(hù)人員的工作,具有較強(qiáng)的使用價(jià)值。