欢迎光临
我们一直在努力

Python 实战3:基于随机森林的心脏衰竭风险预测决策系统开发全流程

本次项目的完整代码可直接复现,适合 Python 数据挖掘入门者、医学数据分析爱好者学习使用,也为基层医疗的智能化辅助决策提供了一个轻量化的实现方案。数据可私信,发给你

在心血管疾病临床诊断中,心脏衰竭的早期风险评估对降低病死率至关重要。本次以 Kaggle 公开的心脏衰竭临床数据集为基础,用 Python 实现从数据挖掘建模到 Streamlit Web 应用部署的完整决策支持系统,可通过患者 12 项临床指标快速预测 1 年内心脏衰竭死亡风险,为基层医生和患者提供量化的辅助决策依据。整体决策页面效果如下:

一、项目核心技术栈与开发目标

1. 开发目标

基于 299 条心脏衰竭临床记录,构建机器学习模型,实现指标输入→数据转换→风险预测→个性化医学建议的全流程自动化,模型需满足临床辅助决策要求,Web 应用操作简便、适配多设备。

2. 核心技术栈

技术模块
所用工具 / 库
核心作用
数据处理与探索 Pandas、NumPy、Matplotlib 数据清洗、可视化、异常值处理
机器学习建模 Scikit-learn 数据集划分、特征标准化、随机森林模型训练与评估
模型持久化 Pickle 保存训练好的模型、标准化器,供 Web 应用调用
Web 应用开发 Streamlit 快速构建交互式无代码前端,实现多页面交互和中文支持

二、数据集探索与分析

本次使用 Kaggle 公开的「Heart Failure Clinical Records Dataset」,由巴基斯坦心脏病研究所收集,是心血管疾病预测的经典基准数据集,无缺失值、数据质量良好,适合作为入门级医学数据挖掘实战案例。

1. 数据集核心信息

  • 样本规模:299 条患者记录,其中死亡 96 例(32.1%)、存活 203 例(67.9%),轻微类别不平衡,符合临床数据特征;
  • 特征维度:12 个输入特征(含基本信息、基础疾病、心脏功能、血液指标)+1 个二分类目标变量(DEATH_EVENT:是否因心脏衰竭死亡);
  • 数据类型:包含连续型数值特征(如年龄、射血分数)和二分类特征(如糖尿病、吸烟史);
  • 随访周期:4-285 天,平均 130.3 天,确保目标变量标记的可靠性。

2. 数据探索核心代码

import pandas as pd
import matplotlib.pyplot as plt

# 配置中文显示与输出格式
plt.rcParams[\’font.sans-serif\’] = [\’SimHei\’]
plt.rcParams[\’axes.unicode_minus\’] = False
pd.set_option(\’display.unicode.east_asian_width\’, True)
pd.set_option(\’display.max_columns\’, None)
pd.set_option(\’display.width\’, 1000)

# 读取数据集
data_path = r\”your_path/heart.csv\”
heart_df = pd.read_csv(data_path, encoding=\’utf-8\’)

# 查看数据集前5行、基本信息、描述性统计
print(\”=\”*60 + \” 数据集前5行 \” + \”=\”*60)
print(heart_df.head())
print(\”\\n\” + \”=\”*60 + \” 数据集基本信息 \” + \”=\”*60)
heart_df.info()
print(\”\\n\” + \”=\”*60 + \” 数值型特征描述性统计 \” + \”=\”*60)
print(heart_df.describe().round(2))

# 查看目标变量分布并可视化
print(\”\\n\” + \”=\”*60 + \” 目标变量(DEATH_EVENT)分布 \” + \”=\”*60)
death_dist = heart_df[\’DEATH_EVENT\’].value_counts()
print(death_dist)
print(f\”心脏衰竭死亡比例:{round(heart_df[\’DEATH_EVENT\’].mean()*100, 2)}%\”)

# 可视化目标变量分布
fig, ax = plt.subplots(figsize=(8, 5))
death_dist.plot(kind=\’bar\’, color=[\’#1f77b4\’, \’#ff7f0e\’], ax=ax)
ax.set_title(\’心脏衰竭死亡事件分布\’, fontsize=14)
ax.set_xlabel(\’DEATH_EVENT(0=存活,1=死亡)\’, fontsize=12)
ax.set_ylabel(\’样本数量\’, fontsize=12)
ax.set_xticklabels(ax.get_xticklabels(), rotation=0)
plt.savefig(r\”your_path/death_event_dist.png\”, dpi=300, bbox_inches=\’tight\’)
plt.close()
print(\”\\n✅ 数据探索完成!已生成目标变量分布图\”)

三、数据预处理:让数据适配模型训练

医学数据存在异常值、量纲差异等问题,直接建模会影响模型性能,本次预处理遵循「异常值处理→特征拆分→数值标准化」 流程,确保数据质量和模型适配性。

1. 核心预处理步骤

  • 异常值处理:基于医学常识,对射血分数(<10% 或> 80%)、血清肌酐(>5mg/dL)的异常值用中位数替换(避免极端值干扰,中位数更抗离群值);
  • 特征拆分:将数据集拆分为特征变量X(12 个临床指标)和目标变量y(DEATH_EVENT);
  • 数值标准化:对 7 个连续型特征用StandardScaler标准化为均值 0、标准差 1的分布,消除量纲差异对模型的影响;
  • 数据持久化:保存预处理后的数据和标准化器,确保后续模型训练和 Web 预测使用统一标准。
  • 2. 数据预处理核心代码

    赞(0)
    未经允许不得转载:171主机测评 » Python 实战3:基于随机森林的心脏衰竭风险预测决策系统开发全流程
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址