Python 机器学习实战|早期心脏病风险预测完整项目分享
·
一、项目初衷
心脏病是全球高发致命疾病,但早期筛查能大幅提升治愈率。医院积累了海量患者生理指标,于是我用 Python + 机器学习搭建心脏病风险预测 AI 模型,完整走完「数据探查→清洗→可视化建模→多模型对比评估」全流程,零基础也能看懂整套数据分析思路。
二、用到的核心工具库
数据处理:pandas、numpy 可视化:matplotlib 统计检验:scipy.stats 机器学习工具集sklearn:逻辑回归、决策树、随机森林、SVM、数据划分、标准化、模型评估指标 梯度提升树:XGBoost 额外配置:全局中文显示、忽略警告,解决图表负号乱码问题
三、完整项目流程拆解
阶段 1:数据加载与基础探索
读取医疗数据集Medicaldataset.csv,完成基础摸底:
- 查看样本前 5 行、全部字段名
info()查看字段类型、缺失值describe()输出数值指标均值、极值、分位数- 绘制全部生理指标箱线图,直观定位异常值
数据集包含核心指标:年龄、性别、心率、收缩压、舒张压、血糖、肌酸激酶同工酶、肌钙蛋白、诊断结果(positive 患病 /negative 健康)
阶段 2:数据清洗 —— 处理真实脏数据
真实医疗数据存在大量错误,清洗是建模关键:
- 清除全部重复样本
- 过滤极端异常值:心率>1000、收缩压<50 等不合理数据
- 修正逻辑错误:部分样本舒张压数值大于收缩压,直接交换两列数值修正 清洗后再次描述统计,数据分布回归合理区间。
阶段 3:数据可视化,挖掘医学规律
多维度图表直观分析指标与心脏病的关联:
- 年龄直方图 + 核密度曲线:样本年龄集中 50-75 岁,近似正态分布
- 性别饼图:整体男性样本占比约 66%,患病人群中男性占比更高
- 分组箱线图:分别对比「患病 / 健康」人群的年龄、心率、血压、血糖分布
- 交叉分组图:结合性别 + 诊断结果,双维度观察血糖、年龄差异
可视化结论:肌钙蛋白、肌酸激酶同工酶、年龄是区分患病与否的核心特征。
阶段 4:数据预处理,适配机器学习模型
- 标签数字化:将文本诊断
positive/negative转为二分类 0/1(1 = 患病,0 = 健康) - 特征筛选:选取核心建模特征
性别、年龄、CK-MB肌酸激酶、Troponin肌钙蛋白 - 连续特征标准化:年龄、两项心肌标志物做标准化消除量纲影响
- 分层划分数据集:80% 训练集 + 20% 测试集,分层抽样保证患病 / 健康样本比例一致
阶段 5:通用模型评估函数(复用神器)
封装统一评估函数,输入任意分类模型自动输出全套结果:
- 打印分类报告:精确率、召回率、F1 分数、样本支持数
- 绘制混淆矩阵热力图,直观展示误诊、漏诊数量
- 自动适配模型:有
predict_proba输出概率,SVM 无概率则调用decision_function得分 - 绘制 ROC 曲线并计算 AUC 值,AUC 越高代表模型区分能力越强
阶段 6:5 大经典分类模型训练对比
批量训练主流机器学习模型,统一评估横向对比性能:
- 逻辑回归:线性基线模型,可解释性强
- 决策树:单棵树,直观易理解,易过拟合
- 随机森林:集成树模型,抗过拟合,泛化能力更强
- XGBoost:梯度提升树,表格数据竞赛常用高分模型
- SVM 支持向量机:适合中小样本分类任务
最后汇总所有模型 AUC 值并排序,选出最优心脏病预测模型。
四、项目收获总结
- 实操掌握 Pandas 数据清洗、Matplotlib 多维度可视化完整流程;
- 理解医疗脏数据处理逻辑:异常值过滤、逻辑错误修正、重复值删除;
- 建立标准机器学习分类任务流程:数据探查→预处理→建模→多维度评估;
- 学会用混淆矩阵、ROC-AUC、精确率 / 召回率综合评判医疗模型(医疗场景漏诊代价极高,召回率尤为重要);
- 落地实用医疗 AI 思路:仅依靠几项基础生理指标,即可搭建低成本心脏病早期风险筛查工具。
五、适用人群 & 拓展方向
适合:Python 数据分析初学者、机器学习入门、医学信息处理方向同学 拓展优化:
- 加入卡方检验筛选相关性更强特征;
- 网格搜索 GridSearchCV 调参提升模型 AUC;
- 导出最优模型,封装简易筛查小工具;
- 新增年龄分层、高血压 / 糖尿病标签做多特征组合分析
更多推荐
所有评论(0)