踢足球的红豆 · 我的强化学习模型不收敛这件事!_mb62b9 ...· 1 年前 · |
苦恼的手套 · ESLint报错:Parsing ...· 1 年前 · |
骑白马的葡萄 · pip install numpy mac ...· 1 年前 · |
玉树临风的冲锋衣 · PostgreSQL修改数据库表的列属性操作 ...· 1 年前 · |
上海交通大学 机械与动力工程学院(上海 200240), School of Mechanical Engineering, Shanghai Jiao Tong University, Shanghai 200240, P.R.China
上海交通大学 机械与动力工程学院(上海 200240), School of Mechanical Engineering, Shanghai Jiao Tong University, Shanghai 200240, P.R.China
上海交通大学 机械与动力工程学院(上海 200240), School of Mechanical Engineering, Shanghai Jiao Tong University, Shanghai 200240, P.R.China
上海交通大学 机械与动力工程学院(上海 200240), School of Mechanical Engineering, Shanghai Jiao Tong University, Shanghai 200240, P.R.China 上海交通大学 机械与动力工程学院(上海 200240), School of Mechanical Engineering, Shanghai Jiao Tong University, Shanghai 200240, P.R.China 上海市第一人民医院 心内科(上海 200080), Department of Cardiology, Shanghai First People’s Hospital, Shanghai 200080, P.R.China
(d)从 F 中去除 f * ,更新 R = [ f * , R ];
(3)从 R 中选择排名较高的特征。
XGBoost [ 24 ] 是一种基于决策树的集成学习提升方法,将弱的基分类器组合为更强的分类器。
假设共有 K 个基分类器,对于输入样本 x i ,其输出 为 K 个基模型结果的累加之和,如式(1)所示:
其中, f k ( x i )是第 k 个基模型对于 x i 的输出, 是所有树的集合。目标函数 Obj 加入了正则化项,如式(2)所示:
其中, l ( y i , )为损失函数,度量预测值 和真实值 y i 的偏差, Ω ( f k )为正则项,衡量树的复杂性。学习至第 t 棵树时,假设第 t 次迭代要训练的树模型为 f t ( x i ), 为前 t − 1 棵树的预测结果,则此时目标函数 Obj ( t ) 如式(3)所示:
通过泰勒展开后简化常数项,式(3)可转化为如式(4)所示:
其中, g i 为 l ( y i , )对 的一阶偏导数, h i 为 l ( y i , )对 的二阶偏导数, Ω ( f t )为正则项,其定义如式(5)所示:
其中, T 是树的叶子数, 为 T 维叶子节点权重向量的 L2 范数, γ 、 λ 为描述叶子数复杂性和惩罚尺度的常数系数。假设样本与叶子节点的映射关系为 q ,第 j 个叶子节点的样本集合为 I j 如式(6)所示:
则,式(5)可转化为:
定义函数 ,则,式(7)可以简化为如式(8)所示:
假设树的结构是固定的,对目标函数 Obj ( t ) 最小化可以求出所有叶子权重的最优值 ω j * ,如式(9)所示:
此时目标函数 Obj ( t ) 的最优值也可计算得到,如式(10)所示:
在训练过程中,XGBoost 采用贪心算法选择最优分裂节点,定义每次分裂后的左右两个子树集合为 I L 、 I R ,式(8)定义的函数 G 、 H 对应为 G L 、 H L 、 G R 、 H R ,于是评估每个特征在每个特征值上的收益 Gain ,如式(11)所示:
LSTM [ 26 ] 是循环神经网络的一种,其网络层结构如 图 2 所示。
t 时刻 LSTM 模块包含两个传输状态:细胞状态矩阵 C t 传递的是 t 时刻之前历史信息的选择性记忆,隐藏状态矩阵 h t 存储的是当前 t 时刻的总体信息。LSTM 由三个门控单元组成:遗忘门、输入门和输出门。LSTM 在 t 时刻工作时一共有四个阶段:
(1)遗忘阶段: z t f 作为遗忘门,控制上一个状态 C t 信息的保留比例,其表达式如式(12)所示:
其中, W f 为隐藏层 h t − 1 和输入 x t 在遗忘门的的权重矩阵, b f 为截距, σ 为 sigmoid 函数,将输出映射在[0,1]之间,表示遗忘部分的选择比例。
(2)存储阶段:确定需要在细胞状态中保存的信息。第一部分, z t i 为输入门,确定哪些信息需要更新,其表达式如式(13)所示:
其中, W i 为 h t − 1 和 x t 在输入门的的权重矩阵, b i 为截距。第二部分,通过一个 tanh 层创建一个实质信息向量 z t ,其表达式如式(14)所示:
其中, W C 为 h t − 1 和 x t 在此部分对应的权重矩阵, b C 为截距,tanh 为双曲正切函数,作为激活函数。
(3)更新阶段:将 C t − 1 保留下的信息加上 t 时刻输入的信息,从而更新 C t ,其表达式如式(15)所示:
其中,“ ”为哈达玛积运算。 z t f 为遗忘门保留的比例, C t − 1 为实质信息,两者结合就是保留下的历史信息。同理, z t i 与 z t 结合为实际输入的信息。
(4)输出阶段: z t o 作为输出门,确定细胞状态中可以输出的信息,其表达式如式(16)所示:
其中, W o 为 h t -1 和 x t 在输出门的权重矩阵, b o 为截距。 z t o 与当前时刻选择性记忆的实质信息 C t 结合,得到当前状态的输出 h t ,其表达式如式(17)所示:
其中,tanh 函数对 C t 进行了放缩。最终输出 y t 的表达式如式(18)所示:
其中, W yh 、 b y 为此部分的权重矩阵和截距。
分类决策方法借鉴集成学习中投票法的硬投票思想,考虑基分类器的准确性和多样性,采用 XGBoost 和 LSTM 两种高效模型的异质集成方式,得到最终的分类结果。异质不仅体现在分类器类型不同、算法不同,在训练时提取的特征也不同。
为了提升预测模型对异常的灵敏度,最终的决策方法对硬投票也进行了改进,基于整个数据集异常记录较少的事实。XGBoost 为正常/异常的二分类模型,而 LSTM 的预测结果除了正常/异常外,加入了不确定的结果选项。所以将决策规则定义为:若 LSTM 预测为异常,则最终分类结果为异常;若 LSTM 预测为正常或者不确定,则最终分类结果为 XGBoost 的分类结果,如 图 3 所示。
本研究采用灵敏度 S e ,特异性 S p 和准确率 Acc 来评估分类器的性能,如式(19)~式(21)所示:
为了适当提升灵敏度的重要性, β 取值要大于 1,本实验取 β = 1.1,F 得分记为 F 1.1 。
通过数学软件 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 最优模型应用于测试集上,预测分类结果。
对训练集的心音记录进行移位,保证从 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,每一时间步的输入 x t 维度为 12,隐藏层为 l 层,每一层含 s 个隐藏元,即每一层的隐藏状态信息 i h ( 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 进行预测,最后对这一条记录得到的多个分类结果进行硬投票:取输出最多的那一类标签(如果心音被切割为偶数段,且两类标签数量相等,则结果为不确定)。
将得到的 XGBoost 模型在测试集上进行预测,根据式(19)~式(23)计算模型得分: Acc = 92.3%、 S e = 76.9%、 S p = 96.2%、 MAcc = 86.6%、 F 1.1 = 84.6%。
LSTM 采用不同结构(隐藏层数,每层隐藏元数)进行实验。如 表 2 所示列出了所有结构的实验预测结果,发现 LSTM 的预测结果对异常的灵敏度普遍都很高,由于异常在样本中的比例较低,造成准确率略低,但修正后的准确率是令人满意的;隐藏元较少时,准确率较低,但当隐藏元个数增加到一定程度时,对结果影响不大;隐藏层数的增加对结果有一定帮助,2 层效果最佳。因此取 2 层 100 隐藏元。
LSTM 结构 | ||||||
隐藏层
数/层 |
隐藏元
个数/个 |
|||||
1 | 20 | 82.4% | 93.2% | 82.7% | 87.9% | 88.1% |
1 | 50 | 85.4% | 93.5% | 86.3% | 89.9% | 90.1% |
1 | 100 | 82.5% | 98.2% | 80.7% | 89.5% | 89.4% |
1 | 150 | 83.6% | 93.7% | 84.6% | 89.2% | 89.3% |
1 | 200 | 82.8% | 95.5% | 82.1% | 88.8% | 89.0% |
2 | 100 | 86.4% | 91.7% | 88.3% | 90.0% | 90.2% |
3 | 100 | 84.9% | 94.7% | 85.1% | 89.9% | 90.1% |
最后采用 1.7 小节中决策方法对 XGBoost 和 LSTM 共同决策,最终模型预测结果为: Acc = 90.1%、 S e = 93.0%、 S p = 89.4%、 MAcc = 91.2%、 F 1.1 = 91.3%。
为了验证预处理步骤对心音分类方法的影响,本文还增加了一组对比实验,用于分析预处理步骤对 LSTM 模型分类性能的影响。在对比实验中,取消预处理步骤,直接进行心音分割,提取特征,最后通过 LSTM 模型分类的实验结果为: S e = 88.4%、 S p = 86.1%、 MAcc = 87.3%、 F 1.1 = 87.4%,发现各项评估得分都低于 3.1 小节中有预处理步骤的 LSTM 预测结果( S e = 91.7%、 S p = 88.3%、 MAcc = 90.0%、 F 1.1 = 90.2%)。对比实验结果表明,预处理步骤能提升该心音分类模型的性能。
本实验研究了不同深度神经网络对心音分类的影响,对心音信号划分相同训练集,提取 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 所示。
方法(特征 + 分类器) | ||||
多类特征 + XGBoost | 76.9% | 96.2% | 86.6% | 84.6% |
MFCC + CNN | 89.2% | 82.2% | 85.7% | 85.9% |
MFCC + LSTM | 91.7% | 88.3% | 90.0% | 90.1% |
MFCC + CNN 与 LSTM 融合层 | 89.2% | 86.2% | 87.7% | 87.8% |
MFCC + CLDNN | 86.9% | 83.6% | 85.3% | 85.4% |
XGBoost 与 LSTM 共同决策 | 93.0% 89.4% 91.2% 91.3% | |||
多类特征 + Adaboost 与频带 + 一维 CNN 共决策 [ 9 ] | 94.2% | 77.8% | 86.0% | 86.0% |
时频特征 + 人工神经网络 [ 12 ] | 86.9% | 84.9% | 85.9% | 86.0% |
MFCC 与分形特征 + kNN [ 16 ] | 76.4% | 77.4% | 76.9% | 76.8% |
无特征 + 一维 CNN 和前馈神经网络联合网络 [ 19 ] | 86.7% | 84.7% | 85.7% | 85.8% |
连续小波变换尺度图 + CNN [ 20 ] | 87.4% | 86.7% | 87.0% | 87.0% |
MFCC + 一维和二维 CNN 组合时频集成 CNN [ 21 ] | 86.1% | 91.5% | 88.8% | 88.5% |
连续小波变换尺度图 + AlexNet [ 22 ] | 90.0% | 90.0% | 90.0% | 90.0% |
结果表明:① 深度神经网络与传统机器学习方法比较,对心音分类的效果( MAcc 和 F 1.1 )更好,主要体现在对异常记录识别的灵敏度更高,虽然整个数据集异常比例较少,造成误诊的成本增加,但是大大降低了漏诊的风险。② 在深度神经网络的研究中,纯粹的 LSTM 比其他网络的分类效果要更好,主要因为提取的 MFCC 特征具有明显的时序性,适用于 LSTM 网络,而 CNN 对于时域和频域特征维度的提取可能引起一些信息的遗失,因此本文采用的是 LSTM 网络。③ 本文提出的基于 XGBoost 和 LSTM 的共同决策方法,XGBoost 保证分类的特异性较高,进一步引入 LSTM 共同决策,在略微降低特异性的前提下大幅提升了整个分类模型的灵敏度,最终分类的准确率比目前最新的方法有所提升。
本文提出了一种基于 XGBoost 和 LSTM 共同决策的心音分类方法。首先,在心音分割确定 S1、收缩期、S2、舒张期四个状态的基础上,提取了四个类别的 136 个特征,通过递归特征消除法筛选出 20 个特征作为 XGBoost 分类器的输入特征。其次,提取了具有时序性的 MFCC 特征,作为深度神经网络 LSTM 的输入。最终对这两种模型的分类结果进行决策,得到最后的分类结果。实验中,本文分别对 XGBoost 和 LSTM 分类器的调优采用了网格搜索法和结构调参法,选取了各自的最优模型,并针对数据集不平衡问题,在各自模型中分别加入加权改进。结果表明,该方法在测试集上对心音异常/正常的分类结果为: Acc = 90.1%、 S e = 93.0%、 S p = 89.4%、 MAcc = 91.2%、 F 1.1 = 91.3%,与最新的其他分类方法相比,该方法在准确性和灵敏度上有所提升,达到了更好的分类效果,为部分心血管疾病的临床辅助诊断提供一种较好的选择。
利益冲突声明:本文全体作者均声明不存在利益冲突。
国家重点研发计划项目(SQ2018YFB130700)