孫 波,楊 磊*,郭秀梅,陳 冉,張 童,賈 昊
1.山東農業大學 信息科學與工程學院,山東 泰安 271019
2.山東第一醫科大學第二附屬醫院,山東 泰安 271000
心電信號(Electrocardiogram,ECG)可用于對各種心律失常、心室心房肥大、心肌梗死、心肌缺血等病癥的檢查[1]。傳統診斷過程中,醫生通過心電圖的觀察和經驗來進行心血管疾病的判斷,而人工診斷往往無法實時監測異常心電波形,并且在判讀過程中診斷誤差難以避免[2]。因此,研究利用計算機系統自動識別ECG 信號并進行分類成為近年來研究的熱點。
2006 年,周珂等提出了一種基于支持向量機(Support Vector Machines,SVM)的心電圖分類診斷方法,構造了基于SVM 的心電圖分類器[3]。杜智慧等提出了一種基于神經網絡的心電圖分類方法,通過利用前向多層神經網絡的反向傳播算法(Back Propagation)對心電圖進行三分類,取得了較好的結果[4]。übeyli ED 結合特征向量法和支持向量機分析病人的心電圖變化,通過特征向量法進行特征提取并通過SVM 進行分類訓練[5]。Moavenian M 等提出了一種利用核-Adatron(KA)學習算法來輔助SVM 進行ECG 心律失常分類的方法[6]。但以上所述方法,對于信號的特征提取能力較弱,不能夠有效的提取數據的特征信息,導致信號的分類準確率不高。近年來,隨著卷積神經網絡(Convolutional Neural Networks,CNN)的迅速發展,尤其在特征檢測方面的優勢,使得在解決文本數據處理、圖像目標識別、語音識別等很多問題上應用較為廣泛,目前也應用到ECG 檢測領域。Zubair M 等通過使用卷積神經網絡對ECG 數據進行特征提取,從而實現ECG 信號的分類[7]。Xuefan Z 等提出了一種結合遷移學習與二維深度卷積神經網絡識別心電圖像的方法[8]。雖然卷積神經網絡在特征提取方面較為有效,但是卷積神經網絡的各種性能受限于訓練樣本的數目,需要大量的訓練數據才能獲得令人滿意的表現。在小樣本數據的情況下,容易產生過擬合與識別準確率低的情況[9]。并且由于卷積神經網絡的全連接模式過于冗余而低效,在數據不平衡的情況下,會使得準確率下降[10]。為了克服以上深度學習方法在小數據下容易產生過擬合,分類準確率低的缺點,本文提出了一種基于CNN+SVM 混合模型進行ECG 信號的識別判斷方法。首先建立完整的卷積神經網絡(CNN),進行心電信號特征提取。將全連接層提取出來的全連接層特征向量作為SVM 分類器的輸入特征向量,再通過SVM 分類器進行分類。這種方法能夠自動提取數據的特征,充分利用卷積神經網絡在數據特征提取方面的優勢,并且SVM 分類器分類效果穩定,在小數據上具有較好的泛化能力。為了驗證所提算法的有效性,使用心電信號公開數據庫MIT-BIH 中的Arrhythmia Database[11]進行驗證,結果表明,結合CNN 和SVM 兩者的優點,分類性能尤其在小數據集的準確率方面得到較大提升。
通過將CNN 與SVM 組合起來,構建了一個新的混合模型,混合模型中將完整CNN 模型中的一個全連接層替換為SVM 分類器,將全連接層輸出轉化的特征向量作為SVM 的輸入向量,來實現對ECG 信號的分類。
支持向量機(Support Vector Machines,SVM)是定義在空間上的使不同類別間隔最大化的分類器[12]。在SVM 中,將距離超平面最近的點定義為支持向量,希望找到支持向量,確保它們離分隔超平面的距離盡可能的遠。通過最大化支持向量到分隔超平面的距離來訓練SVM,并通過使用不同的核函數來進行分類。
本文SVM 模型選用線性核函數:k(x,y)=xy(1)
給定訓練向量xi∈RP,i=1,…,n,分為兩類,樣本標記y∈{1,-1}n。SVM 通過尋找一個最大的邊界分割超平面實現對樣本集合的線性分類,上述問題可以表示為一個最優化問題。

