机器学习中的心脏病预测

2025年8月27日 | 阅读 9 分钟
Heart Disease Prediction Using Machine Learning

心血管疾病是全球性的重大健康问题,导致大量死亡。及时的识别和预防措施对于减轻其影响至关重要。最近,一类名为机器学习的创新计算方法在预测和诊断各种疾病方面被证明非常有效,心脏病就是其中之一。通过利用海量数据集和尖端算法,这些模型可以准确地找出易患心脏病的人群,并促进及时干预。本文探讨了通过机器学习预测心脏病的领域,阐明了它在医疗保健领域的希望、挑战和影响。

冠状动脉疾病、心力衰竭和心律不齐等各种疾病都属于“心脏病”这一总称。及早发现易患这些疾病的个体,可以通过及时的干预和生活方式调整,极大地改善患者的健康状况。

现在,我们在给定的临床参数下,尝试预测患者是否患有心脏病。

数据来自 https://archive.ics.uci.edu/ml/datasets/heart+Disease

特点

以下是数据特征的详细信息和描述。

  1. age - 年龄(岁)
  2. sex - (1 = 男性;0 = 女性)
  3. cp - 胸痛类型
    • 0:典型心绞痛:与心脏供血不足相关的胸痛
    • 1:非典型心绞痛:与心脏无关的胸痛
    • 2:非心绞痛:通常是食管痉挛(与心脏无关)
    • 3:无症状:无疾病迹象的胸痛
  4. trestbps - 静息血压(入院时毫米汞柱);通常高于 130-140 会引起关注
  5. chol - 血清胆固醇(毫克/分升)
    • serum = LDL + HDL + .2 * 甘油三酯
    • 高于 200 会引起关注
  6. fbs - (空腹血糖 > 120 毫克/分升)(1 = 是;0 = 否)
    • '>126' 毫克/分升 预示糖尿病
  7. restecg - 静息心电图结果
    • 0:无特殊情况
    • 1:ST-T波异常
      • 可能从轻微症状到严重问题
      • 预示心跳不正常
    • 2:可能或明确的左心室肥大
      • 心脏主要泵血腔增大
  8. thalach - 达到的最大心率
  9. exang - 运动引起的胸痛(1 = 是;0 = 否)
  10. oldpeak - 与静息相比,运动引起的ST段压低,观察心脏在不健康运动时的压力,心脏压力更大
  11. slope - 运动高峰期ST段的斜率
    • 0:上斜:运动时心率更好(不常见)
    • 1:平斜:变化最小(典型健康心脏)
    • 2:下斜:心脏不健康的迹象
  12. ca - 造影检查着色的主要血管数量(0-3)
    • 着色的血管意味着医生可以看到血液通过
    • 血液流动越多越好(无血栓)
  13. thal - 鉈负荷显像结果
    • 1,3:正常
    • 6:固定缺损:曾经有缺损,但现在已恢复
    • 7:可逆性缺损:运动时血液流动不正常
  14. target - 是否患病(1=是,0=否)(= 预测属性)

代码

导入库

加载数据集

输出

Heart Disease Prediction Using Machine Learning

EDA(探索性数据分析)

EDA 在理解数据集和提取有价值的见解方面起着至关重要的作用。EDA 包括一系列旨在彻底检查和可视化数据的技术,目的是揭示数据集中可能存在的潜在模式、关系和异常。

输出

Heart Disease Prediction Using Machine Learning

输出

Heart Disease Prediction Using Machine Learning

输出

Heart Disease Prediction Using Machine Learning

输出

Heart Disease Prediction Using Machine Learning

在这个条形图中,我们可以看到更多的数据样本显示患有心脏病。

输出

Heart Disease Prediction Using Machine Learning

输出

Heart Disease Prediction Using Machine Learning

输出

Heart Disease Prediction Using Machine Learning

按性别划分的心脏病发病率

输出

Heart Disease Prediction Using Machine Learning

输出

Heart Disease Prediction Using Machine Learning

输出

Heart Disease Prediction Using Machine Learning

从上面的条形图可以看出,在这个数据集中,女性患心脏病的频率比男性高。

心脏病患者的年龄与最大心率

输出

Heart Disease Prediction Using Machine Learning

心脏病患者达到最大心率的可能性更高。

输出

Heart Disease Prediction Using Machine Learning

在这个直方图中,我们可以看到大约一半的样本年龄在 55 至 65 岁之间。其余的年龄在 40 到 70 岁之间。也有一些样本年龄在 30-40 岁和 70 岁以上。

按胸痛类型划分的心脏病发病率

cp - 胸痛类型

  • 0:典型心绞痛:与心脏供血不足相关的胸痛
  • 1:非典型心绞痛:与心脏无关的胸痛
  • 2:非心绞痛:通常是食管痉挛(与心脏无关)
  • 3:无症状:无疾病迹象的胸痛

