基于机器学习的心脏病预测模型构建与可解释性分析
一、引言
心脏病是威胁人类健康的重要疾病之一,早期预测和诊断对防治心脏病具有重要意义。本文利用公开的心脏病数据集,通过机器学习算法构建预测模型,并使用 SHAP 值进行模型可解释性分析,旨在为心脏病的辅助诊断提供参考。
二、数据准备与预处理
1. 数据加载
数据集来源于 Kaggle 公开的心脏病数据集(heart.csv),包含 303 条样本和 14 个特征,目标变量为是否患有心脏病(target,0 表示无,1 表示有)。关键代码如下:
data = pd.read_csv('heart.csv')
print(f"数据规模: {data.shape}") # 输出:数据规模: (303, 14)
print("目标分布:\n", data['target'].value_counts(normalize=True))
目标分布显示正负样本比例约为 6:4,存在轻微不平衡,后续通过分层抽样处理。
2. 特征划分
数值型特征:年龄、血压、胆固醇等连续变量,共 6 个。
分类型特征:性别、胸痛类型、血糖等离散变量,共 8 个。
cat_features = ['sex', 'cp', 'fbs', 'restecg', 'exang', 'slope', 'ca', 'thal']
num_features = [c for c in X.columns if c not in cat_features]
3. 预处理流程
采用 ColumnTransformer 构建预处理管道:
数值型特征:标准化(StandardScaler)
分类型特征:独热编码(OneHotEncoder,丢弃第一个类别避免多重共线性)
preprocessor = ColumnTransformer([('num', StandardScaler(), num_features),('cat', OneHotEncoder(drop='first', handle_unknown='ignore'), cat_features)
])
三、模型训练与对比
1. 算法选择与超参数调优
选取 4 种经典分类算法,使用 GridSearchCV 进行 5 折交叉验证,以 F1 分数为优化指标:
随机森林(RF):调优参数包括树的数量(n_estimators)和最大深度(max_depth)
逻辑回归(LR):调优参数为正则化系数(C)
决策树(DT):调优参数为最大深度(max_depth)
支持向量机(SVM):调优参数为正则化系数(C)和核函数(kernel)
2. 训练流程
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y # 分层抽样保持样本分布
)for name, cfg in model_configs.items():pipe = Pipeline([('pre', preprocessor), ('model', cfg['model'])])grid = GridSearchCV(pipe, cfg['params'], cv=5, scoring='f1', n_jobs=-1)grid.fit(X_train, y_train) # 训练模型# 计算评估指标
3. 模型性能对比
模型 | 最佳参数 | 准确率 | 精确率 | 召回率 | F1 分数 | ROC-AUC |
---|---|---|---|---|---|---|
rf | {'model__max_depth': 10, 'model__n_estimators': 200} | 0.87 | 0.88 | 0.85 | 0.86 | 0.93 |
lr | {'model__C': 1.0} | 0.85 | 0.85 | 0.83 | 0.84 | 0.91 |
dt | {'model__max_depth': 10} | 0.83 | 0.83 | 0.82 | 0.82 | 0.89 |
svm | {'model__C': 1, 'model__kernel': 'rbf'} | 0.86 | 0.87 | 0.83 | 0.85 | 0.92 |
结论:随机森林(RF)在 F1 分数和 ROC-AUC 指标上表现最优,选为最终模型。
四、模型可解释性分析(SHAP 值)
1. SHAP 原理简介
SHAP(SHapley Additive exPlanations)基于合作博弈论,通过计算每个特征对预测结果的贡献度,实现模型可解释性。
2. 特征重要性分析
(1)条形图
(2)摘要图(Beeswarm)
五、结论与展望
1. 结论
随机森林模型在心脏病预测中表现最佳,准确率达 87%,F1 分数 0.86。关键影响因素为冠状动脉钙化数量、地中海贫血筛查结果和运动后 ST 段变化,与医学常识一致,验证了模型的合理性。
2. 改进方向
尝试集成学习(如 Stacking)或深度学习模型(如神经网络)。引入更多临床特征(如家族病史、生活习惯等)提升模型泛化能力。针对不平衡数据采用 SMOTE 等过采样技术优化。
相关文章:

基于机器学习的心脏病预测模型构建与可解释性分析
一、引言 心脏病是威胁人类健康的重要疾病之一,早期预测和诊断对防治心脏病具有重要意义。本文利用公开的心脏病数据集,通过机器学习算法构建预测模型,并使用 SHAP 值进行模型可解释性分析,旨在为心脏病的辅助诊断提供参考。 二、…...
VisDrone无人机视觉挑战赛观察解析2025.6.5
VisDrone无人机视觉挑战赛观察解析 历史沿革与发展进程 VisDrone无人机视觉挑战赛由天津大学联合国内外多所高校及科研机构发起,自2018年起依托ECCV、ICCV等顶级计算机视觉会议连续举办,已成为全球无人机视觉领域最具影响力的学术竞赛之一。赛事以推动无人机平台视觉算法创…...
Monorepo架构: Lerna、NX、Turbo等对比与应用分析
概述 对于大型的 Monorepo 项目来说,Nx 绝对算是神器,在包管理和版本控制部分有优势对于大型 Monorepo 项目,Nx 是非常实用的工具,在包管理、版本控制以及构建、测试优化等方面都有一定作用下面我们来对比一下这几种工具 NPM 包…...
redis进入后台操作、查看key、删除key
cmd进入 redis后台 避免报错NOAUTH Authentication required 第一步 ./redis-cli -h 127.0.0.1 -p 6379第二步 AUTH YourPassword通过key删除redis缓存 进了后台之后输入 keys * 删除key del key1...

