【Python机器学习系列】建立XGBoost模型预测心脏疾病(完整实现过程)

一、引言

前文回顾:

一文彻底搞懂机器学习中的归一化与反归一化问题

【Python机器学习系列】一文彻底搞懂机器学习中表格数据的输入形式(理论+源码)

【Python机器学习系列】一文带你了解机器学习中的Pipeline管道机制(理论+源码)

【Python机器学习系列】一文搞懂机器学习中的转换器和估计器(附案例)

【Python机器学习系列】一文讲透机器学习中的K折交叉验证(源码)

【Python机器学习系列】拟合和回归傻傻分不清?一文带你彻底搞懂它

【Python机器学习系列】建立决策树模型预测心脏疾病(完整实现过程)

【Python机器学习系列】建立支持向量机模型预测心脏疾病(完整实现过程)

【Python机器学习系列】建立逻辑回归模型预测心脏疾病(完整实现过程)

【Python机器学习系列】建立KNN模型预测心脏疾病(完整实现过程)

【Python机器学习系列】建立随机森林模型预测心脏疾病(完整实现过程)

【Python机器学习系列】建立梯度提升模型预测心脏疾病(完整实现过程)

对于表格数据,一套完整的机器学习建模流程如下:

图片

       针对不同的数据集,有些步骤不适用即不需要做,其中橘红色框为必要步骤,由于数据质量较高,本文有些步骤跳过了,跳过的步骤将单独出文章总结!同时欢迎大家关注翻看我之前的一些相关文章。

      XGBoost(eXtreme Gradient Boosting)极致梯度提升,是一种基于GBDT的算法或者说工程实现。XGBoost通过集成多个决策树模型来进行预测,并通过梯度提升算法不断优化模型的性能。XGBoost的基本思想和GBDT相同,但是做了一些优化,比如二阶导数使损失函数更精准;正则项避免树过拟合;Block存储可以并行计算等。本文利用xgboost实现了基于心脏疾病数据集建立XGBoost分类模型对心脏疾病患者进行分类预测的完整过程。

# pip install xgboost
from xgboost.sklearn import XGBClassifier

二、实现过程

1、准备数据

data = pd.read_csv(r'Dataset.csv')
df = pd.DataFrame(data)

df:

图片

数据基本信息:

print(df.head())
print(df.info())
print(df.shape)
print(df.columns)
print(df.dtypes)
cat_cols = [col for col in df.columns if df[col].dtype == "object"] # 类别型变量名
num_cols = [col for col in df.columns if df[col].dtype != "object"] # 数值型变量名

2、提取特征变量和目标变量

target = 'target'
features = df.columns.drop(target)
print(data["target"].value_counts()) # 顺便查看一下样本是否平衡

3、数据集划分

# df = shuffle(df)
X_train, X_test, y_train, y_test = train_test_split(df[features], df[target], test_size=0.2, random_state=0)

4、模型的构建与训练

# 模型的构建与训练
model = xgb.XGBClassifier(n_estimators=100, max_depth=10)
model.fit(X_train, y_train)

参数详解:

import xgboost as xgb
# 参数
class XGBModel(XGBModelBase):# pylint: disable=too-many-arguments, too-many-instance-attributes, missing-docstringdef __init__(self,max_depth: Optional[int] = None,max_leaves: Optional[int] = None,max_bin: Optional[int] = None,grow_policy: Optional[str] = None,learning_rate: Optional[float] = None,n_estimators: int = 100,verbosity: Optional[int] = None,objective: _SklObjective = None,booster: Optional[str] = None,tree_method: Optional[str] = None,n_jobs: Optional[int] = None,gamma: Optional[float] = None,min_child_weight: Optional[float] = None,max_delta_step: Optional[float] = None,subsample: Optional[float] = None,sampling_method: Optional[str] = None,colsample_bytree: Optional[float] = None,colsample_bylevel: Optional[float] = None,colsample_bynode: Optional[float] = None,reg_alpha: Optional[float] = None,reg_lambda: Optional[float] = None,scale_pos_weight: Optional[float] = None,base_score: Optional[float] = None,random_state: Optional[Union[np.random.RandomState, int]] = None,missing: float = np.nan,num_parallel_tree: Optional[int] = None,monotone_constraints: Optional[Union[Dict[str, int], str]] = None,interaction_constraints: Optional[Union[str, Sequence[Sequence[str]]]] = None,importance_type: Optional[str] = None,gpu_id: Optional[int] = None,validate_parameters: Optional[bool] = None,predictor: Optional[str] = None,enable_categorical: bool = False,feature_types: FeatureTypes = None,max_cat_to_onehot: Optional[int] = None,max_cat_threshold: Optional[int] = None,eval_metric: Optional[Union[str, List[str], Callable]] = None,early_stopping_rounds: Optional[int] = None,callbacks: Optional[List[TrainingCallback]] = None,**kwargs: Any,) -> None:

