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

news2024/11/17 17:51:24

一、引言

前文回顾:

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

【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-docstring
    def __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.coloradmin.cn/o/1419656.html

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

相关文章

启发式搜索(A*、IDDFS、IDA*)

我们在解决图问题的时候,通常需要使用DFS和BFS搜索,可是这两种搜索方式的效率较低,我们会遍历到很多空白节点,有没有办法可以优化这种低效问题呢?今天要推出我们的主角:启发式搜索。 一、A* 什么是A*算法…

关于如何将Win幻兽帕鲁服务端存档转化为单人本地存档的一种方法(无损转移)

本文转自博主的个人博客:https://blog.zhumengmeng.work,欢迎大家前往查看。 原文链接:点我访问 **起因:**最近大火的开放世界缝合体游戏幻兽帕鲁的大火也是引起了博主的注意,然后博主和周边小伙伴纷纷入手,博主也是利…

npm 和 yarn 的使用

安装 yarn npm i yarn -g查看版本 npm -v yarn --version切换 npm/yarn 的下包镜像源 // 查看当前的镜像源 npm config get registry// 切换淘宝镜像源 // 新的淘宝源,旧的淘宝源已于2022年05月31日零时起停止服务 npm config set registry https://registry.…

【英语趣味游戏】填字谜(Crossword)第2天

谜题出处 柯林斯字谜大全(6),Collins——Big Book of Crosswords (Book 6) Puzzle Number: 115 本期单词 横向 1、Fetch (8) 拿,取,8个字母 答案:Retrieve,取到,拿回 5、Common s…

【JaveWeb教程】(34)SpringBootWeb案例之《智能学习辅助系统》的详细实现步骤与代码示例(7)配置文件的设置

目录 SpringBootWeb案例054. 配置文件4.1 参数配置化4.2 yml配置文件4.3 ConfigurationProperties SpringBootWeb案例05 前面我们已经实现了员工信息的条件分页查询以及删除操作,以及实现新增和修改员工。 本节的主要内容: 配置文件的设置 4. 配置文件…

<网络安全>《10 高级威胁检测系统ATD》

1 APT 高级长期威胁(英语:Advanced Persistent Threat,缩写:APT),又称高级持续性威胁、先进持续性威胁等,是指隐匿而持久的电脑入侵过程,通常由某些人员精心策划,针对特…

FairGuard游戏加固入选《CCSIP 2023中国网络安全行业全景册(第六版)》

2024年1月24日, FreeBuf咨询正式发布《CCSIP 2023中国网络安全行业全景册(第六版)》。本次发布的全景图,共计展示20个一级分类、108个细分安全领域,旨在为广大企业提供网络安全产品选型参考,帮助企业了解中国网络安全技术与市场的…

selenium总结-css 定位高级语法

文章目录 推荐的定位方式的优先级定位元素的注意事项(划重点)CSS选择器组成id 选择器class 选择器标签选择器分组选择器属性选择器组合选择符伪类最佳实践 推荐的定位方式的优先级 优先级最高:ID优先级其次:name优先级再次&#…

C++3.0

#include <iostream>using namespace std;class Per//封装一个Per类 { private://表示私有属性string name;//姓名int age;//年龄int *height;//身高double *weight;//体重 public://无参构造函数Per(){cout << "Per::无参构造函数" << endl;}//有…

IndexedDB查询

Indexeddb 创建、增删改查_indexdb 删除表-CSDN博客本地数据库IndexedDB - 学员管理系统之条件筛选&#xff08;四&#xff09;_indexdb条件查询-CSDN博客 <div align"center"><input type"text" id"input_search"> <button id&q…

Vue深入学习3—数据响应式原理

1、数据响应式原理 1.1、MVVM是什么&#xff1f; 简单来说&#xff0c;就是数据变了&#xff0c;视图也会跟着变&#xff0c;首先你得定义一个带有{{ }}的模板Model&#xff0c;当数据中的值变化了&#xff0c;视图View就会跟着变化&#xff1b;视图模型View-model是模板Model和…

从零开始:Linux systemd Unit文件编写全攻略

从零开始&#xff1a;Linux systemd Unit文件编写全攻略 引言基础知识Systemd简介Unit文件的概念Unit文件的类型 Unit文件结构详解基本结构必要的配置项不同类型Unit文件的特殊配置 编写Unit文件的步骤准备工作和环境设置实际编写步骤 实战案例案例背景步骤一&#xff1a;编写服…

第九节HarmonyOS 常用基础组件13-TimePicker

1、描述 时间选择组件&#xff0c;根据指定参数创建选择器&#xff0c;支持选择小时以及分钟。默认以24小时的时间区间创建滑动选择器。 2、接口 TimePicker(options?: {selected?: Date}) 3、参数 selected - Date - 设置选中项的时间。默认是系统当前的时间。 4、属性…

关于C++ 出现Bus error问题的排查

前言 项目代码中经常出现莫名其妙的Bus error问题&#xff0c;并且代码中增加很多try catch 后依然不能将错误捕获&#xff0c;一旦Bus erro出现&#xff0c;进程直接崩溃掉。类似如下这种: 经查询google&#xff0c;出现该问题一般是因为地址未对齐引起的&#xff0c;也就是…

spark window源码探索

核心类&#xff1a; 1. WindowExec 物理执行逻辑入口&#xff0c;主要doExecute()和父类WindowExecBase 2. WindowFunctionFrame 窗框执行抽象&#xff0c;其子类对应sql语句的不同窗框 其中又抽象出BoundOrdering类, 用于判断一行是否在界限内(Bound), 分为RowBoundOrdering…

【Vue.js设计与实现】阅读笔记(持续更新)

从高层设计的角度去探讨框架需要关注的问题。 参考&#xff1a;速读《Vue.js 设计与实现》 - 掘金 (juejin.cn) 文章目录 第一章 权衡的艺术命令式和声明式性能与可维护性的权衡运行时和编译时 第二章&#xff1a;框架设计的核心要素__DEV__&#xff1a;在开发环境中为用户提供…

【AD9361 LVDS 时序图 补充】

ADI 官方图 ​2T2R LVDS 整理补充完整 特别注意调整frame

Visual Studio 2022 C++ 生成dll或so文件在windows或linux下用C#调用

背景 开发中我们基本使用windows系统比较快捷&#xff0c;但是部署的时候我们又希望使用linux比较便宜&#xff0c;硬件产商还仅提供了c sdk&#xff01;苦了我们做二次开发的码农。 方案 需要确认一件事&#xff0c;目前c这门语言不是跨平台的 第一个问题【C生成dll在window…

Unity3d Cinemachine篇(三)— FreeLook

文章目录 前言一、使用FreeLook制造第三人称跟随效果1. 创建一个游戏物体2. 创建FreeLook相机4. 完成 前言 上一期我们简单的使用了Dolly CamerawithTrack相机&#xff0c;这次我们来使用一下FreeLook 一、使用FreeLook制造第三人称跟随效果 1. 创建一个游戏物体 游戏物体比较…

美国将限制中国,使用Azure、AWS等云,训练AI大模型

1月29日&#xff0c;美国商务部在Federal Register&#xff08;联邦公报&#xff09;正式公布了&#xff0c;《采取额外措施应对与重大恶意网络行为相关的国家紧急状态》提案。 该提案明确要求美国IaaS&#xff08;云服务&#xff09;厂商在提供云服务时&#xff0c;要验证外国…