输出

Heart Disease Prediction Using Machine Learning

输出

Heart Disease Prediction Using Machine Learning

大多数心脏病患者遭受第三种胸痛类型,即非心绞痛,还有一些患者遭受第一种胸痛类型,典型心绞痛和非典型心绞痛。尽管第二和第三种胸痛类型与心脏无关,但数据显示患者会遭受这些胸痛。为了得出结论,我们可能需要咨询一些医疗专业人士征求他们的意见。

相关性

输出

Heart Disease Prediction Using Machine Learning

输出

Heart Disease Prediction Using Machine Learning

1. 正相关,两个变量同向增加或减少

2. 负相关,一个变量增加,另一个变量减少,反之亦然

结果 1:胸痛和目标呈正相关 -> 胸痛水平越高,可能患心脏病的目标越多。

建模

训练基线模型

在这里,我们将使用以下机器学习模型

  • 逻辑回归
  • K-近邻分类器
  • 随机森林分类器

输出

Heart Disease Prediction Using Machine Learning

基线模型比较

输出

Heart Disease Prediction Using Machine Learning

对于基线模型,逻辑回归和随机森林的效果比 KNN 好得多。

超参数调整

我们将采用以下超参数调整方法

  • 手动调整
  • RandomizedSearchCV
  • GridSearchCV

手动调整

输出

Heart Disease Prediction Using Machine Learning

输出

KNN 在测试数据上的最高得分:75.41%

Heart Disease Prediction Using Machine Learning

调整 k 值参数后,KNN 分类器的性能有所提高,但性能仍低于逻辑回归和随机森林。

使用 RandomizedSearchCV 进行超参数调整

输出

Heart Disease Prediction Using Machine Learning

输出

Heart Disease Prediction Using Machine Learning

输出

Heart Disease Prediction Using Machine Learning

输出

Heart Disease Prediction Using Machine Learning

输出

Heart Disease Prediction Using Machine Learning

使用 RandomizedSearchCV,随机森林模型的性能有所提高。但逻辑回归模型的性能仍然更高。

使用 GridSearchCV 进行超参数调整

输出

Heart Disease Prediction Using Machine Learning

输出

Heart Disease Prediction Using Machine Learning

输出

Heart Disease Prediction Using Machine Learning

逻辑回归在所有不同的超参数调整模型上都获得了相同的分数。

在三种不同的分类器中,逻辑回归在训练阶段表现出最佳的性能得分。

评估超越准确性的调整后机器学习分类器

我们将使用以下指标进行评估

  • ROC 曲线和 AUC 分数
  • 混淆矩阵
  • 分类报告
  • 精度
  • 召回率
  • F1 分数

输出

Heart Disease Prediction Using Machine Learning

输出

Heart Disease Prediction Using Machine Learning

输出

Heart Disease Prediction Using Machine Learning

输出

Heart Disease Prediction Using Machine Learning

分类报告

输出

Heart Disease Prediction Using Machine Learning

使用 cross_val_score() 函数通过交叉验证计算评估指标

输出

Heart Disease Prediction Using Machine Learning

输出

Heart Disease Prediction Using Machine Learning

输出

Heart Disease Prediction Using Machine Learning

输出

Heart Disease Prediction Using Machine Learning

输出

Heart Disease Prediction Using Machine Learning

输出

Heart Disease Prediction Using Machine Learning

输出

Heart Disease Prediction Using Machine Learning

特征重要性

特征重要性就像在问“哪些特征对模型的输出贡献最大,以及它们是如何贡献的?”

对于每个机器学习模型,寻找特征重要性的方法都不同。

我们可以参考特征重要性来指导未来数据的收集。

输出

Heart Disease Prediction Using Machine Learning

输出

Heart Disease Prediction Using Machine Learning

输出

Heart Disease Prediction Using Machine Learning

根据可视化结果,

  • 胸痛类型(cp)
  • 静息心电图结果(restecg)
  • 运动高峰期 ST 段的斜率(slope)

具有很强的特征重要性。

另一方面,性别的重要性最低。

将机器学习技术应用于心脏病预测面临一系列需要克服的挑战。这些挑战包括需要广泛、多样且经过仔细策划的数据集、数据采集过程中可能存在的偏差以及模型本身的解释性。解决这些障碍需要医疗专家、数据科学家和监管机构之间的合作努力,以确保机器学习算法的合乎道德和高效的应用。

结论

利用机器学习进行心脏病预后是医疗保健领域向前迈出的重要一步。通过利用先进的算法和广泛的数据分析,我们能够采用前瞻性和量身定制的方法来对抗心脏病。随着研究和技术进步的不断推进,利益相关者必须团结起来,确保审慎的执行,应对挑战,并最大化这项革命性技术的优势。通过早期识别和预防措施,我们致力于创造一个全球心血管健康得到显著改善的未来。