发布时间:2026/6/19 17:58:52
心血关疾病
心血管疾病是全球致死率最高的疾病之一早期筛查、快速风险预判能极大降低重症发病概率。本文基于医院真实心血管医疗数据集1319 条患者临床指标完整复现数据读取→探索性数据分析 EDA→异常清洗预处理→特征工程→多分类模型训练对比全流程对比逻辑回归、决策树、随机森林、XGBoost、SVM 五大经典二分类算法通过混淆矩阵、分类报告、ROC-AUC 综合评估模型性能最终选出适配医疗诊断场景的最优模型代码可直接运行适合机器学习入门、课程大作业、毕设参考。一、项目环境与依赖库1.1 导入全部依赖python运行import pandas as pd import numpy as np import matplotlib.pyplot as plt import matplotlib as mpl from scipy.stats import chi2_contingency from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.tree import DecisionTreeClassifier from sklearn.ensemble import RandomForestClassifier from sklearn.svm import SVC from xgboost import XGBClassifier from sklearn.metrics import classification_report, confusion_matrix, roc_curve, auc import warnings # 屏蔽运行警告 warnings.filterwarnings(ignore) # 解决matplotlib中文、负号显示 mpl.rcParams[font.family]SimHei plt.rcParams[axes.unicode_minus]False二、数据集加载与基础信息探查2.1 数据读取与列名中文转换数据集文件Medicaldataset.csv共 1319 条患者样本9 个字段年龄、性别、心率、收缩压、舒张压、血糖、肌酸激酶同工酶、肌钙蛋白、诊断结果positive 患病 /negative 健康。python运行# 读取csv数据 dfpd.read_csv(Medicaldataset.csv) # 重命名中文列 columns[年龄,性别,心率,收缩压,舒张压,血糖,肌酸激酶同工酶,肌钙蛋白,结果] df.columnscolumns # 查看前5行 df.head()2.2 基础数据信息python运行# 数据类型、非空值统计 df.info() # 数值特征描述统计 df.describe() # 重复值检测 print(重复样本数量,df.duplicated().sum())输出解读数据集共 1319 条样本无缺失值、无重复数据5 个 int 整型特征年龄、性别、心率、收缩压、舒张压3 个浮点生化指标1 个文本标签诊断结果年龄均值 56.19样本集中中老年人群男性占比 65.96%样本男性多于女性心率、血糖、肌酸激酶同工酶最大值远超正常生理区间存在大量极端异常值。2.3 原始数据箱线图异常值可视化python运行df.plot(kindbox,figsize(14,8)) plt.title(原始数据各特征箱线图异常值分布) plt.show()对应可视化图rym {type:ImageRefCard,refs:[问诊 1 - 第一张箱线图],titles:[原始数据箱线图]}从箱线图可见心率、血糖、肌酸激酶同工酶、肌钙蛋白存在大量离群极端点属于临床不合理数据需要清洗部分样本舒张压收缩压违背生理常识需修正。三、数据预处理医疗数据清洗核心步骤3.1 极端生理异常样本剔除临床生理阈值规则心率1000、收缩压50、舒张压140过滤极端错误数据python运行# 过滤极端异常值 dfdf.loc[(df[心率]1000) (df[收缩压]50)(df[舒张压]140)] print(清洗后样本量,df.shape[0]) # 输出1314条剔除5条极端错误样本3.2 修正舒张压收缩压逻辑错误样本血压生理规则收缩压必然大于舒张压交换异常样本的两列数值python运行# 筛选异常血压数据 wrong_datadf[df[舒张压]df[收缩压]] # 交换两列数值 df.loc[wrong_data.index,[收缩压,舒张压]] df.loc[wrong_data.index,[舒张压,收缩压]].values.copy() # 校验修正结果 df.loc[wrong_data.index[0:5]]3.3 清洗后数据重绘箱线图python运行df.plot(kindbox,figsize(14,8)) plt.title(清洗异常值后特征箱线图) plt.show()对应可视化图rym {type:ImageRefCard,refs:[问诊 1 - 第二张箱线图],titles:[清洗后箱线图]}四、探索性数据分析 EDA特征与患病关系挖掘4.1 人群基础画像年龄分布 性别占比python运行plt.figure(figsize(12,10)) # 子图1年龄直方图核密度曲线 plt.subplot(211) plt.hist(df[年龄],bins20) df[年龄].plot(kindkde,secondary_yTrue) plt.title(患者年龄分布直方图核密度图) # 子图2性别饼图 plt.subplot(212) gender_datadf[性别].value_counts() plt.pie(gender_data, autopct%.2f%%, labels[男,女], shadowTrue, explode(0.05,0)) plt.title(数据集性别占比) plt.tight_layout() plt.show()对应可视化图rym {type:ImageRefCard,refs:[问诊 1 - 年龄性别分布图],titles:[年龄分布 性别饼图]}分析结论年龄近似正态分布50-75 岁中老年群体占比最高是心脏病高发人群男性样本 65.98%女性 34.02%男性样本数量显著高于女性。4.2 各临床指标与心脏病诊断分组对比将数据按 ** 阳性患病/ 阴性健康** 分组绘制多子图箱线图直观对比指标差异python运行plt.figure(figsize(20,16)) # 1.年龄vs诊断 plt.subplot(3,3,1) pos_agedf[df[结果]positive][年龄] neg_agedf[df[结果]negative][年龄] plt.boxplot([pos_age,neg_age], labels[阳性,阴性]) plt.title(年龄与心脏病诊断关系) # 2.心率vs诊断 plt.subplot(3,3,2) pos_heartdf[df[结果]positive][心率] neg_heartdf[df[结果]negative][心率] plt.boxplot([pos_heart,neg_heart],labels[阳性,阴性]) plt.title(心率与心脏病诊断关系) # 3.阳性样本性别饼图 plt.subplot(333) pos_datadf[df[结果]positive] gender_pospos_data[性别].value_counts() plt.pie(gender_pos,labels[男,女],autopct%.2f%%) plt.title(确诊心脏病患者性别比例) # 4-8血压、血糖、肌酸激酶、肌钙蛋白分组箱线 ax4plt.subplot(334) df.boxplot(column收缩压,by结果,axax4) ax5plt.subplot(335) df.boxplot(column舒张压,by结果,axax5) ax6plt.subplot(336) df.boxplot(column血糖,by结果,axax6) ax7plt.subplot(337) df.boxplot(column肌酸激酶同工酶,by结果,axax7) ax8plt.subplot(338) df.boxplot(column肌钙蛋白,by结果,axax8) plt.suptitle() plt.show()对应可视化图rym {type:ImageRefCard,refs:[问诊 1 - 多特征分组箱线图],titles:[各指标按患病分组对比图]}关键医学规律挖掘肌酸激酶同工酶、肌钙蛋白两个心肌损伤标志物阳性患者数值显著高于阴性是区分心脏病核心特征患病人群平均年龄略高于健康人群收缩压、血糖在阳性样本整体分布更高存在轻度正相关确诊心脏病患者中男性占比接近 70%男性患病风险样本层面更高。4.3 性别 诊断双维度分组指标分布python运行df.boxplot(column[血糖,年龄,收缩压,舒张压],by[性别,结果],figsize(14,10)) plt.xticks(rotation45) plt.suptitle() plt.show()对应可视化图rym {type:ImageRefCard,refs:[问诊 1 - 双分组箱线图],titles:[性别 诊断双分组指标分布]}五、特征工程与数据集划分5.1 标签二值化建模标准将文本标签positive/negative转为 0/1 二分类数值python运行df[Result_Binary](df[结果]positive).astype(int)5.2 筛选核心预测特征根据 EDA 分析心肌标志物区分度最强选取 4 个核心特征建模性别、年龄、肌酸激酶同工酶、肌钙蛋白python运行features[性别,年龄,肌酸激酶同工酶,肌钙蛋白] Xdf[features].copy() ydf[Result_Binary]5.3 连续特征标准化逻辑回归、SVM 对特征量纲敏感对年龄、两项心肌指标标准化python运行continuous_vars[年龄,肌酸激酶同工酶,肌钙蛋白] X[continuous_vars] X[continuous_vars].astype(float) scalerStandardScaler() X.loc[:,continuous_vars]scaler.fit_transform(X[continuous_vars])5.4 训练集 / 测试集划分8:2 分层抽样分层抽样stratifyy保证训练、测试集患病 / 健康样本比例一致避免类别偏移python运行X_train,X_test,y_train,y_testtrain_test_split(X,y,test_size0.2,random_state15,stratifyy)六、通用模型评估函数统一输出混淆矩阵 ROC封装评估逻辑复用至 5 个模型输出分类报告、混淆矩阵热力图、ROC-AUC 曲线python运行def evaluate_model(model,model_name,X_train,X_test,y_train,y_test): # 模型训练 model.fit(X_train,y_train) # 测试集预测 y_predmodel.predict(X_test) print(f{model_name} 模型评估报告) print(classification_report(y_test,y_pred)) # 绘制混淆矩阵 cmconfusion_matrix(y_test,y_pred) plt.figure(figsize(8,6)) plt.imshow(cm, cmaphot, interpolationnearest) plt.colorbar() for i in range(2): for j in range(2): plt.text(j, i,f{cm[i, j]},hacenter,vacenter,colorwhite,fontsize15) plt.title(f{model_name}混淆矩阵) plt.show() # 绘制ROC曲线、计算AUC if hasattr(model,predict_proba): y_probmodel.predict_proba(X_test)[:,1] else: y_probmodel.decision_function(X_test) fpr, tpr,_ roc_curve(y_test, y_prob) roc_aucauc(fpr,tpr) plt.figure(figsize(8,6)) plt.plot(fpr,tpr,colordarkorange,lw2,labelfROC曲线(面积{roc_auc:.2f})) plt.plot([0,1],[0,1],colornavy,lw2,linestyle--) plt.xlabel(假阳率(FPR)) plt.ylabel(真阳率(TPR)) plt.title(f{model_name}ROC曲线) plt.legend(loclower right) plt.show() return model,roc_auc七、五大分类模型训练与结果对比7.1 逻辑回归基线线性模型python运行lr_modelLogisticRegression(random_state15, class_weightbalanced) lr_model,lr_aucevaluate_model(lr_model,逻辑回归,X_train,X_test,y_train,y_test)结果指标准确率 0.83AUC0.92 混淆矩阵、ROC 曲线rym {type:ImageRefCard,refs:[问诊 1 - 逻辑回归混淆矩阵,问诊 1 - 逻辑回归 ROC],titles:[逻辑回归混淆矩阵,逻辑回归 ROC 曲线]}7.2 决策树单树非线性模型python运行dt_modelDecisionTreeClassifier(random_state15, class_weightbalanced) dt_model,dt_aucevaluate_model(dt_model,决策树,X_train,X_test,y_train,y_test)结果指标准确率 0.98AUC0.98 混淆矩阵 ROC 曲线rym {type:ImageRefCard,refs:[问诊 1 - 决策树混淆 ROC],titles:[决策树混淆矩阵 ROC]}7.3 随机森林集成树模型python运行rf_model RandomForestClassifier(random_state15, class_weightbalanced) rf_model,rf_aucevaluate_model(rf_model,随机森林,X_train,X_test,y_train,y_test)结果指标准确率 0.97AUC0.99 混淆矩阵、ROC 曲线rym {type:ImageRefCard,refs:[问诊 1 - 随机森林混淆矩阵,问诊 1 - 随机森林 ROC],titles:[随机森林混淆矩阵,随机森林 ROC 曲线]}7.4 XGBoost梯度提升树python运行xgb_model XGBClassifier(random_state15, scale_pos_weightsum(y_train0)/sum(y_train1)) xgb_model, xgb_auc evaluate_model(xgb_model,XGBoost,X_train,X_test,y_train,y_test)结果指标准确率 0.98AUC0.99 混淆矩阵 ROC 曲线rym {type:ImageRefCard,refs:[问诊 1-XGBoost 混淆 ROC],titles:[XGBoost 混淆矩阵 ROC]}7.5 SVM 支持向量机python运行svm_model SVC(random_state15,class_weightbalanced,probabilityTrue) svm_model, svm_aucevaluate_model(svm_model,支持向量机,X_train,X_test,y_train,y_test)结果指标准确率 0.83AUC0.92 ROC 曲线rym {type:ImageRefCard,refs:[问诊 1-SVMROC],titles:[SVM 模型 ROC 曲线]}八、模型综合对比与结论8.1 性能汇总表表格模型整体准确率AUC 值特点逻辑回归83%0.92线性基线可解释性强精度偏低SVM83%0.92依赖标准化非线性拟合弱训练慢决策树98%0.98单树简单无标准化需求易轻微过拟合随机森林97%0.99集成学习泛化能力强稳定性高XGBoost98%0.99梯度提升分类精度最高医疗场景最优8.2 实验结论树类集成模型全面优于线性模型随机森林、XGBoost、决策树依靠捕捉心肌标志物与患病的非线性关系AUC、准确率远高于逻辑回归、SVMXGBoost 与随机森林综合性能最优AUC 达到 0.99几乎可以完美区分健康与心脏病患者适合用于临床辅助诊断决策树适合快速落地轻量化场景无需特征标准化、推理速度快单模型准确率 98%部署成本低核心特征验证肌酸激酶同工酶、肌钙蛋白是预测心脏病的决定性指标与临床医学理论完全吻合。8.3 项目拓展优化方向超参数网格搜索 GridSearchCV 优化树模型深度、学习率进一步降低过拟合引入 SHAP 值分析特征重要性增强医疗模型可解释性增加交叉验证 K-fold验证模型泛化能力封装模型为 Flask 简易 Web 接口实现单患者指标在线预测扩充样本量加入胆固醇、心电图等更多临床特征。九、完整项目总结本文完整走完医疗心血管数据集从原始脏数据到多模型对比的全流程解决了医疗数据特有的生理异常值、逻辑错误样本清洗问题通过 EDA 挖掘出心肌损伤标志物与心脏病的强关联规律对比 5 种主流机器学习算法完成二分类建模。 在医疗诊断场景下XGBoost、随机森林具备极高的区分能力可作为医生辅助筛查工具若追求轻量化部署决策树是性价比之选。整套代码完整可复现适合机器学习初学者、课程设计、毕业设计参考。文末附完整源码下载提示

