心音是診斷心血管疾病常用的醫學信號之一。本文對心音正常/異常的二分類問題進行了研究,提出了一種基于極限梯度提升(XGBoost)和深度神經網絡共同決策的心音分類算法,實現了對特征的選擇和模型準確率的進一步提升。首先,本文對預處理后的心音信號進行心音分割,在此基礎上提取了 5 個大類的特征,前 4 類特征采用遞歸特征消除法進行特征選擇,作為 XGBoost 分類器的輸入,最后一類為梅爾頻率倒譜系數(MFCC),作為長短時記憶網絡(LSTM)的輸入。考慮到數據集的不平衡性,本文在兩種分類器中皆使用了加權改進的方法。最后采用異質集成決策方法得到預測結果。將本文所提心音分類算法應用于 PhysioNet 網站在 2016 年發起的 PhysioNet 心臟病學挑戰賽(CINC)所用公開心音數據庫,以測試靈敏度、特異性、修正后的準確率以及 F 得分,結果分別為 93%、89.4%、91.2%、91.3%,通過與其他研究者應用機器學習、卷積神經網絡(CNN)等方法的結果比較,在準確率和靈敏度上有明顯提高,證明了本文方法能有效地提高心音信號分類的準確性,在部分心血管疾病的臨床輔助診斷應用中有很大的潛力。
引用本文: 王子超, 金衍瑞, 趙利群, 劉成良. 基于極限梯度提升和深度神經網絡共同決策的心音分類方法. 生物醫學工程學雜志, 2021, 38(1): 10-20. doi: 10.7507/1001-5515.202006025 復制
引言
心血管疾病是全球第一死因,據世界衛生組織 2016 年統計,每年有 1 790 萬人死于心血管疾病,占全球死亡人數的 31%,其中 85% 是因心臟病發作和中風所致[1]。心音是心臟收縮和舒張引起的振動產生的聲音,現已作為診斷心血管疾病常用的醫學信號之一。基本心音通常包括第一心音(first heart sound,S1)和第二心音(second heart sound,S2),是心臟周期中最容易辨認的聲音。然而,心臟的機械活動可能引起其他聲音,如第三、第四心音和一些心臟雜音等,在時域和頻域上很難區分,造成異常和正常心音的分離也很困難。近幾十年來,研究人員對心音的自動診斷識別展開了廣泛的研究。
心音分析通常包括三個步驟:預處理、心音分割和心音分類。心音圖通常受到不同類型的噪聲污染,預處理中濾波的目的是為了消除這些噪聲,確定基準點的位置,同時避免信號偏移。在濾波后,研究者往往會采取重采樣或下采樣,在保持數據一致性的基礎上減少計算成本。心音分割是指確定心音信號中 S1、S2 和心臟的收縮期、舒張期 4 個狀態的位置區間,在大多數研究中作為心音分類特征工程的前提。國內外研究學者對許多心音分割方法進行了研究,典型的方法可以分為四類:① 基于包絡的方法;② 基于心音特征的方法;③ 基于機器學習的方法;④ 基于深度學習的方法。對于基于包絡的方法,Moukadem 等[2]提出了一種通過 S 變換計算局部頻譜的香農能量包絡的方法。對于基于心音特征的方法,Pedrosa 等[3]利用自相關函數分析信號中的周期性分量特征來分割心音。對于基于機器學習的方法,Schimidt 等[4]基于隱式半馬爾科夫模型(hidden semi-Markov models,HSMM)模擬心音的預期持續時間,利用包絡和頻帶特征推導 HSMM 基于高斯分布的發射概率,該模型對心音的分割結果為 98.8% 的靈敏度和 98.6% 的陽性預測率。在 Schmidt 等[4]研究的基礎上,Springer 等[5]基于 HSMM,利用邏輯回歸進行發射概率估計,并改進維特比算法,在單獨測試集上的平均 F1 得分為 95.63%。但是上述研究所用數據集沒有足夠多的心音記錄,也沒有公開發布數據便于其他研究者比較結果。為此,PhysioNet 網站在 2016 年以心臟病學(Computing in Cardiology,CINC)挑戰賽的形式發布了公開心音數據集[6],記錄了 7 個不同研究小組獨立收集的 9 個心音數據庫。基于此數據集,并隨著深度學習的蓬勃發展,Messner 等[7]提出一種使用頻譜和包絡特征,基于深度遞歸神經網絡的事件檢測方法,該方法與當時最先進的 Springer 等[5]心音分割方法效果接近。Renna 等[8]結合了卷積神經網絡(convolutional neural network,CNN)和 HSMM 時序建模方法,用于精準推斷發射概率分布,陽性預測率為 94%。
目前很多最新的心音分析研究都基于上述提到的公開心音數據集,限于數據集標簽的限制,心音分類通常為二分類(正常/異常)。心音分類方法一般分為兩類:① 基于心音分割的分類方法;② 無需心音分割的分類方法。對于基于心音分割的分類,在 2016 PhysioNet CINC 挑戰賽上,Potes 等[9] 基于 Springer 等[5]心音分割方法,對信號提取 124 個時頻特征,并利用自適應增強(adaptive boosting,Adaboost)分類器對這些特征進行分類,此外還提取了 4 個頻帶的信號,將其輸入一維 CNN 進行識別,兩者共同決策分類,靈敏度和特異性的平均值(后文統稱為平均準確率)為 86.02%。Chen 等[10]基于支持向量機(support vector machine,SVM)對心音的時頻域特征進行了評估和擴展,再通過集成學習構建分類模型,該模型的靈敏度和特異性(后文統稱為精度)為 95.9%、91.7%。Oztavli 等[11]提取時頻、梅爾頻率倒譜系數(Mel-frequency cepstral coefficients,MFCC)、心率等特征,得出了疊加分類器比單獨分類器精度要高的結論。對于無需心音分割的分類,同年挑戰賽上,Zabihi 等[12]直接提取 18 個時頻域相關特征通過 20 個人工神經網絡進行投票分類,平均準確率為 85.9%。Yadav 等[13]提取心音信號的倒譜特征和傅里葉變換特征,通過 SVM 分類的精度分別為 100%、90%。Upretee 等[14]提出了一種簡單的時變頻譜特征,即質心頻率,通過 SVM 和 k 最近鄰(k-nearest neighbors,kNN)分類器也取得了非常好的效果。Li 等[15]利用小波散射變換提取特征,采用多維縮放方法進行降維,通過雙支持向量機分類的精度為 98%。Hamidi 等[16]采用了曲線擬合與將 MFCC、分形特征疊加融合兩種特征提取的方法,分類器采用 kNN,第二種特征提取方法的分類結果較優,平均準確率為 77%。然而,上述部分研究[10]、[13-15]在實驗數據集上存在一些問題:僅取公開數據集中的一部分記錄,并且大大提升異常比例,沒有考慮數據集不平衡的影響,這些方法在實驗測試集上的精度可能比其應用在實際中的結果偏高。另外,這些基于機器學習的分類研究也存在一個不足:對心音信號特征的提取有些不完整,有些數量太大,部分模型雖然通過降維篩選了一部分特征,但缺少對特征的驗證。
隨著深度學習受到越來越廣泛的關注,許多研究者也將其應用至心音分類領域。Ren 等[17]使用小波變換從等長切割的心音中提取比例圖像并通過 CNN 對心音進行分類,該方法的分類效果要優于 SVM,但精度不高。Li 等[18]通過降噪自動編碼器提取心音深層特征,利用 1 維 CNN 作為分類器,分類準確率為 99%。但是上述研究對原始數據集進行了擴展,將信號分為 3 s 的片段,樣本從每一條心音記錄優化為每一個片段,沒有考慮到心音序列時長不等這一性質的影響,并且允許同一記錄的片段出現在訓練集和測試集中,因此分類準確率比實際偏高,不符合臨床應用的環境。目前較為科學的研究是訓練集和測試集來自于不同心音記錄。Krishnan 等[19]采用一維 CNN 和前饋神經網絡對未分割心音進行分類,平均準確率為 85.7%。Meintjes 等[20]將連續小波變換得到的尺度圖作為特征通過 CNN 進行分類,平均準確率為 86%。Noman 等[21]開發了一維和二維 CNN 組合的時頻集成 CNN,平均準確率為 88.8%。Singh 等[22]對心音進行連續小波變換得到二維圖像,通過 Krizhevsky 等[23]提出的大型深層 CNN(AlexNet)訓練,平均準確率為 90%。上述最新研究表明,基于深度神經網絡的心音幀時頻特征分類系統,優于一般機器學習方法或傳統分類方法,目前分類的平均準確率在 90% 左右。不過,上述深度學習方法也存在忽略心音顯性特征的問題。另外,Qian 等[24]提出了一種基于小波表示和深度遞歸神經網絡的心音多分類(正常、輕度、嚴重)方法,為心音多分類的研究拓展了思路。
針對以往研究存在的關于實驗數據集劃分不規范、精度不高等問題,本文對分割后的心音特征展開研究,提出了一種基于極限梯度提升(extreme gradient boosting,XGBoost)和深度神經網絡共同決策的心音分類算法。XGBoost 是由 Chen 等[25]提出的集成學習方法,在梯度增強決策樹的基礎上引入正則化項,現已被廣泛應用于許多領域,例如 Shi 等[26]采用 XGBoost 對心電信號的多類特征進行分層聚類。而本文采用的深度神經網絡為長短時記憶網絡(long short-term memory network,LSTM),是 Hochreiter 等[27]提出的一種特殊的循環神經網絡,可利用門控單元對細胞狀態的信息進行增減控制。對比以往研究,本文算法創新點在于:① 對于心音信號提取的特征較之前研究的類別更廣泛;② 對數量龐大的特征采取了遞歸特征消除法進行特征選擇;③ 采取 XGBoost 和 LSTM 共同決策的方法進行分類,平均準確率較以往研究有所提高;④ 考慮了數據集不平衡的問題,對兩種模型都進行了加權改進。為驗證本文方法的有效性,將本研究所提算法應用于 2016 PhysioNet/CINC 挑戰賽所使用的心音數據集[6],并基于 Springer 等[5]的心音分割方法,提取心音信號在時域、頻域、小波變換、小波包變換、MFCC 的 5 類特征,通過遞歸特征消除法訓練 XGBoost 模型,以 MFCC 作為 LSTM 的輸入特征序列,以期分類準確率有較大提升,并提高對異常心音信號的識別靈敏度。綜上所述,本文研究是基于 XGBoost 和 LSTM 共同決策的心音分類方法,以提升心音信號分類準確率為目的,對心音分析領域具有一定意義,旨在推動心音分類算法在心血管疾病臨床診斷上的應用。
1 方法
如圖 1 所示,本文提出的分類方法主要由三個階段組成:① 預處理階段,對信號進行濾波和消除尖峰處理,并對心音進行分割;② 特征提取階段,根據心音分割結果提取出時域、頻域、小波、小波包、MFCC 五大類特征,前四類特征采用遞歸特征消除法作為 XGBoost 的特征選擇,MFCC 特征作為 LSTM 的輸入序列特征;③ 分類階段,采用基于 XGBoost 和 LSTM 的異質集成決策方法,得到最終的分類結果。