公式(2)中,w是m維向量,b是一個標量,稱為偏移量。公式(3)中ξi是松弛變量,C是權衡邊界最大化和分類誤差最小的懲罰因子。在這里訓練向量xi通過函數φ(xi)隱式映射到更高的維度上。
通過求解上述最優化問題,分類器的決策函數被定義為:

式中ɑi是拉格朗日乘積因子,K(xi,xj)是核函數。
SVM 本身是一個二值分類器,SVM 最初被設計時就是為了解決二值分類問題,當處理多分類問題時,就需要構造合適的多類分類器。目前,構造SVM 多類分類器的方法主要有兩種,一是直接進行目標函數的修改,將多個分類面的參數求解合并到一個最優化問題中,通過求解該最優化問題實現多分類;二是間接法,該方法中的多分類器包含多個二分類器,常見的方法有one-against-one和one-against-all 兩種。本文用到的是one-against-one 方法。
One-against-one 是在任意兩類樣本之間設計一個SVM。本文使用的ECG 信號可以分為N(正常搏動)、L(左束支傳導阻滯)、R(右束支傳導阻滯)和A(異常房性早搏),因此,ECG 信號分類是一個4 分類問題。在模型訓練時四種心電信號兩兩組合,即N-L、N-R、N-A、L-R、L-A 和R-A,就需要設計4*(4-1)/2=6 個SVM 分類器。每個組合所對應的向量作為訓練集,得到6 個訓練結果;在模型測試時,把對應的向量分別對6 個結果進行測試,然后采取投票形式,當對其中一個未知樣本進行分類時,最后得票最多的類別即為該未知樣本的類型。投票結果為:N=A=R=L=0;(N,A)-classifier 如果是N win,則N=N+1;otherwise,A=A+1;(N,R)-classifier;如果是N win,則N=N+1;otherwise,R=R+1;(R,L)-classifier;如果是N win,則R=R+1;otherwise,L=L+1;最終的結果是N、L、R、A 這4 個數值中最大的。
CNN 是一種有監督學習特性的多層神經網絡,主要由卷積層、池化層和全連接層組成,通過權重關聯各層之間的神經元。卷積神經網絡通過網絡中的卷積層、池化層和一系列非線性計算從原始數據中提取數據局部特征信息[13],提取的特征通過全連接層輸入到分類器。本文構建的CNN 網絡結構如圖1 所示,該網絡包括輸入層、2 個卷積層、2 個池化層、2 個全連接層和輸出層,輸入層的維度大小為16×16,2 個卷積層的維度分別為16×16、8×8,分別用于計算ECG 信號的特征。通過卷積獲得了數據的特征之后可以直接根據這些特征訓練分類器,但是這樣計算量很大而且容易產生過擬合,因此在卷積層后面需要加入池化層來減少計算量,并且同時提高對特征提取的抗干擾能力。因此特征圖上的每個神經元與不同數目的前一層神經元相連接,他們由不同大小的卷積核定義。在兩個卷積層與池化層中,卷積層與池化層的核大小分別為5×5、2×2,步長分別為2、1。每次特征圖變化其尺寸大小由S 縮減為
本文中所構建的CNN+SVM 混合模型使用SVM 代替CNN 網絡的全連接層,即CNN 提取特征后利用SVM 進行分類。混合模型如圖2 所示。


在CNN+SVM 混合模型中,首先需要建立完整的CNN 模型。在建立CNN 模型時,首先對Dropout層進行設置。Dropout 層[14,15]的作用是在訓練神經網絡模型時,在樣本數據較少情況下,可以提高模型的泛化能力,防止出現過擬合。然后通過反向傳播算法來進行CNN 模型的訓練[16]。最終通過Adam優化算法來進行目標函數的優化,使得模型的性能進一步提高。將CNN 模型訓練完成后,將全連接層提取出來的特征給SVM 分類器用來進行數據的劃分。在SVM 分類器中,用到了線性核函數,線性核函數能夠進一步提高模型的泛化能力,使得模型的性能進一步提高。
本文設計的CNN+SVM 模型結構參數與神經網絡模型結構如圖2 所示。