相关新闻

嵌入式硬件设计基石:从MC9S12NE64实战解读芯片电气特性
2026/6/19 16:58:52

嵌入式硬件设计基石:从MC9S12NE64实战解读芯片电气特性

1. 项目概述:为什么电气特性是嵌入式设计的“宪法”干了十几年嵌入式开发,从8位机玩到32位,踩过的坑比写过的代码行数还多。我越来越觉得,看芯片数据手册,最该花时间琢磨的不是那些酷炫的功能模块,而是开头…

阅读更多
【数学建模实战】从生产优化到资源调度:典型真题场景解析与建模思路
2026/6/19 16:58:52

【数学建模实战】从生产优化到资源调度:典型真题场景解析与建模思路

1. 数学建模实战:从生产优化到资源调度 数学建模听起来高大上,但其实就像给现实问题套上一个数学的外套。我在工厂实习时就遇到过这样的问题:生产线上的机器该怎么安排才能最大化产出?原料库存有限的情况下,生产哪些产…

阅读更多
Qt操作Excel工作表进阶:QXlsx Document对象实战指南
2026/6/19 16:58:52

Qt操作Excel工作表进阶:QXlsx Document对象实战指南

1. QXlsx库与Document对象入门指南 如果你正在用Qt开发需要处理Excel数据的应用,QXlsx库绝对是个不可多得的好帮手。这个纯C编写的库不需要依赖Office或WPS,就能轻松读写.xlsx格式文件。我在最近的一个报表管理系统中就深度使用了它,特别是Do…