5、模型的推理与评价

y_pred = model.predict(X_test)
y_scores = model.predict_proba(X_test)
acc = accuracy_score(y_test, y_pred) # 准确率acc
cm = confusion_matrix(y_test, y_pred) # 混淆矩阵
cr = classification_report(y_test, y_pred) # 分类报告
fpr, tpr, thresholds = roc_curve(y_test, y_scores[:, 1], pos_label=1) # 计算ROC曲线和AUC值,绘制ROC曲线
roc_auc = auc(fpr, tpr)
plt.figure()
plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic')
plt.legend(loc="lower right")
plt.show()

cm:

图片

cr:

图片

ROC:

图片

作者简介:

读研期间发表6篇SCI数据挖掘相关论文,现在某研究院从事数据算法相关科研工作,结合自身科研实践经历不定期分享关于Python、机器学习、深度学习、人工智能系列基础知识与应用案例。致力于只做原创,以最简单的方式理解和学习,关注我一起交流成长。需要数据集和源码的小伙伴可以关注底部公众号添加作者微信。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/655645.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python】03快速上手爬虫案例三:搞定药师帮

文章目录 前言1、破解验证码2、获取数据 前言 提示:通过用户名、密码、搞定验证码,登录进药师帮网站,然后抓取想要的数据。 爬取数据,最终效果图: 1、破解验证码 使用药师帮测试系统:https://dianrc.ysb…

2024 高级前端面试题之 HTML 「精选篇」

该内容主要整理关于 HTML 的相关面试题,其他内容面试题请移步至 「最新最全的前端面试题集锦」 查看。 HTML模块精选篇 1. 如何理解HTML语义化2. H5的新特性有哪些3. 说一下 HTML5 Drag API4. iframe有那些缺点5. 如何实现浏览器内多个标签页之间的通信6. 简述一下s…

Elasticsearch:如何为 Elastic Stack 配置 AI Assistant

了解并安装 Elastic AI Assistant Elastic 推出了 Observability AI Assistant,这是一款利用生成式 AI 来增强你的 Observability 体验的强大工具。 该 AI 助手由 OpenAI 或 Azure OpenAI 服务的连接器提供支持,可带来上下文洞察和聊天功能,…

104.乐理基础-五线谱-中音谱号、次中音谱号

内容参考于:三分钟音乐社 上一个内容:103.乐理基础-五线谱-低音谱号-CSDN博客 上一个内容练习答案: 常用的谱号就是下图所示的四个,其中高音谱号与低音谱号已经在上一个内容和上上一个内容中写过了,音乐中百分之九十…

html css实现钟表简单移动

文章目录 一、实现钟表简单移动二、HTML三、CSS四、热门文章 一、实现钟表简单移动 下面是一个使用HTML和CSS实现简单移动的钟表的示例代码&#xff1a; <!DOCTYPE html> <html><head><style>.clock {width: 200px;height: 200px;border-radius: 50%…

微服务架构实施攻略:如何选择合适的微服务安全保障策略?

随着业务的快速发展和系统的日益复杂&#xff0c;传统的单体应用逐渐显露出瓶颈&#xff0c;已无法满足现代软件研发的需求。微服务架构作为一种灵活、可扩展的解决方案&#xff0c;通过将复杂系统拆分为一系列小型服务来提高系统的可伸缩性、灵活性和可维护性。在实施微服务架…

【C++历练之路】探秘C++三大利器之一——多态

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; 前言&#x1f354;: 在计算机科学的广袤领域中&#xff0c;C多态性是一门令人着迷的技术艺术&#xff0c;它赋予我们的代码更强大的灵活性和可维护性。想象一下&#xff0c;你正在构建一个程序&#xff0c;需要适应不断…

python3.8 安装缺少ssl、_ctypes模块解决办法

问题 安装pyhton3.8安装默认不依赖ssl 运行Flask项目时报错&#xff1a; Traceback (most recent call last):File "/usr/local/python3/bin/flask", line 8, in <module>sys.exit(main())File "/usr/local/python3/lib/python3.8/site-packages/flask…

电脑文件丢失怎么恢复数据?数据恢复,3个方法!

“我有一份很重要的资料文件保存在电脑上了&#xff0c;但是刚刚发现这些文件莫名其妙丢失了。电脑文件丢失应该怎么恢复数据呀&#xff1f;大家有什么比较好用的方法可以推荐吗&#xff1f;” 在日常生活中&#xff0c;我们经常都需要使用电脑&#xff0c;当然&#xff0c;也会…