1.1 數據來源
本文使用的心音記錄數據來自于 PhysioNet 網站上的心音記錄的分類-2016 年心臟病學挑戰賽(Classification of Heart Sound Recordings-The PhysioNet Computing in Cardiology Challenge 2016)數據庫(網址為 https://www.physionet.org/content/challenge-2016/1.0.0/),該數據庫是一個用于評估心音算法的開放訪問數據庫[6]。該數據庫的心音信號從人體的 4 個不同部位采集,分別是主動脈區、肺心病區、三尖瓣區和二尖瓣區,共有 3 240 條樣本記錄,采樣頻率為 2 kHz,持續時間在 5~120 s 范圍。心音記錄被標記為兩種類型:正常記錄和異常記錄。正常記錄來自健康人群,異常記錄來自心臟疾病確診患者(通常包括心臟瓣膜缺損、冠心病等),異常記錄沒有更具體的分類。數據集是不平衡的,正常記錄的數量為 2 575,異常記錄的數量為 665。
1.2 預處理和心音分割
預處理的目的是為了消除心音信號中的噪聲,平滑信號,這一操作不但能提升心音分割效果,并且能提升最終分類模型的性能。首先,對所有的心音記錄進行下采樣至 1 000 Hz,并用巴特沃思濾波器對采樣后的信號進行 25~400 Hz 之間的帶通濾波,消除低頻和高頻噪聲影響。采用 Schmidt 等[4]在分割心音時的預處理方法消除信號尖峰,具體流程為:① 將信號分為多個 500 ms 的窗口;② 在每個窗口找到最大絕對振幅(maximum absolute amplitude,MAA);③ 如果至少有一個 MAA 超過平均 MAA 值的三倍,則選擇具有最大 MAA 的窗口,定義 MAA 點的位置為尖峰的頂部,MAA 之前的最后一個過零點為尖峰的起始點,MAA 之后的第一個過零點為尖峰的結束點,消除尖峰代替為 0。
一般而言,心音信號的一個心動周期可以分為 S1、收縮期、S2、舒張期 4 個狀態。對于后續自動心音分類方法而言,需要提取信號相關特征作為分類模型的輸入。除此之外,為了保證信號輸入的一致,對于數據集中的每一條心音記錄,需要切割其信號初始部分以保證從 S1 狀態開始。因此心音分割的目的是為了得到 S1、收縮期、S2、舒張期四個狀態所包含的信息來作為后續心音分割方法的輸入特征。
采用 Springer 等[5]基于邏輯回歸和 HSMM 的心音分割方法,具體流程為:① 從預處理后的記錄中提取同態包絡、希伯特包絡、正值小波包絡、功率譜密度等特征向量,作為 HSMM 模型的觀察序列;② 通過 Schmidt 等[4]對心臟周期和收縮期持續時間的估算定義,計算得到心率和收縮期的時間間隔;③ 設置 HSMM 模型隱藏序列為 S1、收縮期、S2、舒張期四個狀態,假設各個狀態的持續時間滿足一個與心率和收縮期時間間隔相關的高斯分布,并引入狀態持續時間概率;④ 每一個狀態的觀測概率由一個邏輯回歸模型估計得到,并且通過貝葉斯公式計算發射概率;⑤ 通過擴展持續時間的 Viterbi 算法來估計最可能的狀態序列以及達到該狀態序列的可能性。
1.3 特征提取
對于心音信號的特征提取,Liu 等[6]綜合部分文獻,從心音分割的 4 種狀態的位置信息中提取了 20 個特征。為了充分利用心音信號中的隱藏信息,本文提取的特征在表 1 中列出,并在下面對其進行了說明。

時域特征分為時域間隔特征和時域振幅特征,在心音分割得到 S1、S2、收縮期、間隔期的位置后,分別計算其時間間隔、平均振幅、偏度、峰度等特征,并在每個心臟跳動周期內計算平均值和標準差。
頻域特征通過漢明窗和離散傅里葉變換估計 S1、收縮期、S2、舒張期四個心音狀態的功率譜,將頻域劃分為 9 個頻帶(25~45 Hz、45~65 Hz、65~85 Hz、85~105 Hz、105~125 Hz、125~150 Hz、150~200 Hz、200~300 Hz、300~500 Hz),取四個狀態在這 9 個頻帶上的中值功率的平均值。
小波變換特征利用 db4 小波對心音信號進行 5 層分解,得到了不同頻率區間的小波分解系數,包括第 1~5 層的細節系數,記為變量 cD1~cD5,以及一個近似系數,記為變量 cA5,然后根據每一層小波系數得到不同頻率區間的重構信號,細節系數重構的信號記為 D1~D5,近似系數重構的信號記為 A5。小波變換特征分為系數特征和能量特征。系數特征取第 3、4、5 層的細節系數 cD3~cD5 和近似系數 cA5 的最大值、最小值、均值和標準差。能量特征取每個周期內四個心音狀態在重構信號 D3~D5 和 A5 上的單位頻率能量的平均值。
小波包熵特征利用 db4 小波對心音信號進行 5 層小波包分解,得到除根節點(原始信號)外的 62 個節點的小波包系數,取最后一層共 32 個節點的小波包熵。
MFCC 是梅爾刻度頻域提取出的倒譜參數。先對信號進行預加重,然后分幀、加窗,通過快速傅里葉變換得到各幀的頻譜和功率譜。通過梅爾刻度濾波器將頻率范圍刻畫在梅爾刻度區間的多個頻域子帶上,對子帶能量求對數,最后通過離散余弦變換得到 MFCC 系數,表示心音信號時域上的每一幀在梅爾刻度頻域上的能量系數。
此階段提取的時域、頻域特征、小波變換特征和小波包熵特征作為 XGBoost 分類器的輸入特征,提取的 MFCC 矩陣作為 LSTM 的輸入特征。
1.4 遞歸特征消除
上一節提取的特征一共有 136 個,數量龐大,容易出現過擬合,因此需要對特征進行篩選。采用遞歸特征消除,通過重復訓練模型,對特征進行排序,去除分數最小的特征,其流程如下:
(1)假設初始有 M 維特征,特征集為 F = [f1,f2,,fM],并且初始化排序后的特征集為 R = [];
(2)如果 F ≠ ?:
(a)樣本從 F 中選取特征,訓練模型;
(b)計算模型中每個特征的得分(XGBoost 模型中的得分為特征重要性):sk,k = 1,2,,M;
(c)找到分數最小的特征:f * = argmin(sk);
(d)從 F 中去除 f *,更新 R = [f *,R];
(3)從 R 中選擇排名較高的特征。
1.5 XGBoost
XGBoost[24]是一種基于決策樹的集成學習提升方法,將弱的基分類器組合為更強的分類器。
假設共有 K 個基分類器,對于輸入樣本 xi,其輸出 為 K 個基模型結果的累加之和,如式(1)所示:
![]() |
其中,fk(xi)是第 k 個基模型對于 xi 的輸出, 是所有樹的集合。目標函數 Obj 加入了正則化項,如式(2)所示:
![]() |
其中,l(yi,)為損失函數,度量預測值
和真實值 yi 的偏差,Ω(fk)為正則項,衡量樹的復雜性。學習至第 t 棵樹時,假設第 t 次迭代要訓練的樹模型為 ft(xi),
為前 t ? 1 棵樹的預測結果,則此時目標函數 Obj(t)如式(3)所示:
![]() |
通過泰勒展開后簡化常數項,式(3)可轉化為如式(4)所示:
![]() |
其中,gi 為 l(yi,)對
的一階偏導數,hi 為 l(yi,
)對
的二階偏導數,Ω(ft)為正則項,其定義如式(5)所示:
![]() |
其中,T 是樹的葉子數, 為 T 維葉子節點權重向量的 L2 范數,γ、λ 為描述葉子數復雜性和懲罰尺度的常數系數。假設樣本與葉子節點的映射關系為 q,第 j 個葉子節點的樣本集合為 Ij 如式(6)所示:
![]() |
則,式(5)可轉化為:
![]() |
定義函數,則,式(7)可以簡化為如式(8)所示:
![]() |
假設樹的結構是固定的,對目標函數 Obj(t)最小化可以求出所有葉子權重的最優值 ωj*,如式(9)所示:
![]() |
此時目標函數 Obj(t)的最優值也可計算得到,如式(10)所示:
![]() |
在訓練過程中,XGBoost 采用貪心算法選擇最優分裂節點,定義每次分裂后的左右兩個子樹集合為 IL、IR,式(8)定義的函數 G、H 對應為 GL、HL、GR、HR,于是評估每個特征在每個特征值上的收益 Gain,如式(11)所示:
![]() |
1.6 LSTM
LSTM[26]是循環神經網絡的一種,其網絡層結構如圖 2 所示。

t 時刻 LSTM 模塊包含兩個傳輸狀態:細胞狀態矩陣 Ct 傳遞的是 t 時刻之前歷史信息的選擇性記憶,隱藏狀態矩陣 ht 存儲的是當前 t 時刻的總體信息。LSTM 由三個門控單元組成:遺忘門、輸入門和輸出門。LSTM 在 t 時刻工作時一共有四個階段:
(1)遺忘階段:ztf 作為遺忘門,控制上一個狀態 Ct 信息的保留比例,其表達式如式(12)所示:
![]() |
其中,Wf 為隱藏層 ht ? 1 和輸入 xt 在遺忘門的的權重矩陣,bf 為截距,σ 為 sigmoid 函數,將輸出映射在[0,1]之間,表示遺忘部分的選擇比例。
(2)存儲階段:確定需要在細胞狀態中保存的信息。第一部分,zti 為輸入門,確定哪些信息需要更新,其表達式如式(13)所示:
![]() |
其中,Wi 為 ht ? 1 和 xt 在輸入門的的權重矩陣,bi 為截距。第二部分,通過一個 tanh 層創建一個實質信息向量 zt,其表達式如式(14)所示:
![]() |
其中,WC 為 ht ? 1 和 xt 在此部分對應的權重矩陣,bC 為截距,tanh 為雙曲正切函數,作為激活函數。
(3)更新階段:將 Ct ? 1 保留下的信息加上 t 時刻輸入的信息,從而更新 Ct,其表達式如式(15)所示:
![]() |
其中,“”為哈達瑪積運算。ztf 為遺忘門保留的比例,Ct ? 1 為實質信息,兩者結合就是保留下的歷史信息。同理,zti 與 zt 結合為實際輸入的信息。
(4)輸出階段:zto 作為輸出門,確定細胞狀態中可以輸出的信息,其表達式如式(16)所示:
![]() |
其中,Wo 為 ht-1 和 xt 在輸出門的權重矩陣,bo 為截距。zto 與當前時刻選擇性記憶的實質信息 Ct 結合,得到當前狀態的輸出 ht,其表達式如式(17)所示:
![]() |
其中,tanh 函數對 Ct 進行了放縮。最終輸出 yt 的表達式如式(18)所示:
![]() |
其中,Wyh、by 為此部分的權重矩陣和截距。
1.7 異質集成決策方法
分類決策方法借鑒集成學習中投票法的硬投票思想,考慮基分類器的準確性和多樣性,采用 XGBoost 和 LSTM 兩種高效模型的異質集成方式,得到最終的分類結果。異質不僅體現在分類器類型不同、算法不同,在訓練時提取的特征也不同。
為了提升預測模型對異常的靈敏度,最終的決策方法對硬投票也進行了改進,基于整個數據集異常記錄較少的事實。XGBoost 為正常/異常的二分類模型,而 LSTM 的預測結果除了正常/異常外,加入了不確定的結果選項。所以將決策規則定義為:若 LSTM 預測為異常,則最終分類結果為異常;若 LSTM 預測為正常或者不確定,則最終分類結果為 XGBoost 的分類結果,如圖 3 所示。

2 實驗設計
2.1 評價指標
本研究采用靈敏度 Se,特異性 Sp 和準確率 Acc 來評估分類器的性能,如式(19)~式(21)所示:
![]() |
![]() |
![]() |
其中,TP 為真陽性,表示正確預測異常的數量;FN 為假陰性,表示異常未被預測的數量;TN 為真陰性,表示正確預測正常的數量;FP 為假陽性,表示被錯誤預測為異常的數量。
在對心音記錄分類過程中,除了異常和正常之外,可能會出現由于噪聲或信號質量差等原因對預測不確定的情況。因此根據 PhysioNet 挑戰賽[6]確定的分數規則,對靈敏度 Se 和特異性 Sp 添加不確定權重系數(這里設為 0.5)進行修正,修正后的準確率 MAcc 如式(22)所示:
![]() |
考慮到臨床上假陰比假陽的風險大很多,漏診會耽誤治療,而假陽可以通過進一步檢查排除,因此適當增加靈敏度權重,更具有臨床價值。本實驗引入另一項評價指標 F 得分 Fβ,綜合靈敏度和特異性的調和值,如式(23)所示:
![]() |
為了適當提升靈敏度的重要性,β 取值要大于 1,本實驗取 β = 1.1,F 得分記為 F1.1。
2.2 XGBoost 模型設計
通過數學軟件 Matlab 2016a(MathWorks,美國)對心音數據集的 3 240 條心音記錄進行預處理和心音分割,提取了前四個類別的 136 個特征。通過 Python 編程語言開發撰寫時使用的集成開發環境 PyCharm 2020.1(JetBrains,捷克)對這些特征進行缺失值和歸一化處理,然后以 XGBoost 的特征重要性為得分排名的依據,對所有記錄的 136 個特征進行 3 折交叉驗證的遞歸特征消除,XGBoost 的特征重要性通過式(11)計算的收益 Gain 得到。選擇得分排名前 20 的特征,作為 XGBoost 的輸入特征,如圖 4 所示,縱坐標顯示的特征與表 1 中的特征標記一一對應。

隨后,對數據集進行劃分,測試集比例為 0.3,由于數據集正負樣本不平衡,劃分時采用分層抽樣,確保正常/異常兩個標簽對應的樣本比例。
對訓練集采用 5 折交叉驗證的網格搜索方法,比較 XGBoost 模型對應每一種情況的得分,選擇最優的模型參數。首先確定需優化參數的網格搜索范圍與搜索步長,然后通過每一輪情況的損失函數計算相對應的模型得分,選擇得分最高的模型為最優模型。實驗得到最優模型參數:樹的個數為 500,樹的深度為 5 層,葉子節點最小權重為 2,懲罰項系數為 0,L1 正則化系數為 10,L2 正則化系數為 3,學習率為 0.05。由于數據集正負樣本不平衡,正常異常比例在 4:1 左右,因此設置模型參數中的異常權重為 4。最后將得到的 XGBoost 最優模型應用于測試集上,預測分類結果。
2.3 MFCC-LSTM 模型設計
對訓練集的心音記錄進行移位,保證從 S1 狀態開始,然后進行 3 s 等時間段切割(因為心動周期一般為 1 s 左右,保證切割后的每一段心音都能保留一個完整的心動周期),確保得到的 MFCC 特征時間長度相等。使用 Python 對切割后的心音進行 MFCC 分析,設置參數:窗口為漢明窗,幀長(窗口長度)為 25 ms,幀移(窗口之間步長)為 10 ms,返回的倒譜數量為 12,濾波器組中過濾器數量為 26 個,快速傅里葉變換的采樣點數為 512,倒譜的正弦升降參數為 22。
訓練集中的 2 268 個心音樣本經過切割和 MFCC 分析后,轉變為 15 733 個 MFCC 樣本,作為 LSTM 訓練的輸入,標簽也隨之擴展。每個樣本的輸入特征維度為,表示心音記錄在 299 幀時間段內,在 12 個梅爾刻度等級上的倒譜特征,明顯包含時序特征,因此 LSTM 架構如圖 5 所示,時間步 t 的總長為 299,每一時間步的輸入 xt 維度為 12,隱藏層為 l 層,每一層含 s 個隱藏元,即每一層的隱藏狀態信息 ih(t)(i = 0,1,
,l)為 s 維向量,皆隨著時間步 t 而傳遞,同時傳遞的還有細胞狀態信息 C(t),輸出 y(t)為 2 維向量,表示異常和正常兩種標簽的概率,因此,最后一個時間步 t = 299 時的輸出 y(299)為最終的模型輸出 out。

訓練 LSTM 模型時采用批處理,訓練輪數(epoch)為 20,每輪的批次(batch)為 50,學習率為 0.001,每個批次中設置隨機失活(dropout)為 0.5,通過忽略一半的隱層節點減少過擬合。優化參數的權重更新采用自適應矩估計(adaptive moment,Adam)優化器,損失函數使用的是交叉熵損失函數,由于正負樣本不平衡,在損失函數中設置正常、異常標簽的權重比例為 0.2 和 0.8。調整網絡的超參數(隱藏層數 l,隱藏元個數 s)的范圍分別為{20,50,100,150,200}和{1,2,3},比較其結果。
對于測試集中的心音記錄也進行切割和 MFCC 分析,每一條記錄由多個心音片段的 MFCC 特征組成,每一個特征通過訓練的 LSTM 進行預測,最后對這一條記錄得到的多個分類結果進行硬投票:取輸出最多的那一類標簽(如果心音被切割為偶數段,且兩類標簽數量相等,則結果為不確定)。
3 實驗結果和討論
3.1 實驗結果
將得到的 XGBoost 模型在測試集上進行預測,根據式(19)~式(23)計算模型得分:Acc = 92.3%、Se = 76.9%、Sp = 96.2%、MAcc = 86.6%、F1.1 = 84.6%。
LSTM 采用不同結構(隱藏層數,每層隱藏元數)進行實驗。如表 2 所示列出了所有結構的實驗預測結果,發現 LSTM 的預測結果對異常的靈敏度普遍都很高,由于異常在樣本中的比例較低,造成準確率略低,但修正后的準確率是令人滿意的;隱藏元較少時,準確率較低,但當隱藏元個數增加到一定程度時,對結果影響不大;隱藏層數的增加對結果有一定幫助,2 層效果最佳。因此取 2 層 100 隱藏元。

最后采用 1.7 小節中決策方法對 XGBoost 和 LSTM 共同決策,最終模型預測結果為:Acc = 90.1%、Se = 93.0%、Sp = 89.4%、MAcc = 91.2%、F1.1 = 91.3%。
3.2 預處理方法的對比實驗
為了驗證預處理步驟對心音分類方法的影響,本文還增加了一組對比實驗,用于分析預處理步驟對 LSTM 模型分類性能的影響。在對比實驗中,取消預處理步驟,直接進行心音分割,提取特征,最后通過 LSTM 模型分類的實驗結果為:Se = 88.4%、Sp = 86.1%、MAcc = 87.3%、F1.1 = 87.4%,發現各項評估得分都低于 3.1 小節中有預處理步驟的 LSTM 預測結果(Se = 91.7%、Sp = 88.3%、MAcc = 90.0%、F1.1 = 90.2%)。對比實驗結果表明,預處理步驟能提升該心音分類模型的性能。
3.3 比較與討論
本實驗研究了不同深度神經網絡對心音分類的影響,對心音信號劃分相同訓練集,提取 MFCC 特征,然后使用了以下分類方法:① CNN 分類;② LSTM 分類;③ 分別通過單獨的 CNN 和單獨的 LSTM,最后通過融合層合并在一起分類;④ 采用 Sainath 等[28]提出的卷積-長短時記憶-全連接深度神經網絡(convolutional,long short-term memory,fully connected deep neural networks,CLDNN),即先通過 CNN 再通過 LSTM,最后通過全連接層分類。為了使本文研究方法的高效性更具有說服力,本實驗結果也與最新的基于同一數據集的心音分類方法,即文獻[9, 12, 16, 19-22]中的方法進行比較。所有心音分類方法的性能比較如表 3 所示。

結果表明:① 深度神經網絡與傳統機器學習方法比較,對心音分類的效果(MAcc 和 F1.1)更好,主要體現在對異常記錄識別的靈敏度更高,雖然整個數據集異常比例較少,造成誤診的成本增加,但是大大降低了漏診的風險。② 在深度神經網絡的研究中,純粹的 LSTM 比其他網絡的分類效果要更好,主要因為提取的 MFCC 特征具有明顯的時序性,適用于 LSTM 網絡,而 CNN 對于時域和頻域特征維度的提取可能引起一些信息的遺失,因此本文采用的是 LSTM 網絡。③ 本文提出的基于 XGBoost 和 LSTM 的共同決策方法,XGBoost 保證分類的特異性較高,進一步引入 LSTM 共同決策,在略微降低特異性的前提下大幅提升了整個分類模型的靈敏度,最終分類的準確率比目前最新的方法有所提升。
4 結論
本文提出了一種基于 XGBoost 和 LSTM 共同決策的心音分類方法。首先,在心音分割確定 S1、收縮期、S2、舒張期四個狀態的基礎上,提取了四個類別的 136 個特征,通過遞歸特征消除法篩選出 20 個特征作為 XGBoost 分類器的輸入特征。其次,提取了具有時序性的 MFCC 特征,作為深度神經網絡 LSTM 的輸入。最終對這兩種模型的分類結果進行決策,得到最后的分類結果。實驗中,本文分別對 XGBoost 和 LSTM 分類器的調優采用了網格搜索法和結構調參法,選取了各自的最優模型,并針對數據集不平衡問題,在各自模型中分別加入加權改進。結果表明,該方法在測試集上對心音異常/正常的分類結果為:Acc = 90.1%、Se = 93.0%、Sp = 89.4%、MAcc = 91.2%、F1.1 = 91.3%,與最新的其他分類方法相比,該方法在準確性和靈敏度上有所提升,達到了更好的分類效果,為部分心血管疾病的臨床輔助診斷提供一種較好的選擇。
利益沖突聲明:本文全體作者均聲明不存在利益沖突。
引言
心血管疾病是全球第一死因,據世界衛生組織 2016 年統計,每年有 1 790 萬人死于心血管疾病,占全球死亡人數的 31%,其中 85% 是因心臟病發作和中風所致[1]。心音是心臟收縮和舒張引起的振動產生的聲音,現已作為診斷心血管疾病常用的醫學信號之一。基本心音通常包括第一心音(first heart sound,S1)和第二心音(second heart sound,S2),是心臟周期中最容易辨認的聲音。然而,心臟的機械活動可能引起其他聲音,如第三、第四心音和一些心臟雜音等,在時域和頻域上很難區分,造成異常和正常心音的分離也很困難。近幾十年來,研究人員對心音的自動診斷識別展開了廣泛的研究。
心音分析通常包括三個步驟:預處理、心音分割和心音分類。心音圖通常受到不同類型的噪聲污染,預處理中濾波的目的是為了消除這些噪聲,確定基準點的位置,同時避免信號偏移。在濾波后,研究者往往會采取重采樣或下采樣,在保持數據一致性的基礎上減少計算成本。心音分割是指確定心音信號中 S1、S2 和心臟的收縮期、舒張期 4 個狀態的位置區間,在大多數研究中作為心音分類特征工程的前提。國內外研究學者對許多心音分割方法進行了研究,典型的方法可以分為四類:① 基于包絡的方法;② 基于心音特征的方法;③ 基于機器學習的方法;④ 基于深度學習的方法。對于基于包絡的方法,Moukadem 等[2]提出了一種通過 S 變換計算局部頻譜的香農能量包絡的方法。對于基于心音特征的方法,Pedrosa 等[3]利用自相關函數分析信號中的周期性分量特征來分割心音。對于基于機器學習的方法,Schimidt 等[4]基于隱式半馬爾科夫模型(hidden semi-Markov models,HSMM)模擬心音的預期持續時間,利用包絡和頻帶特征推導 HSMM 基于高斯分布的發射概率,該模型對心音的分割結果為 98.8% 的靈敏度和 98.6% 的陽性預測率。在 Schmidt 等[4]研究的基礎上,Springer 等[5]基于 HSMM,利用邏輯回歸進行發射概率估計,并改進維特比算法,在單獨測試集上的平均 F1 得分為 95.63%。但是上述研究所用數據集沒有足夠多的心音記錄,也沒有公開發布數據便于其他研究者比較結果。為此,PhysioNet 網站在 2016 年以心臟病學(Computing in Cardiology,CINC)挑戰賽的形式發布了公開心音數據集[6],記錄了 7 個不同研究小組獨立收集的 9 個心音數據庫。基于此數據集,并隨著深度學習的蓬勃發展,Messner 等[7]提出一種使用頻譜和包絡特征,基于深度遞歸神經網絡的事件檢測方法,該方法與當時最先進的 Springer 等[5]心音分割方法效果接近。Renna 等[8]結合了卷積神經網絡(convolutional neural network,CNN)和 HSMM 時序建模方法,用于精準推斷發射概率分布,陽性預測率為 94%。
目前很多最新的心音分析研究都基于上述提到的公開心音數據集,限于數據集標簽的限制,心音分類通常為二分類(正常/異常)。心音分類方法一般分為兩類:① 基于心音分割的分類方法;② 無需心音分割的分類方法。對于基于心音分割的分類,在 2016 PhysioNet CINC 挑戰賽上,Potes 等[9] 基于 Springer 等[5]心音分割方法,對信號提取 124 個時頻特征,并利用自適應增強(adaptive boosting,Adaboost)分類器對這些特征進行分類,此外還提取了 4 個頻帶的信號,將其輸入一維 CNN 進行識別,兩者共同決策分類,靈敏度和特異性的平均值(后文統稱為平均準確率)為 86.02%。Chen 等[10]基于支持向量機(support vector machine,SVM)對心音的時頻域特征進行了評估和擴展,再通過集成學習構建分類模型,該模型的靈敏度和特異性(后文統稱為精度)為 95.9%、91.7%。Oztavli 等[11]提取時頻、梅爾頻率倒譜系數(Mel-frequency cepstral coefficients,MFCC)、心率等特征,得出了疊加分類器比單獨分類器精度要高的結論。對于無需心音分割的分類,同年挑戰賽上,Zabihi 等[12]直接提取 18 個時頻域相關特征通過 20 個人工神經網絡進行投票分類,平均準確率為 85.9%。Yadav 等[13]提取心音信號的倒譜特征和傅里葉變換特征,通過 SVM 分類的精度分別為 100%、90%。Upretee 等[14]提出了一種簡單的時變頻譜特征,即質心頻率,通過 SVM 和 k 最近鄰(k-nearest neighbors,kNN)分類器也取得了非常好的效果。Li 等[15]利用小波散射變換提取特征,采用多維縮放方法進行降維,通過雙支持向量機分類的精度為 98%。Hamidi 等[16]采用了曲線擬合與將 MFCC、分形特征疊加融合兩種特征提取的方法,分類器采用 kNN,第二種特征提取方法的分類結果較優,平均準確率為 77%。然而,上述部分研究[10]、[13-15]在實驗數據集上存在一些問題:僅取公開數據集中的一部分記錄,并且大大提升異常比例,沒有考慮數據集不平衡的影響,這些方法在實驗測試集上的精度可能比其應用在實際中的結果偏高。另外,這些基于機器學習的分類研究也存在一個不足:對心音信號特征的提取有些不完整,有些數量太大,部分模型雖然通過降維篩選了一部分特征,但缺少對特征的驗證。
隨著深度學習受到越來越廣泛的關注,許多研究者也將其應用至心音分類領域。Ren 等[17]使用小波變換從等長切割的心音中提取比例圖像并通過 CNN 對心音進行分類,該方法的分類效果要優于 SVM,但精度不高。Li 等[18]通過降噪自動編碼器提取心音深層特征,利用 1 維 CNN 作為分類器,分類準確率為 99%。但是上述研究對原始數據集進行了擴展,將信號分為 3 s 的片段,樣本從每一條心音記錄優化為每一個片段,沒有考慮到心音序列時長不等這一性質的影響,并且允許同一記錄的片段出現在訓練集和測試集中,因此分類準確率比實際偏高,不符合臨床應用的環境。目前較為科學的研究是訓練集和測試集來自于不同心音記錄。Krishnan 等[19]采用一維 CNN 和前饋神經網絡對未分割心音進行分類,平均準確率為 85.7%。Meintjes 等[20]將連續小波變換得到的尺度圖作為特征通過 CNN 進行分類,平均準確率為 86%。Noman 等[21]開發了一維和二維 CNN 組合的時頻集成 CNN,平均準確率為 88.8%。Singh 等[22]對心音進行連續小波變換得到二維圖像,通過 Krizhevsky 等[23]提出的大型深層 CNN(AlexNet)訓練,平均準確率為 90%。上述最新研究表明,基于深度神經網絡的心音幀時頻特征分類系統,優于一般機器學習方法或傳統分類方法,目前分類的平均準確率在 90% 左右。不過,上述深度學習方法也存在忽略心音顯性特征的問題。另外,Qian 等[24]提出了一種基于小波表示和深度遞歸神經網絡的心音多分類(正常、輕度、嚴重)方法,為心音多分類的研究拓展了思路。
針對以往研究存在的關于實驗數據集劃分不規范、精度不高等問題,本文對分割后的心音特征展開研究,提出了一種基于極限梯度提升(extreme gradient boosting,XGBoost)和深度神經網絡共同決策的心音分類算法。XGBoost 是由 Chen 等[25]提出的集成學習方法,在梯度增強決策樹的基礎上引入正則化項,現已被廣泛應用于許多領域,例如 Shi 等[26]采用 XGBoost 對心電信號的多類特征進行分層聚類。而本文采用的深度神經網絡為長短時記憶網絡(long short-term memory network,LSTM),是 Hochreiter 等[27]提出的一種特殊的循環神經網絡,可利用門控單元對細胞狀態的信息進行增減控制。對比以往研究,本文算法創新點在于:① 對于心音信號提取的特征較之前研究的類別更廣泛;② 對數量龐大的特征采取了遞歸特征消除法進行特征選擇;③ 采取 XGBoost 和 LSTM 共同決策的方法進行分類,平均準確率較以往研究有所提高;④ 考慮了數據集不平衡的問題,對兩種模型都進行了加權改進。為驗證本文方法的有效性,將本研究所提算法應用于 2016 PhysioNet/CINC 挑戰賽所使用的心音數據集[6],并基于 Springer 等[5]的心音分割方法,提取心音信號在時域、頻域、小波變換、小波包變換、MFCC 的 5 類特征,通過遞歸特征消除法訓練 XGBoost 模型,以 MFCC 作為 LSTM 的輸入特征序列,以期分類準確率有較大提升,并提高對異常心音信號的識別靈敏度。綜上所述,本文研究是基于 XGBoost 和 LSTM 共同決策的心音分類方法,以提升心音信號分類準確率為目的,對心音分析領域具有一定意義,旨在推動心音分類算法在心血管疾病臨床診斷上的應用。
1 方法
如圖 1 所示,本文提出的分類方法主要由三個階段組成:① 預處理階段,對信號進行濾波和消除尖峰處理,并對心音進行分割;② 特征提取階段,根據心音分割結果提取出時域、頻域、小波、小波包、MFCC 五大類特征,前四類特征采用遞歸特征消除法作為 XGBoost 的特征選擇,MFCC 特征作為 LSTM 的輸入序列特征;③ 分類階段,采用基于 XGBoost 和 LSTM 的異質集成決策方法,得到最終的分類結果。

1.1 數據來源
本文使用的心音記錄數據來自于 PhysioNet 網站上的心音記錄的分類-2016 年心臟病學挑戰賽(Classification of Heart Sound Recordings-The PhysioNet Computing in Cardiology Challenge 2016)數據庫(網址為 https://www.physionet.org/content/challenge-2016/1.0.0/),該數據庫是一個用于評估心音算法的開放訪問數據庫[6]。該數據庫的心音信號從人體的 4 個不同部位采集,分別是主動脈區、肺心病區、三尖瓣區和二尖瓣區,共有 3 240 條樣本記錄,采樣頻率為 2 kHz,持續時間在 5~120 s 范圍。心音記錄被標記為兩種類型:正常記錄和異常記錄。正常記錄來自健康人群,異常記錄來自心臟疾病確診患者(通常包括心臟瓣膜缺損、冠心病等),異常記錄沒有更具體的分類。數據集是不平衡的,正常記錄的數量為 2 575,異常記錄的數量為 665。
1.2 預處理和心音分割
預處理的目的是為了消除心音信號中的噪聲,平滑信號,這一操作不但能提升心音分割效果,并且能提升最終分類模型的性能。首先,對所有的心音記錄進行下采樣至 1 000 Hz,并用巴特沃思濾波器對采樣后的信號進行 25~400 Hz 之間的帶通濾波,消除低頻和高頻噪聲影響。采用 Schmidt 等[4]在分割心音時的預處理方法消除信號尖峰,具體流程為:① 將信號分為多個 500 ms 的窗口;② 在每個窗口找到最大絕對振幅(maximum absolute amplitude,MAA);③ 如果至少有一個 MAA 超過平均 MAA 值的三倍,則選擇具有最大 MAA 的窗口,定義 MAA 點的位置為尖峰的頂部,MAA 之前的最后一個過零點為尖峰的起始點,MAA 之后的第一個過零點為尖峰的結束點,消除尖峰代替為 0。
一般而言,心音信號的一個心動周期可以分為 S1、收縮期、S2、舒張期 4 個狀態。對于后續自動心音分類方法而言,需要提取信號相關特征作為分類模型的輸入。除此之外,為了保證信號輸入的一致,對于數據集中的每一條心音記錄,需要切割其信號初始部分以保證從 S1 狀態開始。因此心音分割的目的是為了得到 S1、收縮期、S2、舒張期四個狀態所包含的信息來作為后續心音分割方法的輸入特征。
采用 Springer 等[5]基于邏輯回歸和 HSMM 的心音分割方法,具體流程為:① 從預處理后的記錄中提取同態包絡、希伯特包絡、正值小波包絡、功率譜密度等特征向量,作為 HSMM 模型的觀察序列;② 通過 Schmidt 等[4]對心臟周期和收縮期持續時間的估算定義,計算得到心率和收縮期的時間間隔;③ 設置 HSMM 模型隱藏序列為 S1、收縮期、S2、舒張期四個狀態,假設各個狀態的持續時間滿足一個與心率和收縮期時間間隔相關的高斯分布,并引入狀態持續時間概率;④ 每一個狀態的觀測概率由一個邏輯回歸模型估計得到,并且通過貝葉斯公式計算發射概率;⑤ 通過擴展持續時間的 Viterbi 算法來估計最可能的狀態序列以及達到該狀態序列的可能性。
1.3 特征提取
對于心音信號的特征提取,Liu 等[6]綜合部分文獻,從心音分割的 4 種狀態的位置信息中提取了 20 個特征。為了充分利用心音信號中的隱藏信息,本文提取的特征在表 1 中列出,并在下面對其進行了說明。

時域特征分為時域間隔特征和時域振幅特征,在心音分割得到 S1、S2、收縮期、間隔期的位置后,分別計算其時間間隔、平均振幅、偏度、峰度等特征,并在每個心臟跳動周期內計算平均值和標準差。
頻域特征通過漢明窗和離散傅里葉變換估計 S1、收縮期、S2、舒張期四個心音狀態的功率譜,將頻域劃分為 9 個頻帶(25~45 Hz、45~65 Hz、65~85 Hz、85~105 Hz、105~125 Hz、125~150 Hz、150~200 Hz、200~300 Hz、300~500 Hz),取四個狀態在這 9 個頻帶上的中值功率的平均值。
小波變換特征利用 db4 小波對心音信號進行 5 層分解,得到了不同頻率區間的小波分解系數,包括第 1~5 層的細節系數,記為變量 cD1~cD5,以及一個近似系數,記為變量 cA5,然后根據每一層小波系數得到不同頻率區間的重構信號,細節系數重構的信號記為 D1~D5,近似系數重構的信號記為 A5。小波變換特征分為系數特征和能量特征。系數特征取第 3、4、5 層的細節系數 cD3~cD5 和近似系數 cA5 的最大值、最小值、均值和標準差。能量特征取每個周期內四個心音狀態在重構信號 D3~D5 和 A5 上的單位頻率能量的平均值。
小波包熵特征利用 db4 小波對心音信號進行 5 層小波包分解,得到除根節點(原始信號)外的 62 個節點的小波包系數,取最后一層共 32 個節點的小波包熵。
MFCC 是梅爾刻度頻域提取出的倒譜參數。先對信號進行預加重,然后分幀、加窗,通過快速傅里葉變換得到各幀的頻譜和功率譜。通過梅爾刻度濾波器將頻率范圍刻畫在梅爾刻度區間的多個頻域子帶上,對子帶能量求對數,最后通過離散余弦變換得到 MFCC 系數,表示心音信號時域上的每一幀在梅爾刻度頻域上的能量系數。
此階段提取的時域、頻域特征、小波變換特征和小波包熵特征作為 XGBoost 分類器的輸入特征,提取的 MFCC 矩陣作為 LSTM 的輸入特征。
1.4 遞歸特征消除
上一節提取的特征一共有 136 個,數量龐大,容易出現過擬合,因此需要對特征進行篩選。采用遞歸特征消除,通過重復訓練模型,對特征進行排序,去除分數最小的特征,其流程如下:
(1)假設初始有 M 維特征,特征集為 F = [f1,f2,,fM],并且初始化排序后的特征集為 R = [];
(2)如果 F ≠ ?:
(a)樣本從 F 中選取特征,訓練模型;
(b)計算模型中每個特征的得分(XGBoost 模型中的得分為特征重要性):sk,k = 1,2,,M;
(c)找到分數最小的特征:f * = argmin(sk);
(d)從 F 中去除 f *,更新 R = [f *,R];
(3)從 R 中選擇排名較高的特征。
1.5 XGBoost
XGBoost[24]是一種基于決策樹的集成學習提升方法,將弱的基分類器組合為更強的分類器。
假設共有 K 個基分類器,對于輸入樣本 xi,其輸出 為 K 個基模型結果的累加之和,如式(1)所示:
![]() |
其中,fk(xi)是第 k 個基模型對于 xi 的輸出, 是所有樹的集合。目標函數 Obj 加入了正則化項,如式(2)所示:
![]() |
其中,l(yi,)為損失函數,度量預測值
和真實值 yi 的偏差,Ω(fk)為正則項,衡量樹的復雜性。學習至第 t 棵樹時,假設第 t 次迭代要訓練的樹模型為 ft(xi),
為前 t ? 1 棵樹的預測結果,則此時目標函數 Obj(t)如式(3)所示:
![]() |
通過泰勒展開后簡化常數項,式(3)可轉化為如式(4)所示:
![]() |
其中,gi 為 l(yi,)對
的一階偏導數,hi 為 l(yi,
)對
的二階偏導數,Ω(ft)為正則項,其定義如式(5)所示:
![]() |
其中,T 是樹的葉子數, 為 T 維葉子節點權重向量的 L2 范數,γ、λ 為描述葉子數復雜性和懲罰尺度的常數系數。假設樣本與葉子節點的映射關系為 q,第 j 個葉子節點的樣本集合為 Ij 如式(6)所示:
![]() |
則,式(5)可轉化為:
![]() |
定義函數,則,式(7)可以簡化為如式(8)所示:
![]() |
假設樹的結構是固定的,對目標函數 Obj(t)最小化可以求出所有葉子權重的最優值 ωj*,如式(9)所示:
![]() |
此時目標函數 Obj(t)的最優值也可計算得到,如式(10)所示:
![]() |
在訓練過程中,XGBoost 采用貪心算法選擇最優分裂節點,定義每次分裂后的左右兩個子樹集合為 IL、IR,式(8)定義的函數 G、H 對應為 GL、HL、GR、HR,于是評估每個特征在每個特征值上的收益 Gain,如式(11)所示:
![]() |
1.6 LSTM
LSTM[26]是循環神經網絡的一種,其網絡層結構如圖 2 所示。

t 時刻 LSTM 模塊包含兩個傳輸狀態:細胞狀態矩陣 Ct 傳遞的是 t 時刻之前歷史信息的選擇性記憶,隱藏狀態矩陣 ht 存儲的是當前 t 時刻的總體信息。LSTM 由三個門控單元組成:遺忘門、輸入門和輸出門。LSTM 在 t 時刻工作時一共有四個階段:
(1)遺忘階段:ztf 作為遺忘門,控制上一個狀態 Ct 信息的保留比例,其表達式如式(12)所示:
![]() |
其中,Wf 為隱藏層 ht ? 1 和輸入 xt 在遺忘門的的權重矩陣,bf 為截距,σ 為 sigmoid 函數,將輸出映射在[0,1]之間,表示遺忘部分的選擇比例。
(2)存儲階段:確定需要在細胞狀態中保存的信息。第一部分,zti 為輸入門,確定哪些信息需要更新,其表達式如式(13)所示:
![]() |
其中,Wi 為 ht ? 1 和 xt 在輸入門的的權重矩陣,bi 為截距。第二部分,通過一個 tanh 層創建一個實質信息向量 zt,其表達式如式(14)所示:
![]() |
其中,WC 為 ht ? 1 和 xt 在此部分對應的權重矩陣,bC 為截距,tanh 為雙曲正切函數,作為激活函數。
(3)更新階段:將 Ct ? 1 保留下的信息加上 t 時刻輸入的信息,從而更新 Ct,其表達式如式(15)所示:
![]() |
其中,“”為哈達瑪積運算。ztf 為遺忘門保留的比例,Ct ? 1 為實質信息,兩者結合就是保留下的歷史信息。同理,zti 與 zt 結合為實際輸入的信息。
(4)輸出階段:zto 作為輸出門,確定細胞狀態中可以輸出的信息,其表達式如式(16)所示:
![]() |
其中,Wo 為 ht-1 和 xt 在輸出門的權重矩陣,bo 為截距。zto 與當前時刻選擇性記憶的實質信息 Ct 結合,得到當前狀態的輸出 ht,其表達式如式(17)所示:
![]() |
其中,tanh 函數對 Ct 進行了放縮。最終輸出 yt 的表達式如式(18)所示:
![]() |
其中,Wyh、by 為此部分的權重矩陣和截距。
1.7 異質集成決策方法
分類決策方法借鑒集成學習中投票法的硬投票思想,考慮基分類器的準確性和多樣性,采用 XGBoost 和 LSTM 兩種高效模型的異質集成方式,得到最終的分類結果。異質不僅體現在分類器類型不同、算法不同,在訓練時提取的特征也不同。
為了提升預測模型對異常的靈敏度,最終的決策方法對硬投票也進行了改進,基于整個數據集異常記錄較少的事實。XGBoost 為正常/異常的二分類模型,而 LSTM 的預測結果除了正常/異常外,加入了不確定的結果選項。所以將決策規則定義為:若 LSTM 預測為異常,則最終分類結果為異常;若 LSTM 預測為正常或者不確定,則最終分類結果為 XGBoost 的分類結果,如圖 3 所示。

2 實驗設計
2.1 評價指標
本研究采用靈敏度 Se,特異性 Sp 和準確率 Acc 來評估分類器的性能,如式(19)~式(21)所示:
![]() |
![]() |
![]() |
其中,TP 為真陽性,表示正確預測異常的數量;FN 為假陰性,表示異常未被預測的數量;TN 為真陰性,表示正確預測正常的數量;FP 為假陽性,表示被錯誤預測為異常的數量。
在對心音記錄分類過程中,除了異常和正常之外,可能會出現由于噪聲或信號質量差等原因對預測不確定的情況。因此根據 PhysioNet 挑戰賽[6]確定的分數規則,對靈敏度 Se 和特異性 Sp 添加不確定權重系數(這里設為 0.5)進行修正,修正后的準確率 MAcc 如式(22)所示:
![]() |
考慮到臨床上假陰比假陽的風險大很多,漏診會耽誤治療,而假陽可以通過進一步檢查排除,因此適當增加靈敏度權重,更具有臨床價值。本實驗引入另一項評價指標 F 得分 Fβ,綜合靈敏度和特異性的調和值,如式(23)所示:
![]() |
為了適當提升靈敏度的重要性,β 取值要大于 1,本實驗取 β = 1.1,F 得分記為 F1.1。
2.2 XGBoost 模型設計
通過數學軟件 Matlab 2016a(MathWorks,美國)對心音數據集的 3 240 條心音記錄進行預處理和心音分割,提取了前四個類別的 136 個特征。通過 Python 編程語言開發撰寫時使用的集成開發環境 PyCharm 2020.1(JetBrains,捷克)對這些特征進行缺失值和歸一化處理,然后以 XGBoost 的特征重要性為得分排名的依據,對所有記錄的 136 個特征進行 3 折交叉驗證的遞歸特征消除,XGBoost 的特征重要性通過式(11)計算的收益 Gain 得到。選擇得分排名前 20 的特征,作為 XGBoost 的輸入特征,如圖 4 所示,縱坐標顯示的特征與表 1 中的特征標記一一對應。

隨后,對數據集進行劃分,測試集比例為 0.3,由于數據集正負樣本不平衡,劃分時采用分層抽樣,確保正常/異常兩個標簽對應的樣本比例。
對訓練集采用 5 折交叉驗證的網格搜索方法,比較 XGBoost 模型對應每一種情況的得分,選擇最優的模型參數。首先確定需優化參數的網格搜索范圍與搜索步長,然后通過每一輪情況的損失函數計算相對應的模型得分,選擇得分最高的模型為最優模型。實驗得到最優模型參數:樹的個數為 500,樹的深度為 5 層,葉子節點最小權重為 2,懲罰項系數為 0,L1 正則化系數為 10,L2 正則化系數為 3,學習率為 0.05。由于數據集正負樣本不平衡,正常異常比例在 4:1 左右,因此設置模型參數中的異常權重為 4。最后將得到的 XGBoost 最優模型應用于測試集上,預測分類結果。
2.3 MFCC-LSTM 模型設計
對訓練集的心音記錄進行移位,保證從 S1 狀態開始,然后進行 3 s 等時間段切割(因為心動周期一般為 1 s 左右,保證切割后的每一段心音都能保留一個完整的心動周期),確保得到的 MFCC 特征時間長度相等。使用 Python 對切割后的心音進行 MFCC 分析,設置參數:窗口為漢明窗,幀長(窗口長度)為 25 ms,幀移(窗口之間步長)為 10 ms,返回的倒譜數量為 12,濾波器組中過濾器數量為 26 個,快速傅里葉變換的采樣點數為 512,倒譜的正弦升降參數為 22。
訓練集中的 2 268 個心音樣本經過切割和 MFCC 分析后,轉變為 15 733 個 MFCC 樣本,作為 LSTM 訓練的輸入,標簽也隨之擴展。每個樣本的輸入特征維度為,表示心音記錄在 299 幀時間段內,在 12 個梅爾刻度等級上的倒譜特征,明顯包含時序特征,因此 LSTM 架構如圖 5 所示,時間步 t 的總長為 299,每一時間步的輸入 xt 維度為 12,隱藏層為 l 層,每一層含 s 個隱藏元,即每一層的隱藏狀態信息 ih(t)(i = 0,1,
,l)為 s 維向量,皆隨著時間步 t 而傳遞,同時傳遞的還有細胞狀態信息 C(t),輸出 y(t)為 2 維向量,表示異常和正常兩種標簽的概率,因此,最后一個時間步 t = 299 時的輸出 y(299)為最終的模型輸出 out。

訓練 LSTM 模型時采用批處理,訓練輪數(epoch)為 20,每輪的批次(batch)為 50,學習率為 0.001,每個批次中設置隨機失活(dropout)為 0.5,通過忽略一半的隱層節點減少過擬合。優化參數的權重更新采用自適應矩估計(adaptive moment,Adam)優化器,損失函數使用的是交叉熵損失函數,由于正負樣本不平衡,在損失函數中設置正常、異常標簽的權重比例為 0.2 和 0.8。調整網絡的超參數(隱藏層數 l,隱藏元個數 s)的范圍分別為{20,50,100,150,200}和{1,2,3},比較其結果。
對于測試集中的心音記錄也進行切割和 MFCC 分析,每一條記錄由多個心音片段的 MFCC 特征組成,每一個特征通過訓練的 LSTM 進行預測,最后對這一條記錄得到的多個分類結果進行硬投票:取輸出最多的那一類標簽(如果心音被切割為偶數段,且兩類標簽數量相等,則結果為不確定)。
3 實驗結果和討論
3.1 實驗結果
將得到的 XGBoost 模型在測試集上進行預測,根據式(19)~式(23)計算模型得分:Acc = 92.3%、Se = 76.9%、Sp = 96.2%、MAcc = 86.6%、F1.1 = 84.6%。
LSTM 采用不同結構(隱藏層數,每層隱藏元數)進行實驗。如表 2 所示列出了所有結構的實驗預測結果,發現 LSTM 的預測結果對異常的靈敏度普遍都很高,由于異常在樣本中的比例較低,造成準確率略低,但修正后的準確率是令人滿意的;隱藏元較少時,準確率較低,但當隱藏元個數增加到一定程度時,對結果影響不大;隱藏層數的增加對結果有一定幫助,2 層效果最佳。因此取 2 層 100 隱藏元。

最后采用 1.7 小節中決策方法對 XGBoost 和 LSTM 共同決策,最終模型預測結果為:Acc = 90.1%、Se = 93.0%、Sp = 89.4%、MAcc = 91.2%、F1.1 = 91.3%。
3.2 預處理方法的對比實驗
為了驗證預處理步驟對心音分類方法的影響,本文還增加了一組對比實驗,用于分析預處理步驟對 LSTM 模型分類性能的影響。在對比實驗中,取消預處理步驟,直接進行心音分割,提取特征,最后通過 LSTM 模型分類的實驗結果為:Se = 88.4%、Sp = 86.1%、MAcc = 87.3%、F1.1 = 87.4%,發現各項評估得分都低于 3.1 小節中有預處理步驟的 LSTM 預測結果(Se = 91.7%、Sp = 88.3%、MAcc = 90.0%、F1.1 = 90.2%)。對比實驗結果表明,預處理步驟能提升該心音分類模型的性能。
3.3 比較與討論
本實驗研究了不同深度神經網絡對心音分類的影響,對心音信號劃分相同訓練集,提取 MFCC 特征,然后使用了以下分類方法:① CNN 分類;② LSTM 分類;③ 分別通過單獨的 CNN 和單獨的 LSTM,最后通過融合層合并在一起分類;④ 采用 Sainath 等[28]提出的卷積-長短時記憶-全連接深度神經網絡(convolutional,long short-term memory,fully connected deep neural networks,CLDNN),即先通過 CNN 再通過 LSTM,最后通過全連接層分類。為了使本文研究方法的高效性更具有說服力,本實驗結果也與最新的基于同一數據集的心音分類方法,即文獻[9, 12, 16, 19-22]中的方法進行比較。所有心音分類方法的性能比較如表 3 所示。

結果表明:① 深度神經網絡與傳統機器學習方法比較,對心音分類的效果(MAcc 和 F1.1)更好,主要體現在對異常記錄識別的靈敏度更高,雖然整個數據集異常比例較少,造成誤診的成本增加,但是大大降低了漏診的風險。② 在深度神經網絡的研究中,純粹的 LSTM 比其他網絡的分類效果要更好,主要因為提取的 MFCC 特征具有明顯的時序性,適用于 LSTM 網絡,而 CNN 對于時域和頻域特征維度的提取可能引起一些信息的遺失,因此本文采用的是 LSTM 網絡。③ 本文提出的基于 XGBoost 和 LSTM 的共同決策方法,XGBoost 保證分類的特異性較高,進一步引入 LSTM 共同決策,在略微降低特異性的前提下大幅提升了整個分類模型的靈敏度,最終分類的準確率比目前最新的方法有所提升。
4 結論
本文提出了一種基于 XGBoost 和 LSTM 共同決策的心音分類方法。首先,在心音分割確定 S1、收縮期、S2、舒張期四個狀態的基礎上,提取了四個類別的 136 個特征,通過遞歸特征消除法篩選出 20 個特征作為 XGBoost 分類器的輸入特征。其次,提取了具有時序性的 MFCC 特征,作為深度神經網絡 LSTM 的輸入。最終對這兩種模型的分類結果進行決策,得到最后的分類結果。實驗中,本文分別對 XGBoost 和 LSTM 分類器的調優采用了網格搜索法和結構調參法,選取了各自的最優模型,并針對數據集不平衡問題,在各自模型中分別加入加權改進。結果表明,該方法在測試集上對心音異常/正常的分類結果為:Acc = 90.1%、Se = 93.0%、Sp = 89.4%、MAcc = 91.2%、F1.1 = 91.3%,與最新的其他分類方法相比,該方法在準確性和靈敏度上有所提升,達到了更好的分類效果,為部分心血管疾病的臨床輔助診斷提供一種較好的選擇。
利益沖突聲明:本文全體作者均聲明不存在利益沖突。