阅读更多
深入解析S12 PWM模块:从时钟树到16位级联的电机控制实战
2026/6/19 18:58:52

深入解析S12 PWM模块:从时钟树到16位级联的电机控制实战

1. 项目概述与PWM核心价值在嵌入式开发,尤其是电机控制、LED调光、开关电源这些需要精确功率调节的领域,脉宽调制(PWM)技术绝对是工程师手中的一把利器。简单来说,PWM就是通过快速开关数字信号,并精确控制一…

阅读更多
MicroG在HarmonyOS上的签名伪造技术深度解析:实现原理与架构设计
2026/6/19 18:58:52

MicroG在HarmonyOS上的签名伪造技术深度解析:实现原理与架构设计

MicroG在HarmonyOS上的签名伪造技术深度解析:实现原理与架构设计 【免费下载链接】GmsCore Free implementation of Play Services 项目地址: https://gitcode.com/GitHub_Trending/gm/GmsCore 在开源移动生态系统中,MicroG项目作为Google移动服务…

阅读更多
如何在5分钟内快速上手Akagi:终极智能麻将分析工具指南
2026/6/19 18:58:52

如何在5分钟内快速上手Akagi:终极智能麻将分析工具指南

如何在5分钟内快速上手Akagi:终极智能麻将分析工具指南 【免费下载链接】Akagi 支持雀魂、天鳳、麻雀一番街、天月麻將,能夠使用自定義的AI模型實時分析對局並給出建議,內建Mortal AI作為示例。 Supports Majsoul, Tenhou, Riichi City, Amat…

