一、项目初衷

心脏病是全球高发致命疾病,但早期筛查能大幅提升治愈率。医院积累了海量患者生理指标,于是我用 Python + 机器学习搭建心脏病风险预测 AI 模型,完整走完「数据探查→清洗→可视化建模→多模型对比评估」全流程,零基础也能看懂整套数据分析思路。

二、用到的核心工具库

数据处理:pandasnumpy 可视化:matplotlib 统计检验:scipy.stats 机器学习工具集sklearn:逻辑回归、决策树、随机森林、SVM、数据划分、标准化、模型评估指标 梯度提升树:XGBoost 额外配置:全局中文显示、忽略警告,解决图表负号乱码问题

三、完整项目流程拆解

阶段 1:数据加载与基础探索

读取医疗数据集Medicaldataset.csv,完成基础摸底:

  1. 查看样本前 5 行、全部字段名
  2. info()查看字段类型、缺失值
  3. describe()输出数值指标均值、极值、分位数
  4. 绘制全部生理指标箱线图,直观定位异常值

数据集包含核心指标:年龄、性别、心率、收缩压、舒张压、血糖、肌酸激酶同工酶、肌钙蛋白、诊断结果(positive 患病 /negative 健康)

阶段 2:数据清洗 —— 处理真实脏数据

真实医疗数据存在大量错误,清洗是建模关键:

  1. 清除全部重复样本
  2. 过滤极端异常值:心率>1000、收缩压<50 等不合理数据
  3. 修正逻辑错误:部分样本舒张压数值大于收缩压,直接交换两列数值修正 清洗后再次描述统计,数据分布回归合理区间。

阶段 3:数据可视化,挖掘医学规律

多维度图表直观分析指标与心脏病的关联:

  1. 年龄直方图 + 核密度曲线:样本年龄集中 50-75 岁,近似正态分布
  2. 性别饼图:整体男性样本占比约 66%,患病人群中男性占比更高
  3. 分组箱线图:分别对比「患病 / 健康」人群的年龄、心率、血压、血糖分布
  4. 交叉分组图:结合性别 + 诊断结果,双维度观察血糖、年龄差异

可视化结论:肌钙蛋白、肌酸激酶同工酶、年龄是区分患病与否的核心特征。

阶段 4:数据预处理,适配机器学习模型

  1. 标签数字化:将文本诊断positive/negative转为二分类 0/1(1 = 患病,0 = 健康)
  2. 特征筛选:选取核心建模特征性别、年龄、CK-MB肌酸激酶、Troponin肌钙蛋白
  3. 连续特征标准化:年龄、两项心肌标志物做标准化消除量纲影响
  4. 分层划分数据集:80% 训练集 + 20% 测试集,分层抽样保证患病 / 健康样本比例一致

阶段 5:通用模型评估函数(复用神器)

封装统一评估函数,输入任意分类模型自动输出全套结果:

  1. 打印分类报告:精确率、召回率、F1 分数、样本支持数
  2. 绘制混淆矩阵热力图,直观展示误诊、漏诊数量
  3. 自动适配模型:有predict_proba输出概率,SVM 无概率则调用decision_function得分
  4. 绘制 ROC 曲线并计算 AUC 值,AUC 越高代表模型区分能力越强

阶段 6:5 大经典分类模型训练对比

批量训练主流机器学习模型,统一评估横向对比性能:

  1. 逻辑回归:线性基线模型,可解释性强
  2. 决策树:单棵树,直观易理解,易过拟合
  3. 随机森林:集成树模型,抗过拟合,泛化能力更强
  4. XGBoost:梯度提升树,表格数据竞赛常用高分模型
  5. SVM 支持向量机:适合中小样本分类任务

最后汇总所有模型 AUC 值并排序,选出最优心脏病预测模型。

四、项目收获总结

  1. 实操掌握 Pandas 数据清洗、Matplotlib 多维度可视化完整流程;
  2. 理解医疗脏数据处理逻辑:异常值过滤、逻辑错误修正、重复值删除;
  3. 建立标准机器学习分类任务流程:数据探查→预处理→建模→多维度评估;
  4. 学会用混淆矩阵、ROC-AUC、精确率 / 召回率综合评判医疗模型(医疗场景漏诊代价极高,召回率尤为重要);
  5. 落地实用医疗 AI 思路:仅依靠几项基础生理指标,即可搭建低成本心脏病早期风险筛查工具。

五、适用人群 & 拓展方向

适合:Python 数据分析初学者、机器学习入门、医学信息处理方向同学 拓展优化:

  1. 加入卡方检验筛选相关性更强特征;
  2. 网格搜索 GridSearchCV 调参提升模型 AUC;
  3. 导出最优模型,封装简易筛查小工具;
  4. 新增年龄分层、高血压 / 糖尿病标签做多特征组合分析

更多推荐