李鋒,王澤南
(東華大學(xué)計算機(jī)科學(xué)與技術(shù)學(xué)院,上海 201620)
心電圖(electrocardiogram,ECG)是記錄心臟電信號的常用方式[1],醫(yī)護(hù)人員通過分析心電圖數(shù)據(jù),可以較為準(zhǔn)確地判斷心臟的健康狀況。目前,大量的科研學(xué)者已經(jīng)開始嘗試采取計算機(jī)技術(shù)來分析心電圖數(shù)據(jù),從而實現(xiàn)在無醫(yī)學(xué)監(jiān)督下對個體心臟狀況的實時監(jiān)測。
1998年,Silipo R等人提出了用人工神經(jīng)網(wǎng)絡(luò)(Artificial Neural Network,ANN)的方法對三種異常的 ECG 信號進(jìn)行分類[2],他們采用了多種ANN 結(jié)構(gòu),配合不同的預(yù)處理方法,驗證了ANN在面對ECG波形時具有良好的適用性。Lagerholm M[3]等人構(gòu)建了自組織的神經(jīng)網(wǎng)絡(luò)實現(xiàn)ECG信號的無監(jiān)督聚類,通過麻省理工心率失常數(shù)據(jù)庫中16類心電數(shù)據(jù)進(jìn)行實驗,得到了較準(zhǔn)確的分類結(jié)果。之后,Benali R[4]等人結(jié)合小波變換與神經(jīng)網(wǎng)絡(luò)對正常心電信號和4類異常心電信號進(jìn)行了分類,也獲得了較高的分類準(zhǔn)確率。Ac?r N[5]等人提出了通過最小二乘支持向量機(jī)(Least Squares Support Veotor Maohine,LSSVM)的方法對ECG信號進(jìn)行分類,該方法在對特征向量空間降維處理的基礎(chǔ)上,用快速LSSVM算法對心電數(shù)據(jù)進(jìn)行分類。在文獻(xiàn)[6]中,Shen CP采用了一種自適應(yīng)算法來提取數(shù)據(jù)特征,然后結(jié)合支持向量機(jī)(Support Vector Machine,SVM)和K均值聚類對樣本數(shù)據(jù)集進(jìn)行分類。
本課題組長期研究軀感網(wǎng)和機(jī)器學(xué)習(xí),并設(shè)計出一種便攜式心電采集設(shè)備,實現(xiàn)對心電數(shù)據(jù)的采集。本文主要在國際公開數(shù)據(jù)庫和實驗室采集的移動心電數(shù)據(jù)基礎(chǔ)上,使用心電數(shù)據(jù)相鄰點(diǎn)斜率和RNN相結(jié)合的方法,實現(xiàn)心電信號的異常診斷。
為了便于通過神經(jīng)網(wǎng)絡(luò)實現(xiàn)對心電信號異常的自動診斷,系統(tǒng)首先需要分析心電數(shù)據(jù)的內(nèi)在特性,提取特征序列作為神經(jīng)網(wǎng)絡(luò)的輸入。心電信號特征提取目前已有眾多成熟的算法,例如Palacios-Enriquez A提出基于小波變換的方法[7];Soorma N提出了一種基于HHT變換的特征提取方法[8]。
由于這些變換算法會丟失心電數(shù)據(jù)本身的物理含義,本文選用相鄰數(shù)據(jù)點(diǎn)斜率組成的數(shù)據(jù)串作為心電數(shù)據(jù)的特征,并將該數(shù)據(jù)串作為循環(huán)神經(jīng)網(wǎng)絡(luò)的輸入。
循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neuron Network,RNN)可以很好地處理序列類數(shù)據(jù)。與一般的神經(jīng)網(wǎng)絡(luò)不同,循環(huán)神經(jīng)網(wǎng)絡(luò)除了層與層之間的全連接,還包含了前一個節(jié)點(diǎn)的輸出對當(dāng)前節(jié)點(diǎn)的影響,即隱藏層的節(jié)點(diǎn)不再是獨(dú)立的,隱藏層輸入包含輸入層的數(shù)據(jù)和前一節(jié)點(diǎn)的輸出[9]。隱藏層各節(jié)點(diǎn)都會受到之前節(jié)點(diǎn)的影響,為避免之前節(jié)點(diǎn)數(shù)據(jù)過度參與當(dāng)前節(jié)點(diǎn)的計算,一般會引入遺忘率α作為前一輸出的權(quán)重[10]。
本文后續(xù)實驗的數(shù)據(jù)是基于矩陣轉(zhuǎn)換而成的序列數(shù)據(jù),該序列數(shù)據(jù)前后數(shù)據(jù)點(diǎn)存在關(guān)聯(lián)性,因此利用RNN來處理該數(shù)據(jù)具有較好的適用性。
本文首先通過濾波等方式對心電數(shù)據(jù)進(jìn)行預(yù)處理,然后計算相鄰點(diǎn)的斜率并進(jìn)行組合,形成特征序列輸入到神經(jīng)網(wǎng)絡(luò),完成異常檢測。
本文神經(jīng)網(wǎng)絡(luò)的訓(xùn)練數(shù)據(jù)集來自Physio Bank數(shù)據(jù)庫,共計1600條數(shù)據(jù)。根據(jù)該數(shù)據(jù)庫中已標(biāo)記的病理標(biāo)簽,本文將訓(xùn)練集數(shù)據(jù)標(biāo)記為四類:正常、心肌梗塞、房室阻滯和房性早搏,四類數(shù)據(jù)各有400條記錄。測試數(shù)據(jù)集使用實驗室采集的共1491條用戶數(shù)據(jù),測試數(shù)據(jù)集包含正常242條,心肌梗塞398條,房室阻滯415條,房性早搏436條。部分實驗數(shù)據(jù)如表1所示。
在信號處理過程中,由于心電信號在采集過程中會受到工頻干擾、基線漂移、肌電干擾、電極移動等因素的影響[11],本文在進(jìn)行心電特征提取前對數(shù)據(jù)進(jìn)行了高斯濾波,避免噪聲對心電數(shù)據(jù)特征提取的影響。
心電信號是一個多分量信號,為保證心電信號原本物理意義的完整性,本文選擇提取相鄰點(diǎn)斜率作為特征。每一時刻的斜率計算公式如公式(1)所示。
表1 原始心電數(shù)據(jù)表
表2 相鄰點(diǎn)斜率結(jié)果表
神經(jīng)網(wǎng)絡(luò)進(jìn)行異常檢測時,單一的斜率值無法作為神經(jīng)網(wǎng)絡(luò)的輸入,因此需要將每一串斜率值進(jìn)行拼接,即將每個斜率值按時序組合成一個一維數(shù)據(jù)串。以patient005為例,其組合結(jié)果如圖1所示。此時的數(shù)據(jù)串包含斜率特征和時序特征,這樣可以實現(xiàn)多維特征的異常診斷從而提升神經(jīng)網(wǎng)絡(luò)的診斷準(zhǔn)確率。
圖1 patient005一維數(shù)據(jù)串結(jié)構(gòu)圖
2.4.1 LSTM構(gòu)建
本文選用長短期記憶神經(jīng)網(wǎng)絡(luò)(Long Short-Term Memory,LSTM)進(jìn)行異常心電檢測。LSTM在RNN基礎(chǔ)上進(jìn)行了改進(jìn),能更好的處理序列數(shù)據(jù)[12]。本文LSTM網(wǎng)絡(luò)結(jié)構(gòu)共分為三層:輸入層、隱藏層和輸出層,結(jié)構(gòu)如圖2所示。
圖2 神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)圖
網(wǎng)絡(luò)的輸出層4個節(jié)點(diǎn)分別對應(yīng)類型心電圖概率值。
針對輸入層,通過實驗得到節(jié)點(diǎn)數(shù)為50個時時間復(fù)雜度和空間復(fù)雜度在可接受范圍,神經(jīng)網(wǎng)絡(luò)通過窗口滑動將數(shù)據(jù)串依次輸入到節(jié)點(diǎn)進(jìn)行計算。
隱藏層節(jié)點(diǎn)個數(shù)沒有實際的參照標(biāo)準(zhǔn),本文通過實驗,將節(jié)點(diǎn)個數(shù)設(shè)置為60。隱藏層節(jié)點(diǎn)個數(shù)與準(zhǔn)確率的對應(yīng)關(guān)系如表3所示。
表3 隱藏層節(jié)點(diǎn)與準(zhǔn)確率關(guān)系表
由于隱藏層前后節(jié)點(diǎn)互相連接,因此前一節(jié)點(diǎn)作為當(dāng)前節(jié)點(diǎn)輸入時的遺忘率亦會影響神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)效率以及分類結(jié)果。本文經(jīng)實驗分析后將遺忘率α設(shè)為0.75。遺忘率對實驗結(jié)果的影響如表4所示。
表4 遺忘率與準(zhǔn)確率關(guān)系表
在隱藏層通過公式2計算t時刻各個節(jié)點(diǎn)的狀態(tài)。
其中f(x)為激勵函數(shù),分別為輸入層和隱藏層偏置,分別為輸入層和隱藏層權(quán)重。
其中,s(t=2950)為隱藏層最終的節(jié)點(diǎn)狀態(tài),由于滑動窗口每次移動1個單位,故節(jié)點(diǎn)狀態(tài)數(shù)=數(shù)據(jù)串長度-窗口長度+1=2999-50+1=2950,因此隱藏層節(jié)點(diǎn)最終狀態(tài)為s(t=2950)。分別為輸出層的權(quán)重和偏置。通過公式5將該結(jié)果轉(zhuǎn)換為最終的輸出結(jié)果
p1:待測心電屬于正常的概率;
p2:待測心電屬于心肌梗塞的概率;
p3:待測心電屬于房室阻滯的概率;
p4:待測心電屬于房性早搏的概率。
2.4.2 神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程
在構(gòu)建完成網(wǎng)絡(luò)結(jié)構(gòu)后,需要對網(wǎng)絡(luò)進(jìn)行訓(xùn)練,訓(xùn)練步驟如下:
Step1:初始化網(wǎng)絡(luò)結(jié)構(gòu),將所有權(quán)重和偏置賦值為一個隨機(jī)值;
Step2:讀取一條心電數(shù)據(jù)輸入到神經(jīng)網(wǎng)絡(luò);
Step3:分別計算輸入層,隱藏層和輸出層的輸出;
Step5:獲得判別結(jié)果并計算損失函數(shù)。損失函數(shù)計算方法將在2.4.3節(jié)進(jìn)行闡述;
Step6:根據(jù)梯度下降算法調(diào)整各個權(quán)重和偏置。
在神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程中,重復(fù)Step2至Step6,當(dāng)損失函數(shù)誤差e≤0.001或訓(xùn)練集數(shù)據(jù)被遍歷時,神經(jīng)網(wǎng)絡(luò)訓(xùn)練結(jié)束,將待測心電數(shù)據(jù)輸入到網(wǎng)絡(luò)中即可得到異常檢測結(jié)果。
2.4.3 損失函數(shù)計算
本文使用真實病理標(biāo)簽對應(yīng)節(jié)點(diǎn)的概率值計算損失函數(shù),計算方法如公式6所示。
其中R為其病理標(biāo)簽對應(yīng)節(jié)點(diǎn)的概率。例如,將某房室阻滯病人的心電數(shù)據(jù)傳入神經(jīng)網(wǎng)絡(luò),通過公式6和公式8計算得到再將得到的利用公式4進(jìn)行計算:
本文根據(jù)準(zhǔn)確率(CA)(公式11)評判實驗的整體性能。
其中,Y表示檢測結(jié)果正確的數(shù)據(jù)記錄數(shù)量,T表示測試數(shù)據(jù)總數(shù)量。
本文對測試數(shù)據(jù)集的1491條記錄進(jìn)行分析,實驗結(jié)果如表5所示。
表5 病理判別結(jié)果表
由表5可知,心肌梗塞與房室阻滯容易產(chǎn)生誤判,正常與房性早搏容易產(chǎn)生誤判。主要原因為被誤判的兩類病理在早期心電數(shù)據(jù)上區(qū)別較小,雖經(jīng)過PWD處理,但依然存在誤判的可能性。經(jīng)過計算,本文算法準(zhǔn)確度可達(dá)97.0%,因此該算法具有一定有效性和實用性。
本文利用相鄰數(shù)據(jù)點(diǎn)間的斜率進(jìn)行拼接得到一維數(shù)據(jù)串,然后將數(shù)據(jù)串通過循環(huán)神經(jīng)網(wǎng)絡(luò)進(jìn)行異常診斷,實驗數(shù)據(jù)證明其分類效果良好,但對早期病理的數(shù)據(jù)仍存在誤判可能,還需一些改進(jìn)。本文實驗只是針對四類心電異常進(jìn)行診斷,課題組在此基礎(chǔ)上還將針對各類病例的診斷進(jìn)行進(jìn)一步研究。