阅读更多
【工程笔记】Tolerance Stack-up 尺寸链计算全流程实操手册:从线性尺寸链到蒙特卡洛仿真
2026/6/19 18:58:52

【工程笔记】Tolerance Stack-up 尺寸链计算全流程实操手册:从线性尺寸链到蒙特卡洛仿真

为什么要系统学公差累加(Tolerance Stack-up)?做机械/结构设计、工艺规划或精密制造的工程师,大多绕不开这个场景:单个零件公差符合图纸,装配后关键尺寸超限了不知道设计要求下来后,各环公差应该…

阅读更多
Superpaper终极指南:免费打造多显示器无缝壁纸体验
2026/6/19 18:58:52

Superpaper终极指南:免费打造多显示器无缝壁纸体验

Superpaper终极指南:免费打造多显示器无缝壁纸体验 【免费下载链接】superpaper A cross-platform multi monitor wallpaper manager. 项目地址: https://gitcode.com/gh_mirrors/su/superpaper Superpaper是一款强大的跨平台多显示器壁纸管理工具&#xff0…

阅读更多
5分钟快速上手:如何用MusicFree插件打造跨平台音乐聚合神器
2026/6/19 17:58:52

5分钟快速上手:如何用MusicFree插件打造跨平台音乐聚合神器