谷粒商城-分布式微服务项目-高级篇[三]
十五、商城业务-支付 15.1 支付宝支付 15.1.1 进入“蚂蚁金服开放平台” 支付宝开放 平台地址: 支付宝开放平台 15.1.2 下载支付宝官方 demo,进行配置和测试 开发者文档:支付宝开放平台文档中心 电脑网站支付文档:小程序文…...

实现购物车微信小程序
实现一个微信小程序购物车页面,包含以下功能: 需求说明: 商品列表:显示商品名称、价格、数量加减按钮,支持修改商品数量(数量≥1)。 全选 / 反选功能:顶部 “全选” 复选框&#…...

26考研 | 王道 | 计算机组成原理 | 四、指令系统
26考研 | 王道 | 计算机组成原理 | 四、指令系统 文章目录 26考研 | 王道 | 计算机组成原理 | 四、指令系统1.指令系统0.指令集体系结构1. 指令格式1.按地址码数目不同来分2.指令-按指令长度分类3.指令-按操作码长度分类4.指令-按操作类型分类 2. 扩展操作码指令格式 2.指令的寻…...
互联网大厂Java求职面试:AI与大模型技术在企业知识库中的深度应用
互联网大厂Java求职面试:AI与大模型技术在企业知识库中的深度应用 第一轮:场景引入与基础架构设计 面试官(技术总监): “郑薪苦,我们先从一个实际场景开始吧。假设我们要为企业知识库设计一个深度融合AI大…...

在 Windows 系统安装 Git
前往官网下载Git - Downloads 目录 一、下载安装包 二、安装 Git 三、安装完成 四、验证安装 五、问题解决 解决步骤 一、下载安装包 点击页面右侧 “Download for Windows” 按钮。 点击页面最上方 “Click here to download” ,下载 Git for Windows/x64 …...
JavaSec-SSTI - 模板引擎注入
简介 SSTI(Server Side Template Injection):模板引擎是一种通过将模板中的占位符替换为实际数据来动态生成内容的工具,如HTML页面、邮件等。它简化了视图层的设计,但如果未对用户输入进行有效校验,可能导致安全风险如任意代码执行…...

基于InternLM的情感调节大师FunGPT
基于书生系列大模型,社区用户不断创造出令人耳目一新的项目,从灵感萌发到落地实践,每一个都充满智慧与价值。“与书生共创”将陆续推出一系列文章,分享这些项目背后的故事与经验。欢迎订阅并积极投稿,一起分享经验与成…...

【性能调优系列】深入解析火焰图:从基础阅读到性能优化实战
博客目录 一、火焰图基础:结构与阅读方法二、深入分析火焰图:关键观察点与性能瓶颈识别1. 识别最宽的函数块2. HTTP 请求处理分析3. 数据库操作分析4. 业务逻辑分析 三、性能优化实战:从火焰图到解决方案1. 线程池性能优化2. 数据库访问优化3…...

Docker 与容器技术的未来:从 OCI 标准到 eBPF 的演进
Docker 的出现无疑是云计算发展史上的一个里程碑。它以其直观的打包、分发和运行方式,极大地简化了应用程序的部署和管理,从而推动了微服务架构和 DevOps 文化的普及。然而,容器技术的未来并非仅仅局限于 Docker,它正朝着更深层次的标准化和更底层的操作系统内核创新方向演…...

PLC远程控制网关支持多塘口水环境数据边缘计算与远程安全传输的配置指南
一、项目背景 渔业养殖是关系到我国食物安全和海洋经济发展的重要产业,随着科技的不断进步,传统的养殖模式面临着诸多挑战,如养殖环境复杂、水质变化难以实时监测、设备运行状态不稳定等,这些问题不仅增加了养殖成本,还…...
3.3 HarmonyOS NEXT原子化服务开发:卡片设计、轻量部署与场景化编排实战
HarmonyOS NEXT原子化服务开发:卡片设计、轻量部署与场景化编排实战 在HarmonyOS NEXT的全场景生态中,原子化服务作为"设备即服务"理念的核心载体,通过免安装、跨设备流转的轻量化形态,重新定义了用户与服务的交互方式…...

