【运动心肺测试】利用CNN将运动心肺测试时间序列编码为图像进行分类

Encoding Cardiopulmonary Exercise Testing Time Series as Images for Classification using Convolutional Neural Network
利用卷积神经网络将心肺运动测试时间序列编码为图像进行分类

什么是运动测试

运动测试是一种非常通用的用于诊断和预测患者的一系列疾病,特别是心血管和肺部疾病的工具。它是一个非侵入性的过程,可以评估一个人的动态活动能力。

什么是心肺运动测试

  • 心肺运动测试(Cardiopulmonary exercise testing, CPET)是客观评估患者运动能力和表现水平的常用实验室检查之一。
  • CPET能够通过一系列围绕呼吸气体交换分析,建立的肺、心血管和代谢测量,来测量体育锻炼的生理反应。
  • CPET评估具有挑战性,是因为要求对每一个个体处理多个时间序列数据点,导致了它往往简化为峰值和斜率,但忽略了相关趋势的变化。

本工作是如何解决的

  • 时间序列编码为二维图像:使用格拉姆角场 (Gramian Angular Field, GAF)、马尔可夫转移场(Markov Transition Field, MTF)两种方法
  • 将二维图像与卷积神经网络和注意力池化方法一起用于心力衰竭和代谢综合征患者的分类。
    在这里插入图片描述

一些细节

1. 格拉姆角场 (GAF)、马尔可夫转移场(MTF)实现
格拉姆角场 (GAF)、马尔可夫转移场(MTF)实现
简单来说大体上分为两个方法GAF和MTF,GAF又包括GASF和GADF两种。这两种方法的具体细节可以查看《Imaging Time-Series to Improve Classification and Imputation》,简单来说就是将输入数据是长度为m的一维数据转化为大小为m×m的二维的图,有几个通道的一维数据就对应几个二维的图。相比于将一维数据直接丢入网络,丢入的二维数据包括了直观的不同时间跨度上的信息。
2. 数据集
在两个数据集上演示了这种方法:

  • CPET数据集
    由30名心力衰竭或代谢综合征患者(每组15名)组成。对于每个患者,数据包含以下变量的逐呼吸读数:任务的代谢当量(1 MET = 3.5ml/kg/min)、心跳(次/分钟)、绝对氧气量VO2 (L/min)、适配了体重的相对氧气量(ml/kg/min)、二氧化碳量VCO2 (L / min)、呼吸交换比、每分钟静息通气量VE (L / min)、VE / VCO2、VE / VO2、呼吸频率(呼吸次数/分钟)、呼气潮气量(L)、吸气潮气量(L)。

MET(metabolic equivalent of task)是一个表达运动强度的指标。 1MET代表着人安静地坐在椅子上时的耗氧量(约为每kg体重每分钟3.5ml氧气)。
VE是静息状态下,维持正常气体交换的通气量,等于潮气量×每分钟呼吸频率

  • Wafer数据集
    使用此开源数据集与其他方法进行比较;数据从六个真空室半导体传感器监控获得,有正常和异常两类。

实验结果

在CPX上只做了本文方法,Wafer上做了对比
原文链接:YashSharma/MultivariateTimeSeries

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 我们可以使用Keras中的自动编码器模型来实现心肺音信号的分离。以下是一段简单的代码:from keras.layers import Input, Dense from keras.models import Model # 定义输入数据的维度 inputs = Input(shape=(20,)) # 定义编码器层 encoded = Dense(10, activation='relu')(inputs) # 定义解码器层 decoded = Dense(20, activation='sigmoid')(encoded) # 构建自动编码器模型 autoencoder = Model(inputs, decoded)# 编译模型 autoencoder.compile(optimizer='adam', loss='binary_crossentropy')# 训练模型 autoencoder.fit(X_train, X_train, epochs=50, batch_size=256, shuffle=True)# 使用自编码器来分离心肺音信号 encoded_signal = autoencoder.predict(data) ### 回答2: 自动编码器是一种人工神经网络模型,常用于无监督学习任务。它可以通过学习输入数据的编码表示,自动地从输入数据中提取出重要的特征信息。下面是一个基于自动编码器分离心肺音信号的简单示例代码: ```python # 导入必要的库 import numpy as np import tensorflow as tf # 构建自动编码器模型 input_dim = 100 # 输入维度 encoding_dim = 50 # 编码维度 # 定义输入层 input_layer = tf.keras.Input(shape=(input_dim,)) # 定义编码层 encoder_layer = tf.keras.layers.Dense(encoding_dim, activation='relu')(input_layer) # 定义解码层 decoder_layer = tf.keras.layers.Dense(input_dim, activation='sigmoid')(encoder_layer) # 构建自动编码器模型 autoencoder = tf.keras.Model(input_layer, decoder_layer) # 编译模型 autoencoder.compile(optimizer='adam', loss='binary_crossentropy') # 加载数据 data = np.load('heart_lung_sound.npy') # 将数据归一化到0-1之间 data = data / np.max(data) # 训练模型 autoencoder.fit(data, data, epochs=50, batch_size=32) # 使用训练好的自动编码进行分离 encoded_data = autoencoder.get_layer('dense')(data) decoded_data = autoencoder.predict(data) # 输出分离后的信号 heart_sound = encoded_data[:, :25] lung_sound = encoded_data[:, 25:] # 保存分离后的信号 np.save('heart_sound.npy', heart_sound) np.save('lung_sound.npy', lung_sound) ``` 以上代码使用TensorFlow库构建了一个简单的自动编码器模型。首先定义了输入层和编码层,然后定义了解码层。接着将输入层和解码层包装成自动编码器模型,编译模型并使用训练数据进行训练。训练完成后,利用训练好的自动编码器模型对输入数据进行编码和解码,分离出心音和肺音信号,并保存到本地。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Willow输入中

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值