5分钟快速上手:如何用MusicFree插件打造跨平台音乐聚合神器 【免费下载链接】MusicFreePlugins MusicFree播放插件 项目地址: https://gitcode.com/gh_mirrors/mu/MusicFreePlugins MusicFree插件是一个开源的音乐播放器扩展框架,它通过插件化的方…

阅读更多
别再只用BERT了!用Transformers库的AutoModel,5分钟搞定文本相似度计算(附代码对比)
2026/6/17 23:21:18

别再只用BERT了!用Transformers库的AutoModel,5分钟搞定文本相似度计算(附代码对比)

超越BERT:用Transformers库高效实现文本相似度计算的三种实战方案在自然语言处理领域,文本相似度计算是信息检索、问答系统和推荐系统等应用的核心技术。传统方法如TF-IDF或Word2Vec已逐渐被基于Transformer的预训练模型所取代。Hugging Face的Transform…

阅读更多
Prompt Engineering:重构人机协作的工程化方法论
2026/6/18 4:35:02

Prompt Engineering:重构人机协作的工程化方法论

1. 项目概述:这不是“写提示词”,而是重构人机协作的底层逻辑“Prompt Engineering”这个词,这两年被讲得太多,也太轻飘。很多人把它理解成“给AI发指令的技巧”,甚至简化为“多加几个形容词”“换种说法再试一次”。我…

阅读更多
Anthropic提示层归零:模型即协议的工程实践
2026/6/18 15:04:04

Anthropic提示层归零:模型即协议的工程实践

1. 项目概述:这不是一次普通更新,而是一次架构级“蒸发”“Anthropic Just Shipped the Layer That’s Already Going to Zero”——这个标题一出来,我正在调试一个Claude调用链的终端前停了三秒。不是因为震惊,而是因为熟悉&…

阅读更多
AI率高怎么降?10款降AI率网站盘点,含免费方案
2026/6/19 0:58:49

AI率高怎么降?10款降AI率网站盘点,含免费方案

2026年毕业季临近,不少同学的论文焦虑已经从“重复率不达标”转到了“AI率超标”上:好不容易把内容改到逻辑通顺,提交检测却因为几段AI辅助生成的内容、或是表达过于规整被打回,导师要求限期整改,辛苦熬了几个通宵的成…

阅读更多
FIFA 23 Live Editor完全指南:打造你的专属足球世界
2026/6/19 0:58:49

FIFA 23 Live Editor完全指南:打造你的专属足球世界

FIFA 23 Live Editor完全指南:打造你的专属足球世界 【免费下载链接】FIFA-23-Live-Editor FIFA 23 Live Editor 项目地址: https://gitcode.com/gh_mirrors/fi/FIFA-23-Live-Editor 还在为FIFA 23中无法实现的足球梦想而烦恼吗?想要组建那支只存…

阅读更多
EasyLPAC:5个关键步骤掌握专业级eUICC智能卡管理工具
2026/6/19 0:58:49

EasyLPAC:5个关键步骤掌握专业级eUICC智能卡管理工具

EasyLPAC:5个关键步骤掌握专业级eUICC智能卡管理工具 【免费下载链接】EasyLPAC lpac GUI Frontend 项目地址: https://gitcode.com/gh_mirrors/ea/EasyLPAC EasyLPAC是一款专为eUICC智能卡管理设计的图形化界面工具,基于lpac核心构建&#xff0c…

阅读更多
GIT修改用户名
2026/6/17 19:45:33

GIT修改用户名

在GIT中修改用户名可按以下步骤操作: 查看当前git的用户名,使用命令git config --list或git config user.name。修改git用户名,使用命令git config --global user.name "xxx(新的用户名)",将其中…

阅读更多
Win11Debloat:让你的Windows系统重获新生的终极优化工具
2026/6/18 14:35:19

Win11Debloat:让你的Windows系统重获新生的终极优化工具

Win11Debloat:让你的Windows系统重获新生的终极优化工具 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and …

阅读更多
技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践
2026/6/18 15:23:49

技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践

技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter m4s-converter是一个…

阅读更多