表1 CNN+SVM 模型結構參數與神經網絡模型結構Table 1 Structural parameters of CNN+SVM model and the structure of neural network model
傳統的卷積神經網絡(CNN)能夠有效的提取數據的局部特征,但是在小數據集上容易產生過擬合的問題,并且造成對驗證數據集的分類準確率低,也就是泛化能力不佳。支持向量機(support vector machines,SVM)是定義在空間上的使不同類別間隔最大化的分類器,支持向量機就是要使超平面和支持向量之間的間隔盡可能的大,這樣超平面才可以將兩類樣本準確的分開,而保證間隔盡可能的大就是保證我們的分類器誤差盡可能的小,盡可能的健壯。SVM 本身的優化目標是結構化風險最小,而不是經驗風險最小[17],因此,通過margin 的概念,得到對數據分布的結構化描述,降低了對數據規模和對數據的分布的要求。使得SVM 在小樣本數據集上能夠得到比其他算法更好的分類效果。并且SVM 基于結構化風險最小的設計特點,避免了過學習問題,因此泛化能力強。
為驗證所構建模型的有效性,采用MIT-BIH Arrhythmia Database 公開心電數據庫,MIT-BIH 心律失常數據集包含48 個30 min 長度雙通道(Ⅱ導聯和V1 導聯)動態心電記錄片段。MIT-BIHArrhythmia Database 采樣率為360 Hz、分辨率11 bit、每段數據持續時間為30 min、存儲格式為Format 212。
本文采用的V1 導聯的數據,從數據庫中提取了共1474560 條記錄。一個完整心拍包括P,QRS和T 波。通過一個完整心拍可以反應心律失常,例如:竇房結因某些病變而停止發放沖動造成竇性停搏而導致P 波消失。但在ECG 信號中,P 波和T 波幅度小,頻率低,難以與干擾和噪聲分離,所以較QRS 波的檢測更加困難。因此,P 波和T 波的檢測是在QRS 波定位后進行的。在QRS 波起點之前的一段區域內檢測P 波,在QRS 波重點之后的一段區域內檢測T 波。因此通過Java 進行數據分割,在R 波峰的位置上,向前100 個點,并向后取155 個點,加上R 波峰,共計256 個點。將數據分為4 類,4 種類型的心拍的數量見表2,可視化結果見圖3。
實驗平臺硬件配置為Intel i5-7300HQ CPU,顯卡為GTX1050Ti,內存是8GB,系統是Windows系統,模型基于Python 語言和Tensorflow 框架實現。

表2 四種類型心拍的數量Table 2 The number of four types of beats

圖3 四種類型心電圖可視化對比Fig.3 Visual comparison of four types of ECG
本文采用準確率、靈敏度、特異性對不同算法進行對比,準確率、靈敏度、特異性進行不同模型的分類結果評估并通過混肴矩陣能表示出以上信息。混肴矩陣的每一列代表了預測類別,每一行代表了數據的真實歸屬類別,每一行的數據總數表示該類別的數據實例的數量。每一列中的數值表示真實數據被預測為該類的數目。本文為4 分類問題,因此混肴矩陣是4 維矩陣。

其中,nij(i≠j)為類別為i樣本被歸類為類j,nij為類別為i的樣本被正確分類的數量。Pi為所有樣本被分類為i的數量,Ci為類別為i的樣本數目對于類別i的樣本分類。準確率(Acc)為被正確分類的樣本比例或數量。特異性(Spe)為所有負例中被正確分類的比例,衡量了模型對負例的識別能力。靈敏度(Sen)為分類器預測為正確的樣本占該類樣本數量的比例,衡量了模型對正例樣本的識別能力。準確率、敏感度和特異性公式分別為(5)~(7)。


