基于多域特征和机器学习的心音信号分类方法
1. 特征提取
1.1 频域特征
频域分析有助于识别心音信号中的主导频率成分。首先使用离散傅里叶变换(DFT)技术将信号从时域转换到频域,公式如下:
[X(R) = \sum_{n = 0}^{N - 1} x(n) \cdot e^{-j2\pi Rn/N}, R \in Z(\text{整数})]
其中,(X(R)) 表示信号 (x(n)) 在频率 (R) 处的 DFT 系数。
然后,将频谱分割成以下不同的频带:
- 频带 1:10 - 110 Hz
- 频带 2:110 - 210 Hz
- 频带 3:210 - 270 Hz
- 频带 4:270 - 500 Hz
从每个频带中提取以下特征:曲线下面积、主导频率和功率谱的峰度。因此,从频域中提取了 12 个特征。
1.2 时频域特征
使用 Tunable Q - factor Wavelet Transform(TQWT)方法对预处理后的信号进行分解,参数设置为 (\alpha = 0.875),(\beta = 1),分解级别 (J = 18),得到时频域矩阵 (X)。
从每个详细级别系数向量(不包括近似级别)中提取以下特征:
- 每个详细级别系数向量的收缩期和舒张期能量计算如下:
[E_{sys}(\text{level}) = \frac{1}{\text{length(sys)}} \sum_{i = 1}^{\text{length(sys)}} \vert X_{sys}(\text{level}, i) \vert^2]
[E_{dias}(\text{level}) = \frac{1}{\text{length(dias)}} \sum_{i = 1}^{\text{length(dias)}} \vert X_{dias}(\text{level}, i) \vert^2]
使用分割算法在矩阵 (A) 中提供的标记来识别收缩期和舒张期。
- 每个详细级别的熵计算如下:
[S(\text{level}) = - \int X(\text{level}, n) \log(X(\text{level}, n)) dn]
此外,还计算每个详细级别的收缩期和舒张期的峰度和法诺因子。因此,从时频域矩阵中提取了 36 个能量特征、18 个熵特征、36 个峰度值和 36 个法诺因子,总共 126 个特征。
结合时域提取的 27 个特征,该方法总共使用了 165 个特征。
2. 心音信号分类
使用以下三种机器学习方法对提取的特征进行分类:
2.1 支持向量机(SVM)
SVM 是最流行的心音信号分类技术。使用线性核函数、二次和三次多项式函数以及高斯函数实现 SVM。由于 SVM 进行二分类,对于五类分类应用,使用一对一技术,训练 10 个 SVM 模型,松弛变量 (\xi_i) 的值设置为 0.002。
2.2 K 近邻(KNN)
实现了四种基于 KNN 的模型:
1.
精细 KNN
:(k) 值设置为 1,使用欧几里得距离测量训练和测试特征向量之间的距离,每个特征的距离权重设置为相等。
2.
中等 KNN
:与精细 KNN 类似,(k) 值设置为 10。
3.
余弦 KNN
:(k) 值设置为 10,使用余弦函数作为距离度量。
4.
加权 KNN
:与中等 KNN 类似,但在多数投票中,根据邻居与测试样本的距离分配权重,距离越近权重越大。
2.3 集成方法
实现了以下四种集成方法:
1.
提升树
:在决策树基础模型上使用 Adaboost 方法进行聚合自举,最大分割数设置为 20,学习器数量设置为 30,学习率 (\gamma) 设置为 0.1。
2.
袋装树
:使用袋装技术集成多个决策树,最大分割数设置为 829,学习器数量设置为 30。
3.
子空间 KNN
:使用子空间技术实现集成方法,以 KNN 为基础学习方法,欧几里得距离为度量,子空间维度设置为 78,学习器数量设置为 30。
4.
子空间判别
:与子空间 KNN 类似,但基础方法基于判别分析。
3. 实验设置
使用公开可用的心音信号数据集,包含 200 个样本,分为五类:主动脉瓣狭窄(AS)、二尖瓣反流(MR)、二尖瓣狭窄(MS)、二尖瓣脱垂(MVP)和正常(N)。每个样本为 wav 格式,采样频率为 8 kHz,预处理后下采样到 1 kHz,排除持续时间短于两个心动周期或少于 2 秒的信号。排除后各类别的记录数量如下:AS(173)、MR(156)、MS(162)、MVP(154)和 N(185)。
所有实验均在配备 Core - i5 64 位处理器和 16GB RAM 的台式计算机上使用 Matlab(R2020 版本)软件进行。
4. 性能评估指标
使用以下五个性能评估指标进行定量分析:
- 灵敏度:(\text{Sensitivity}
i(\%) = \frac{TP_i}{TP_i + FN_i} \times 100)
- 特异性:(\text{Specificity}_i(\%) = \frac{TN_i}{FP_i + TN_i} \times 100)
- 精度:(\text{Precision}_i(\%) = \frac{TP_i}{TP_i + FP_i} \times 100)
- 召回率:(\text{Recall}_i(\%) = \frac{TP_i}{TP_i + FN_i} \times 100)
- F - 分数:(\text{F - score}_i(\%) = \frac{2 \times TP_i}{2 \times TP_i + FP_i + FN_i} \times 100)
- 总体准确率:(\text{OAccuracy}(\%) = \frac{\sum
{i = 1}^{5} C_{ii}}{\sum_{i = 1}^{5} \sum_{j = 1}^{5} C_{i, j}} \times 100)
其中,(TP) 表示真阳性数量,(FN) 表示假阴性数量,(FP) 表示假阳性数量,(TN) 表示真阴性数量。(C) 矩阵表示心音信号五类分类的混淆矩阵。
5. 实验结果
5.1 SVM 方法结果
使用不同核函数(线性、二次多项式、三次多项式和高斯函数)的 SVM 方法进行测试。所有四种 SVM 变体都能以 100% 的准确率对正常类别进行分类。使用二次核函数时,其他类别的真阳性率(TPR)超过 97.4%,假阴性率(FNR)低于 2.6%。
| 核函数 | 疾病类别 | 灵敏度(%) | 特异性(%) | 精度(%) | 召回率(%) | F - 分数(%) | 准确率(%) |
|---|---|---|---|---|---|---|---|
| 线性 | AS | 0.9769 | 0.9878 | 0.9548 | 0.9769 | 0.9657 | 97.11 |
| 线性 | MR | 0.9167 | 0.9911 | 0.9597 | 0.9167 | 0.9377 | |
| 线性 | MS | 0.9815 | 0.9925 | 0.9695 | 0.9815 | 0.9755 | |
| 线性 | MVP | 0.9740 | 0.9926 | 0.9677 | 0.9740 | 0.9709 | |
| 线性 | N | 1.0000 | 1.0000 | 1.0000 | 1.0000 | 1.0000 | |
| 二次 | AS | 0.9884 | 0.9954 | 0.9828 | 0.9884 | 0.9856 | 98.88 |
| 二次 | MR | 0.9744 | 0.9926 | 0.9682 | 0.9744 | 0.9712 | |
| 二次 | MS | 0.9877 | 1.0000 | 1.0000 | 0.9877 | 0.9938 | |
| 二次 | MVP | 0.9870 | 0.9970 | 0.9870 | 0.9870 | 0.9870 | |
| 二次 | N | 1.0000 | 1.0000 | 1.0000 | 1.0000 | 1.0000 | |
| 三次 | AS | 0.9884 | 0.9954 | 0.9828 | 0.9884 | 0.9856 | 98.31 |
| 三次 | MR | 0.9679 | 0.9911 | 0.9618 | 0.9679 | 0.9649 | |
| 三次 | MS | 0.9753 | 0.9985 | 0.9937 | 0.9753 | 0.9844 | |
| 三次 | MVP | 0.9805 | 0.9941 | 0.9742 | 0.9805 | 0.9773 | |
| 三次 | N | 1.0000 | 1.0000 | 1.0000 | 1.0000 | 1.0000 | |
| 高斯 | AS | 0.9884 | 0.9924 | 0.9716 | 0.9884 | 0.9799 | 97.95 |
| 高斯 | MR | 0.9551 | 0.9926 | 0.9675 | 0.9551 | 0.9613 | |
| 高斯 | MS | 0.9815 | 0.9925 | 0.9695 | 0.9815 | 0.9755 | |
| 高斯 | MVP | 0.9675 | 0.9970 | 0.9868 | 0.9675 | 0.9770 | |
| 高斯 | N | 1.0000 | 1.0000 | 1.0000 | 1.0000 | 1.0000 |
5.2 KNN 方法结果
精细 KNN 方法表现最佳,对每个类别的 TPR 超过 96.2%,FNR 低于 3.8%。其他变体对正常或异常信号的分类 TPR 高于 97.8%,FNR 低于 2.2%,但对其他类别的性能显著降低,尤其是余弦 KNN。
| 核函数 | 疾病类别 | 灵敏度(%) | 特异性(%) | 精度(%) | 召回率(%) | F - 分数(%) | 准确率(%) |
|---|---|---|---|---|---|---|---|
| 精细 KNN | AS | 0.9653 | 0.9954 | 0.9824 | 0.9653 | 0.9738 | 97.71 |
| 精细 KNN | MR | 0.9615 | 0.9941 | 0.9740 | 0.9615 | 0.9677 | |
| 精细 KNN | MS | 0.9691 | 0.9970 | 0.9874 | 0.9691 | 0.9782 | |
| 精细 KNN | MVP | 0.9870 | 0.9867 | 0.9441 | 0.9870 | 0.9651 | |
| 精细 KNN | N | 1.0000 | 0.9984 | 0.9946 | 1.0000 | 0.9973 | |
| 中等 KNN | AS | 0.9306 | 0.9863 | 0.9471 | 0.9306 | 0.9388 | 94.34 |
| 中等 KNN | MR | 0.8974 | 0.9911 | 0.9589 | 0.8974 | 0.9272 | |
| 中等 KNN | MS | 0.9136 | 0.9955 | 0.9801 | 0.9136 | 0.9457 | |
| 中等 KNN | MVP | 0.9805 | 0.9675 | 0.8728 | 0.9805 | 0.9235 | |
| 中等 KNN | N | 0.9892 | 0.9891 | 0.9632 | 0.9892 | 0.9760 | |
| 余弦 KNN | AS | 0.9480 | 0.9787 | 0.9213 | 0.9480 | 0.9345 | 92.89 |
| 余弦 KNN | MR | 0.8462 | 0.9926 | 0.9635 | 0.8462 | 0.9010 | |
| 余弦 KNN | MS | 0.8765 | 0.9970 | 0.9861 | 0.8765 | 0.9281 | |
| 余弦 KNN | MVP | 0.9870 | 0.9675 | 0.8736 | 0.9870 | 0.9268 | |
| 余弦 KNN | N | 0.9784 | 0.9752 | 0.9188 | 0.9784 | 0.9476 | |
| 加权 KNN | AS | 0.9364 | 0.9893 | 0.9586 | 0.9364 | 0.9474 | 95.42 |
| 加权 KNN | MR | 0.9231 | 0.9941 | 0.9730 | 0.9231 | 0.9474 | |
| 加权 KNN | MS | 0.9321 | 0.9955 | 0.9805 | 0.9321 | 0.9557 | |
| 加权 KNN | MVP | 0.9805 | 0.9719 | 0.8882 | 0.9805 | 0.9321 | |
| 加权 KNN | N | 0.9946 | 0.9922 | 0.9735 | 0.9946 | 0.9840 |
5.3 集成方法结果
集成方法对每个类别的 TPR 高于 92.3%,FNR 低于 7.7%。子空间 KNN 集成方法表现最佳,每个类别的 TPR 高于 98.7%,FNR 低于 2.6%。
| 核函数 | 疾病类别 | 灵敏度(%) | 特异性(%) | 精度(%) | 召回率(%) | F - 分数(%) | 准确率(%) |
|---|---|---|---|---|---|---|---|
| 提升树 | AS | 0.9769 | 0.9909 | 0.9657 | 0.9769 | 0.9713 | 96.87 |
| 提升树 | MR | 0.9423 | 0.9881 | 0.9484 | 0.9423 | 0.9453 | |
| 提升树 | MS | 0.9691 | 0.9925 | 0.9691 | 0.9691 | 0.9691 | |
| 提升树 | MVP | 0.9610 | 0.9911 | 0.9610 | 0.9610 | 0.9610 | |
| 提升树 | N | 0.9892 | 0.9984 | 0.9946 | 0.9892 | 0.9919 | |
| 袋装树 | AS | 0.9769 | 0.9833 | 0.9389 | 0.9769 | 0.9575 | 96.14 |
| 袋装树 | MR | 0.9231 | 0.9896 | 0.9536 | 0.9231 | 0.9381 | |
| 袋装树 | MS | 0.9506 | 0.9925 | 0.9686 | 0.9506 | 0.9595 | |
| 袋装树 | MVP | 0.9675 | 0.9911 | 0.9613 | 0.9675 | 0.9644 | |
| 袋装树 | N | 0.9838 | 0.9953 | 0.9838 | 0.9838 | 0.9838 | |
| 子空间判别 | AS | 0.9653 | 0.9939 | 0.9766 | 0.9653 | 0.9709 | 96.87 |
| 子空间判别 | MR | 0.9295 | 0.9881 | 0.9477 | 0.9295 | 0.9385 | |
| 子空间判别 | MS | 0.9815 | 0.9895 | 0.9578 | 0.9815 | 0.9695 | |
| 子空间判别 | MVP | 0.9610 | 0.9926 | 0.9673 | 0.9610 | 0.9642 | |
| 子空间判别 | N | 1.0000 | 0.9969 | 0.9893 | 1.0000 | 0.9946 | |
| 子空间 KNN | AS | 0.9884 | 0.9954 | 0.9828 | 0.9884 | 0.9856 | 99.04 |
| 子空间 KNN | MR | 0.9872 | 0.9970 | 0.9872 | 0.9872 | 0.9872 | |
| 子空间 KNN | MS | 1.0000 | 0.9985 | 0.9939 | 1.0000 | 0.9969 | |
| 子空间 KNN | MVP | 0.9740 | 0.9970 | 0.9868 | 0.9740 | 0.9804 | |
| 子空间 KNN | N | 1.0000 | 1.0000 | 1.0000 | 1.0000 | 1.0000 |
以下是心音信号分类流程的 mermaid 流程图:
graph LR
A[数据采集] --> B[数据预处理]
B --> C[特征提取]
C --> C1[时域特征]
C --> C2[频域特征]
C --> C3[时频域特征]
C1 --> D[分类]
C2 --> D
C3 --> D
D --> D1[SVM]
D --> D2[KNN]
D --> D3[集成方法]
D1 --> E[结果评估]
D2 --> E
D3 --> E
综上所述,通过多域特征提取和多种机器学习方法的实验,为心音信号分类提供了有效的解决方案。不同方法在不同方面表现出各自的优势,其中子空间 KNN 集成方法在整体性能上表现最佳,有望应用于远程监测系统中自动检测心脏瓣膜疾病。
6. 与其他方法的比较
将该方法与近期提出的其他心音信号分类方法进行比较,这些方法使用了相同的数据集。具体如下:
-
Yaseen 等人 2018 年的方法
:提取基于 MFCC 和 DWT 的特征,然后分析 SVM、KNN 和深度神经网络技术的性能。
-
S.K. Ghosh 等人 2019 年的方法
:从使用 WSST 方法获得的时频域信号中计算幅度和相位特征,并使用随机森林进行分类。
-
S.L. Oh 等人 2020 年的方法
:使用基于深度学习的深度 WaveNet 方法,WaveNet 是一种生成模型,用于创建原始音频信号。
-
S.K. Ghosh 等人 2020 年的方法
:提取使用 Chirplet 变换获得的时频域矩阵的局部能量和局部熵,然后使用基于特征稀疏表示的多类复合分类器对信号进行分类。
以下是各方法的性能比较表格:
| 作者及年份 | 特征提取方法 | 分类器 | 灵敏度 | 特异性 | 总体准确率 |
| ---- | ---- | ---- | ---- | ---- | ---- |
| Yaseen 等人 2018 年 | DWT 和 MFCC | 深度神经网络、SVM、KNN(最佳结果:SVM) | AS: 99.00
MR: 94.00
MS: 97.50
MVP: 99.00
N: 98.50 | AS: 98.25
MR: 99.88
MS: 99.50
MVP: 99.75
N: 99.62 | 97.6 |
| S.K. Ghosh 等人 2019 年 | 使用 WSST 的时频矩阵的幅度和相位特征 | 随机森林 | AS: 96.77(准确率)
MR: 90.55(准确率)
MS: 89.77(准确率)
N: 98.55(准确率) | | 95.13 |
| S.L. Oh 等人 2020 年 | 预处理信号 | 深度 WaveNet | AS: 94.50
MR: 89.00
MS: 96.50
MVP: 88.50
N: 94.00 | AS: 98.50
MR: 97.87
MS: 98.12
MVP: 96.87
N: 99.25 | 97.0 |
| S.K. Ghosh 等人 2020 年 | 使用 Chirplet 变换的时频矩阵的局部能量和局部熵 | 多类复合分类器 | AS: 99.66
MR: 96.33
MS: 98.83
N: 98.49 | AS: 99.04
MR: 99.49
MS: 99.26
N: 99.94 | 98.54 |
| 本方法 | 时域、频域、时频域(TQWT) | SVM、KNN、集成(最佳结果:集成 KNN) | AS: 98.84
MR: 98.72
MS: 100.0
MVP: 97.40
N: 100.0 | AS: 99.54
MR: 99.70
MS: 99.85
MVP: 99.70
N: 100.0 | 99.04 |
从表格中可以看出,本方法(集成子空间 KNN)的总体准确率达到 99.04%,优于其他方法。该方法的灵敏度高于 97.40%,特异性高于 99.54%,并且能准确地将心音信号分类为正常和异常类别。
7. 结论与展望
该心音信号分类方法通过多域特征提取和多种机器学习技术的结合,取得了令人满意的结果。使用集成 KNN 方法实现了 99.0% 的准确率,主要得益于以下几点:
-
TQWT 去噪方法
:提高了基于 HSMM 算法的分割性能。
-
时频域特征的加入
:基于 TQWT 分解级别提取的时频域特征,有助于分离 FHS 和杂音,从而使分类器能够区分正常和病理信号。
-
多种机器学习技术的实验
:对多种机器学习技术进行了广泛实验,虽然集成 KNN 方法效果最佳,但 SVM 的结果也很接近。
该方法的有效性表明,它可用于自动检测心脏瓣膜疾病,在远程监测系统中具有很大的应用潜力。此外,将心音信号分类为正常或异常比分类特定疾病更为准确,这对于无需医疗专家干预的家庭筛查系统非常重要。一旦检测到异常,患者可以被建议前往最近的医疗机构进行详细诊断。
未来,该系统需要在受现实生活噪声污染的信号和包含各种病理情况的大型数据集上进行测试。大型数据集的可用性将为探索基于神经网络和深度神经网络的机器学习技术提供机会。
以下是未来工作的流程 mermaid 流程图:
graph LR
A[现有方法] --> B[在含噪数据上测试]
A --> C[在大型数据集上测试]
B --> D[优化方法]
C --> D
D --> E[探索神经网络和深度神经网络]
E --> F[应用于实际远程监测系统]
总之,该心音信号分类方法为心脏疾病的早期诊断和远程监测提供了一种有前景的解决方案,但仍有进一步改进和拓展的空间。
超级会员免费看
1202

被折叠的 条评论
为什么被折叠?



