袁倩影, 全海燕
(昆明理工大學 信息工程與自動化學院, 昆明 650504)
心音是由于心臟活動而產(chǎn)生的一種振動信號, 心音信號的識別有利于對心血管類疾病的診斷. 目前, 對心音信號進行特征提取的方法已有很多[1], 如Fourier變換、 小波分析、 Hilbert變換等方法. Fourier變換和小波分析均易導致相位信息的丟失, 影響后續(xù)分類器的設(shè)計[2]; Hilbert變換可處理非靜態(tài)、 非線性的特性, 適合應(yīng)用于突變信號[3]. 心音信號分類器主要采取支持向量機、K近鄰、 神經(jīng)網(wǎng)絡(luò)等算法進行構(gòu)建[4]. 支持向量機可通過多分類器的構(gòu)建處理有關(guān)多分類的問題, 但訓練時耗較長, 核函數(shù)的選取較復雜; 基于遺傳(GA)算法等改進BP神經(jīng)網(wǎng)絡(luò)的學習算法可作為心音分類器, 但都是以增加算法控制參數(shù)和迭代次數(shù)為代價提高心音識別率. 基于此, 本文提出一種基于單形進化優(yōu)化BP神經(jīng)網(wǎng)絡(luò)學習算法的心音識別方法, 對比實驗結(jié)果表明, 該方法提高了心音分析的識別率, 可為心血管類疾病的診斷提供技術(shù)支持.
主成分分析(PCA)是通過線性變換將源數(shù)據(jù)變換為一組各維度線性無關(guān)數(shù)據(jù)的統(tǒng)計分析方法. 計算主成分的目的是將高維數(shù)據(jù)投影到低維空間, 通常用于對高維數(shù)據(jù)空間的降維. 傳統(tǒng)PCA步驟如下:
1) 對樣本x去均值化得到向量Z;
2) 對向量Z求協(xié)方差系數(shù)Sl=ZTZ∈d×d, 其中d為樣本x的維數(shù);
3) 求解協(xié)方差Sl的特征值D和特征向量V, 特征值D即為樣本x的主成分;
4) 將D按數(shù)值大小排列, 計算累計貢獻率;
5) 根據(jù)累計貢獻率大小確定第1、 第2、 …、 第k個主成分[5]. 一般根據(jù)累計貢獻率在85%~95%內(nèi)選取主成分的維數(shù).
圖1 BP神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)Fig.1 Structure of BP neural network
BP神經(jīng)網(wǎng)絡(luò)是一種按誤差逆?zhèn)鞑ニ惴ㄓ柧毜亩鄬忧梆伨W(wǎng)絡(luò), 應(yīng)用廣泛. BP神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)一般由輸入層、 隱含層和輸出層構(gòu)成[7], 其網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示, 其中Xi(i=1,2,…,n)表示輸入向量;Wij和Wjk表示權(quán)值;Yk(k=1,2,…,m)表示輸出向量. BP神經(jīng)網(wǎng)絡(luò)中的神經(jīng)元采用Sigmoid(S)函數(shù)做為激勵函數(shù), 且在網(wǎng)絡(luò)中每層神經(jīng)元的結(jié)果都與上一層神經(jīng)元的處理結(jié)果有關(guān). 由圖1可見, BP神經(jīng)網(wǎng)絡(luò)采用三層結(jié)構(gòu), 輸入層神經(jīng)元數(shù)目為i=1,2,…,n, 隱含層單元個數(shù)為j, 輸出層神經(jīng)元數(shù)目為k=1,2,…,m.
BP神經(jīng)網(wǎng)絡(luò)學習算法的核心是優(yōu)化BP神經(jīng)網(wǎng)絡(luò)輸出與期望的誤差函數(shù), 本文采用誤差絕對值, BP神經(jīng)網(wǎng)絡(luò)的誤差函數(shù)定義為
(1)
目前, 已有許多改進BP神經(jīng)網(wǎng)絡(luò)智能優(yōu)化算法[8], 例如: 基于遺傳算法的BP神經(jīng)網(wǎng)絡(luò), 缺陷是遺傳算法對種群數(shù)量和變異的編碼長度選取要求極高; 基于粒子群優(yōu)化算法的BP神經(jīng)網(wǎng)絡(luò), 優(yōu)點是參數(shù)較少, 但在求解過程臨近結(jié)束時, 初始設(shè)置的粒子通常會聚集在某極值附近, 粒子尋優(yōu)過程較慢, 直接導致增加了收斂時長和偏差. 這些改進的BP神經(jīng)網(wǎng)絡(luò)智能優(yōu)化算法常通過設(shè)置更多的參數(shù), 以收斂時長及算法復雜度為代價提高性能.
單形進化算法(surface-simplex swarm evolution, SSSE)是對BP神經(jīng)網(wǎng)絡(luò)輸出與期望的誤差函數(shù)進行優(yōu)化, 其控制參數(shù)只有一個, 即種群數(shù)量, 避免了出現(xiàn)以增加控制參數(shù)提高準確率的問題.
SSSE算法是基于單形鄰域與多角色進化策略的智能優(yōu)化算法. 該算法的實現(xiàn)原理為: 基于隨機選取二維子空間, 利用定義的粒子單形鄰域, 實現(xiàn)單形凸集逼近搜索[9], 提高粒子勘探局部區(qū)域與算法收斂的性能. 同時, 在搜索策略中引入粒子多角色態(tài), 實現(xiàn)粒子多樣化, 提高搜索的全局性[10]. 將BP誤差函數(shù)作為SSSE算法優(yōu)化的目標函數(shù), 其實現(xiàn)優(yōu)化的過程如圖2所示.
圖2 SSSE-BP算法流程Fig.2 Flow chart of SSSE-BP algorithm
SSSE算法優(yōu)化步驟如下:
1) 在搜索空間內(nèi)對m個粒子進行初始化隨機定位, 并采取均勻分布的原則:
(2)
2) 在總搜索空間內(nèi), 將群體中所有的粒子按均勻分布的方式構(gòu)建搜索子空間, 并隨機選取兩個維度a,b, 利用這兩個維度, 使每個粒子在該搜索子空間內(nèi)重新搜索新位置:
4) 根據(jù)所選取的目標函數(shù), 對所得的每個粒子位置進行優(yōu)劣性能判斷, 利用其確定粒子的3個角色態(tài): 中心角色態(tài)Xic(t+1), 表示每個粒子最終的最優(yōu)位置; 開采角色態(tài)Xil(t+1), 表示粒子得到的最新位置; 勘探角色態(tài)Xig(t+1), 表示粒子以均勻分布的規(guī)則在搜索空間隨機選取的位置.
5) 記錄群體中最優(yōu)粒子的位置Xoc(t+1), 循環(huán)步驟2)~5), 并對每次循環(huán)得到的最優(yōu)解判斷其收斂性, 直至誤差函數(shù)收斂到給定的精度要求, 即認為算法完成尋優(yōu)過程, 結(jié)束算法的尋優(yōu)運算.
SSSE算法的優(yōu)勢是對粒子進行全局性的隨機搜索尋優(yōu), 避免陷入局部最優(yōu)值; 控制參數(shù)只有一個, 即種群數(shù)量, 而人工蜂群算法、 遺傳算法、 粒子群算法等智能優(yōu)化算法及其改進型算法, 都有較多的初始控制參數(shù), 以增加控制參數(shù)提高準確率; 對于算法的可靠性, 在不同的隨機初始化條件下, 50次內(nèi)SSSE算法從未有偏離全局最優(yōu)點的情形.
本文數(shù)據(jù)主要來源于丁香園論壇(http://www.dxy.cn/bbs/thread/30808564#30808564)提供的異常/正常心音信號. 本文選取9類異常/正常心音進行實驗, 每類心音均含有多個信號, 9類心音信號分別為: 正常心音[12]、 第一心音減弱、 第二心音增強、 第二心音減弱、 二尖瓣關(guān)閉不全、 二尖瓣狹窄、 主動脈關(guān)閉不全、 二聯(lián)律和心包摩擦音.
在進行心音信號分類時, 將所有心音樣本分為訓練集和測試集[13]兩類. 訓練集用于SSSE算法改進BP神經(jīng)網(wǎng)絡(luò)的訓練心音樣本, 共有90×9個訓練樣本. 測試集共有22×9個心音樣本, 用于對訓練好的網(wǎng)絡(luò)進行測試, 并驗證提出的基于SSSE算法優(yōu)化的BP神經(jīng)網(wǎng)絡(luò)應(yīng)用在心音識別上的性能.
本文選擇MATLAB作為試驗平臺, 研究目前已有心音信號分析模型的缺陷, 基于心音信號周期性的特點, 提出以FastPCA算法對心音信號進行特征提取降維, 以基于SSSE算法改進的BP神經(jīng)網(wǎng)絡(luò)作為模型核心, 最終實現(xiàn)對心音信號的識別分類[14].
模型實現(xiàn)步驟如下:
1) 首先對心音信號進行預處理. 利用小波變換對心音進行歸一化、 去噪操作, 小波母函數(shù)為sym5, 分解層數(shù)為5.
2) 對心音信號進行特征提取降維. 心音信號未降維時, 樣本維度為4 900. 本文采用FastPCA方法對信號進行降維, 先對樣本去均值化, 然后求協(xié)方差函數(shù), 對協(xié)方差函數(shù)求解特征值和特征向量, 按累計貢獻率大小選取主成分的維度, 貢獻率計算公式為
(11)
其中:D表示112×1維特征向量;n表示D的行數(shù);k為最終選取的主成分的維度;t為可自設(shè)的誤差. 多次實驗結(jié)果表明, 當t=0.1, 累計貢獻率為90%, 選取主成分的維度為36時, 心音識別率最高, 因此, 本文最終選取主成分維度為36.
3) 對降維后的心音信號進行歸一化處理, 歸一化方法為
(12)
4) 初始化BP神經(jīng)網(wǎng)絡(luò)相關(guān)參數(shù). 神經(jīng)網(wǎng)絡(luò)采用三層結(jié)構(gòu), 對比多次實驗效果, 設(shè)置輸入層神經(jīng)元數(shù)為30, 隱含層神經(jīng)元數(shù)為40, 輸出層神經(jīng)元數(shù)為3.
5) 將降維歸一化后的訓練集共810個心音樣本輸入經(jīng)SSSE算法優(yōu)化的BP神經(jīng)網(wǎng)絡(luò)中. 優(yōu)化BP神經(jīng)網(wǎng)絡(luò)權(quán)值和偏置, 其中權(quán)值更新流程如下:
① 將m個粒子按均勻分布的規(guī)則在目標函數(shù)定義域內(nèi)進行隨機初始化定位;
② 對搜索空間內(nèi)的每個粒子按單形鄰域和多角色搜索策略搜索新位置;
③ 對每個粒子的4個中心角色位置進行更新;
④ 根據(jù)誤差函數(shù)評價粒子的優(yōu)劣, 以確定粒子的3個角色態(tài): 中心態(tài)、 開采態(tài)和角色態(tài);
⑤ 記錄粒子的最優(yōu)位置, 當粒子的收斂位置在所要求的精度范圍內(nèi)時, 停止搜索;
⑥ 將BP神經(jīng)網(wǎng)絡(luò)權(quán)值定為粒子的最優(yōu)位置, 偏置與權(quán)值并行更新.
6) 將測試樣本共198個心音周期輸入訓練好的網(wǎng)絡(luò)中, 最終輸出心音分類結(jié)果.
7) 對輸出的心音分類結(jié)果進行統(tǒng)計分析, 得到心音識別率及誤差曲線.
將上述9類心音各112個樣本, 利用FastPCA算法進行降維特征提取, 得到9類112×36組數(shù)據(jù), 選取部分特征值, 列舉出9類心音各一組樣本的特征值如圖3所示. 每類選取90組用于SSSE-BP神經(jīng)網(wǎng)絡(luò)的訓練, 22組用于測試, 各類心音識別率列于表1. 由表1可見, 9類心音共198個測試樣本, 正確識別190個, 總體識別率為95.96%, 具有較好的識別率. 表2為本文經(jīng)SSSE算法優(yōu)化的BP神經(jīng)網(wǎng)絡(luò)與傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò)的心音識別率對比. 由表2可見, 本文模型的心音識別率為95.96%, 遠優(yōu)于傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò)模型的識別率. 上述兩種實驗方法結(jié)果的誤差曲線如圖4所示.
圖3 9類心音的特征值Fig.3 Eigenvalues of 9 kinds of heart sounds
表1 各類心音識別率
表2 兩種實驗方法的心音識別率對比
由圖4可見, 本文方法在迭代次數(shù)為1 000時, 誤差函數(shù)值小于10, 基本處于平穩(wěn)狀態(tài); 而傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò)模型在迭代次數(shù)為1 000時, 誤差函數(shù)值大于60, 收斂效果明顯不如SSSE-BP神經(jīng)網(wǎng)絡(luò)模型. 為了驗證本文算法的收斂性, 以迭代次數(shù)t=3 000進行5次實驗, 5次實驗的平均誤差曲線如圖5所示. 由圖5可見, 當?shù)螖?shù)t=1 000時, 平均誤差曲線趨于平穩(wěn), 當t∈[1 000,3 000]時誤差由6降至3, 可認為達到了設(shè)置的收斂精度要求. 因此, 本文提出的基于SSSE算法改進的BP神經(jīng)網(wǎng)絡(luò)在學習過程中有效.
圖4 兩種實驗方法誤差曲線對比Fig.4 Comparison of error curves of two experimental methods
圖5 5次實驗的平均誤差曲線Fig.5 Average error curve of 5 experiments
將本文方法與文獻[15]中方法對心音分類的識別率進行對比, 結(jié)果列于表3, 其中文獻[15]中采集的心音信號頻率與本文中用于特征提取的心音信號頻率均為11 050 Hz, 實驗平臺均使用MATLAB軟件. 由表3可見, 本文算法能較好地應(yīng)用于各種異常心音的識別分類, 且準確率分別比對比算法提高了4.9%,3.9%,1.9%. 實驗結(jié)果表明, 本文給出的基于SSSE算法優(yōu)化的BP神經(jīng)網(wǎng)絡(luò)模型準確率較高、 收斂性較好.
表3 采用不同算法時心音識別率的對比結(jié)果
綜上所述, 針對改進BP神經(jīng)網(wǎng)絡(luò)的學習算法均以增加控制參數(shù)為代價提高收斂速度的問題, 本文提出了一種基于單形進化算法優(yōu)化的BP神經(jīng)網(wǎng)絡(luò)學習算法, 即SSSE-BP神經(jīng)網(wǎng)絡(luò). 實驗結(jié)果表明, 在心音分類上本文算法明顯優(yōu)于其他對比算法的心音識別率.