通過表3 三種模型結果對比可以看出,通過CNN 將模型的特征提取出來,用SVM 做分類的模型的各性能指標優于SVM 與CNN。這表明在小數據心電圖樣本下CNN+SVM 模型具有較好的泛化能力與較高的識別率。
SVM、CNN、CNN+SVM 三種模型對心電圖的分類結果如表3 所示。通過表3 可以看出,SVM、CNN 模型與CNN+SVM 相比,對于該四類數據三類指標均較低,漏診率比較高。可以認為SVM 與CNN 模型對N、L、R、A 類的識別分類的能力相比于CNN+SVM 較差,這導致在進行心電圖分類的時候會產生誤診。CNN 對數據的數量比較靈敏,在進行分類時要求每類數據的數量平衡。在本文中由于每類數據量不平衡,CNN 模型的準確率較低。但通過CNN 與SVM 結合的模型使得對于該四類數據的識別并正確分類能力也得到了明顯提高,CNN+SVM 模型對該四類數據的漏診率都較低。通過表3 可知CNN 與SVM 對A 類數據識別并正確分類的能力較差,但CNN+SVM 模型對A 類數據的識別并正確分類的能力大大提高,使得靈敏度相對于SVM、CNN 模型靈敏度分別上升了17.19%、22.40%,并且模型對正例樣本的識別能力也大大增強。CNN+SVM 模型也使得A 類的特異性相對于SVM、CNN 模型特異性分別上升了3.31%、0.27%,對于負例樣本的識別能力也得到了較大提高。進而使得CNN+SVM 模型N、L 兩類的準確率相對于SVM、CNN 模型準確率分別上升了2.77%、3.56%。并且對于其它三類數據也有了不同程度的提升。這表明在樣本分布不均衡的請況下,SVM 對數據不敏感,因此對于小數據不平衡樣本的心電圖數據,通過CNN+SVM 來進行數據的特征提取和分類效果更好。
從數據集中隨機分成訓練子集與測試子集,采用5 倍交叉驗證方法對分類器進行訓練,對SVM、CNN 和本文提出的CNN+SVM 分類器進行仿真對比。通過5 倍交叉驗證,避免了一次隨機劃分帶來的偶然性。

圖7 三種模型混肴矩陣對比Fig.7 Comparison of mix matrices of three kinds of models
圖4-6 中的靈敏度、特異性為4 類心電信號的平均值,準確率為分類模型所有判斷正確的結果占總觀測值的比重。圖4-6 對比了CNN+SVM、CNN 和SVM 分類器的靈敏度、特異性和準確性方面的詳細性能,并且分類器的最佳分類分別在3 倍、2 倍和2 倍。最佳分類結果能證明其優越性,在每個分類器在最佳分類情況下CNN+SVM 的靈敏度相對于CNN、SVM 分別提高了1.83%、4.00%,CNN+SVM 的特異性相對于CNN、SVM 分別提高了1.28%、0.59%,進而導致CNN+SVM 的準確率相對于CNN 與SVM 分別提高了1.44%、0.92%。通過圖4-6 也可以發現CNN+SVM 的各項指標都比較平穩,這可以認為在不同情況下,CNN+SVM 的穩定性更好,這更加適合心電信號分類。
通過圖7 可以看出,在CNN 與SVM 模型中,容易把A 類心電數據識別為N 類,并且如果增大A 類數據將導致漏診率比較高,最終導致準確率比較低。但CNN+SVM 分類能夠有效地提取A類數據的特征,使得混肴的數目大大減少,提高了A 類數據分類的靈敏度,從而使得漏診率得到了降低。并通過圖7 發現CNN+SVM 對每一類數據的漏診率都比較低,因此更加適合心電信號分類。
本文提出了基于CNN+SVM 模型與,給出了數據處理的相關流程,并通過實測數據進行了理論驗證,結果表明:
1)通過在卷積神經神經網絡(CNN)中加入Dropout 層能夠有效提高模型的泛化能力,防止出現過擬合。并通過adam 優化算法進行目標函數的優化,能夠得到較好的CNN 模型;
2)在小樣本不平衡的心電圖數據集分類中,通過CNN 來進行數據的特征提取,并用SVM 來做分類的模型,能夠取得較好的泛化能力,進而提高了模型的準確率;
3)在相同數的對比結果表明,本文中CNN+SVM 模型的各項誤差較小,說明更適合于小樣本條件下對于心電圖分類,具有較好的普適性;
4)與SVM、CNN 相比CNN+SVM 模型在不同情況下具有更好的穩定性,并且對每類數據的漏診率都較低。因此更加適合心電數據分類。