如何训练机器学习模型在给定心电图数据及其特征时预测诊断?

问题描述 投票:0回答:1

我必须训练一个模型,使其能够读取心电图信号数据并提取特征,并能够预测患者的心脏病状况以及该人将来是否可能患有心脏病。该数据库是 Physionet 上用于心律失常研究的大型 12 导联心电图数据库。

我首先通过一些过滤器运行数据以消除伪影,然后使用 NeuroKit 2.0 特征提取库来提取特征,然后使用预测算法填充缺失的数据。最后将其全部放入字典中,每个患者包含 25 个项目。

这 25 项如下:P、Q、R、S、T 峰值时间戳(以毫秒为单位)、P、R、T 波的开始、P、R、T 波的偏移、PR 和 ST 的持续时间节段、ST、QT、RR 和 QRS 间期,以及 P、Q、R、S 和 T 峰值的幅度,然后是心率,最后是诊断

所有这些数据然后被转换成一个数据框,最终被转换成一个 CSV 文件,其中的列是特征,行数因人而异,因为每个人的峰值数量取决于他们的心脏状况。所以每个病人都有自己的 CSV 文件

问题是,当我尝试将此数据提供给我的训练模型时,我不断收到此错误:

ValueError: Data cardinality is ambiguous:
  x sizes: 12, 10, 10, 10, 9, 9, 8, 9, 11, 9, 12, 9, 9, 18, 9, 9, 9, 9, 9, 23, 12, 10, 13, 11, 9, 9, 13, 9, 12, 10, 15, 17
  y sizes: 12, 10, 10, 10, 9, 9, 8, 9, 11, 9, 12, 9, 9, 18, 9, 9, 9, 9, 9, 23, 12, 10, 13, 11, 9, 9, 13, 9, 12, 10, 15, 17
Make sure all arrays contain the same number of samples.

我想我应该填充数据,但我觉得这会改变我的结果,因为峰值的数量对于确定诊断是必要的。

数据集适用于 12 条导联,但为简单起见,到目前为止我只采用了一条导联,以及只有单一诊断的患者。

我想也许我可以创建一个 CSV 文件,其中每一行对应一名患者。每列代表一个特征,每个单元格都有一个给定值的列表。喜欢

病人 P 峰 Q-峰值 等等
1 [554, 1580, 2588, 3636, 4704, 5746, 6804, 7862, 8904] [692, 1674, 2720, 3768, 4794, 5878, 6936, 7954, 8994] ...
2 ... ... ...

但是当我输入列表作为训练数据时出现错误。所以我不知道该怎么办

python machine-learning training-data
1个回答
0
投票

您提到尝试将列表直接输入模型,这通常不是模型的训练方式。模型需要矩阵(二维数组),其中行是样本(在本例中为患者),列是特征。每个患者的列表,尤其是不同长度的列表,不适合这个模式,这就是您面临错误的原因。您可以在这里查看我在类似情况下给出的建议。

此外,据我了解,您面临的问题是由于每个患者提取的特征(例如峰值)数量不规则。一般来说,机器学习模型期望每个样本都有固定数量的特征。也许你应该考虑一些特征工程,比如

  • 统计特征(平均值、中位数、最小/最大、分位数、计数等)
  • 填充序列(如果保留峰值序列至关重要,请考虑将序列填充到固定长度,用中性值或指定的填充值填充)
  • 时间序列到图像(您可以将时间序列数据转换为频谱图或任何其他时频表示图像,然后使用卷积神经网络(CNN)进行分类。)
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.