虹科干货 | 如何使用nProbe Cento构建100 Gbit NetFlow 传感器

本文是一份全面的指南&#xff0c;解释了如何使用nProbe Cento构建一个高效的100 Gbit NetFlow传感器。旨在帮助大家充分利用NetFlow技术&#xff0c;以监控和分析高速网络流量。 当需要监控分布式网络&#xff0c;了解流经上行链路或关键网段的网络流量时&#xff0c;NetFlow…

TensorFlow2实战-系列教程 总目录

TensorFlow 深度学习 开发环境搭建 全教程 TensorFlow2实战-系列教程 总目录 TensorFlow2实战-系列教程1&#xff1a;回归问题预测TensorFlow2实战-系列教程2&#xff1a;神经网络分类任务TensorFlow2实战-系列教程3&#xff1a;猫狗识别1TensorFlow2实战-系列教程4&#xff1…

Linux系列之查看cpu、内存、磁盘使用情况

查看磁盘空间 df命令用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间&#xff0c;目前还剩下多少空间等信息。使用df -h命令&#xff0c;加个-h参数是为了显示GB MB KB单位&#xff0c;这样更容易查看 Filesystem …

MySQL入门篇(2)-MySQL的安装和配置

MySQL是一种开源的关系型数据库管理系统&#xff0c;它广泛应用于Web开发领域。本文将介绍MySQL的安装和配置过程&#xff0c;并提供详细的示例。 1. 下载MySQL安装程序 首先&#xff0c;我们需要从MySQL官方网站下载适合操作系统的安装程序。MySQL提供了Windows、Linux和Mac…

如何使用手机安装JuiceSSH远程连接本地Linux服务器

⛳️ 推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 文章目录 ⛳️ 推荐1. Linux安装cpolar2. 创建公网SSH连接地址3. JuiceSSH公网远程连接4. 固定连接SSH公网地址5. SSH固定地址…

毕设(一)——概述

文章目录 一、前言二、设计构思2.1 软件构思2.2 硬件构思 三、计划安排四、计划 一、前言 emmmm,我查了查我做的是&#xff0c;井盖侧翻&#xff0c;嗯&#xff0c;外加一些其他传感器&#xff0c;GPS等等吧。用的话&#xff0c;我这边依旧是准备是pico作为主控 二、设计构思…

Flask安装(mac/linux windows)

Python 版本 我们推荐使用最新版本的 Python 。 Flask 支持 Python 3.8 以上版本。 依赖 当安装 Flask 时&#xff0c;以下配套软件会被自动安装。 Werkzeug用于实现 WSGI &#xff0c;应用和服务之间的标准 Python 接口。 Jinja用于渲染页面的模板语言。 MarkupSafe与 Ji…

轻松上手:DataHub 的安装和配置指南

目录 写在开头1. 安装 DataHub 的步骤1.1. 准备工作1.2. 下载 DataHub 的 Docker Compose 文件1.3. 配置 DataHub 参数1.4. 启动 DataHub 容器 2. 配置 DataHub 的基本设置2.1 数据库连接配置2.2 安全设置2.3 用户管理2.4 邮件通知设置2.5 元数据存储设置2.6 Web UI 配置2.7 定…

c++学生系统(gezhengxu2024独创)

前言&#xff1a;实在懒得用vector了&#xff0c;所以没有删除学生&#xff0c;等破300粉丝我就加删除学生。&#xff08;还有亿些问题&#xff09; #include<bits/stdc.h> #include<conio.h> using namespace std; string xue[5001],xingbie[5001]; long int xueh…

猫咪不吃东西怎么办?大多猫咪都爱吃的主食冻干分享

猫咪不吃东西怎么办&#xff1f;遇到这类情况需要主人去观察猫咪的情况&#xff0c;如果猫咪除了不吃猫粮还出现了呕吐、腹泻、体温异常等其他情况就要考虑猫咪是不是生病了。如果排除疾病原因&#xff0c;那猫咪不吃东西怎么办呢&#xff1f;可能是猫粮的口感已经让猫咪感到腻…

图形绘制-仪表盘(3)

本章节我们介绍如何绘制仪表盘内的车速、单位&#xff08;Km/h&#xff09;、标题等信息。 效果如下&#xff1a; 关于通过继承重写QWidget的绘制事件paintEvent()&#xff0c;来绘制仪表盘的基础操作&#xff0c;请看 《图形绘制-仪表盘&#xff08;1&#xff09;-CSDN博客》…