C++11 中 final 和 override 从入门到精通
文章目录 一、引言二、final 关键字2.1 final 关键字的基本概念2.2 final 关键字的语法2.3 final 关键字的使用示例2.3.1 防止类被继承2.3.2 防止虚函数被重写 2.4 final 关键字的使用场景2.5 final 关键字的注意事项 三、override 关键字3.1 override 关键字的基本概念3.2 ove…...
跨多个微服务使用 Redis 共享数据时,如何管理数据一致性?
在跨多个微服务使用 Redis 共享数据时,管理数据一致性是一个复杂但至关重要的问题。Redis 本身提供的原子操作和一些数据结构可以提供帮助,但大部分一致性保障需要应用层面的设计和策略。 首先要明确一点:在分布式系统中,强一致性…...
Linux网络——socket网络通信udp
文章目录 UDP通信基础UDP的特点 Linux下UDP通信核心步骤创建UDP套接字绑定本地地址(可选)发送数据函数:sendto()函数原型参数详解典型使用示例 接收数据函数:recvfrom()函数原型参数详解返回值典型使用示例 关键设计原因无连接特性…...

大数据-275 Spark MLib - 基础介绍 机器学习算法 集成学习 随机森林 Bagging Boosting
点一下关注吧!!!非常感谢!!持续更新!!! 大模型篇章已经开始! 目前已经更新到了第 22 篇:大语言模型 22 - MCP 自动操作 FigmaCursor 自动设计原型 Java篇开…...
大模型微调技术全景图:从全量更新到参数高效适配
在预训练大语言模型(LLM)展现出惊人能力之后,如何让这些“通才”模型蜕变为特定领域的“专家”?微调(Fine-Tuning)正是解锁这一潜力的核心技术。本文将深入解析主流微调技术,助你找到最适合任务…...
c++ chrono头文件含义
在C中,<chrono> 是一个标准库头文件,用于处理时间相关的操作,包括时间点、时间间隔和时钟。它提供了一套强大的时间处理功能,支持高精度的时间测量、时间间隔的计算以及时间点的表示。 1. <chrono> 的主要功能 <…...

git互联GitHub 使用教程
一、下载git Git 公司 右键 git config --global user.name "name" git config --global user.email "email" ssh-keygen -t rsa -C email :生成的ssh密钥需要到github 网站中保存ssh 二、GitHub新建repository 三、本地git互联GitHub 找…...
Python爬虫与Java爬虫深度对比:从原理到实战案例解析
在当今数据驱动的时代,网络爬虫技术已成为获取和分析网络数据的重要手段。作为两种最流行的爬虫开发语言,Python和Java各有其独特的优势和适用场景。本文将全面对比Python爬虫与Java爬虫的核心差异,并通过实际代码示例展示它们的具体实现方式,帮助开发者根据项目需求做出合…...
汇编语言综合程序设计:子程序、分支与循环深度解析
本文将通过一个完整的控制台计算器案例,深入探讨汇编语言中子程序、分支结构和循环结构的综合应用,展示模块化编程、输入输出处理和算法实现的核心技术。 一、模块化编程架构设计 1. 系统架构规划 Calculator System ├── main.asm (主程序)…...

SpringBoot+Mysql实现的停车场收费小程序系统+文档
💗博主介绍💗:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示:文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…...

面向对象进阶 | 深入探究 Java 静态成员与继承体系
个人主页 文章专栏 文章目录 个人主页文章专栏 一、static(静态)1.static 静态变量代码展示内存图 2.static 静态方法工具类:练习: 3.static注意事项4.重新认识main方法 二、继承1.继承概述2.继承的特点3.子类到底能继承父类中的…...

人脸识别技术成为时代需求,视频智能分析网关视频监控系统中AI算法的应用
一、应用背景:时代需求与技术革新的双重驱动 1)传统安防系统的困境:传统监控系统依赖人工逐帧筛查海量视频,在人流密集场所极易漏检,且缺乏实时锁定和主动预警能力,面对突发安全事件响应迟缓。 2&a…...
青岛国瑞数据采集网关软件平台:工业互联的智能基石——安全、高效、开放,驱动企业数字化转型
一、产品定位:工业数据的智能枢纽 青岛国瑞数据采集网关软件平台,以“连接万物、赋能智能”为核心理念,专为工业场景打造,解决设备互联、数据互通、业务融合的核心痛点。无需深奥技术背景,通过极简配置,…...
Git的由来与应用详解:从Linux内核到现代开发的革命性工具
1. Git的诞生背景与历史 1.1 Linux内核开发的困境 1991年,Linus Torvalds创建了开源的Linux操作系统。随着Linux的不断发展壮大,全球各地的志愿者纷纷参与到Linux内核的开发中。然而,在2002年之前,Linux内核的代码管理却处于一种原始状态——世界各地的开发者通过diff方式…...
@Prometheus 监控-MySQL (Mysqld Exporter)
文章目录 **Prometheus 监控 MySQL ****1. 目标****2. 环境准备****2.1 所需组件****2.2 权限要求** **3. 部署 mysqld_exporter****3.1 下载与安装****3.2 创建配置文件****3.3 创建 Systemd 服务****3.4 验证 Exporter** **4. 配置 Prometheus****4.1 添加 Job 到 prometheus…...