R语言应用xgboost进行机器学习(2)

news2024/12/26 22:00:56

XGBoost 机器学习模型是一种高效且可扩的展的机器学习分类器,由 Chen 和 Guestrin 在 2016 年推广。XGBoost原理是是在决策树的基础上产生迭代,它以 boosting 的方式结合了多个决策树。通常创建每棵新树是为了通过梯度提升来减少先前模型的误差,误差指的是实际值和预测值之间的差异。把误差作为协变量参与下一个模型的预测,反复执行这个过程,降低出错率,直到决策树指定阈值,模型已经被训练成功。XGBoost 具有与梯度提升相同的原理,它使用提升次数、学习率、二次采样率和最大树深度来控制过度拟合并增强更好的性能.
在这里插入图片描述
在既往文章中,我们已经介绍R语言应用xgboost进行机器学习的基本操作,今天我们依据论文:何玉花, 周梦林, 徐建云,等. 应用机器学习方法建立大于胎龄儿预测模型[J]. 现代妇产科进展, 2019.
来介绍一下xgboost进行机器学习预测,继续使用我们的体检数据,先导入数据

library(xgboost)
bc<-read.csv("E:/r/test/demo.csv",sep=',',header=TRUE)

在这里插入图片描述
数据变量很多,我解释几个我等下要用的,HBP:是否发生高血压,结局指标,AGE:年龄,是我们的协变量,SEX:性别等。公众号回复:体检数据,可以获得数据。
我们用不到这么多变量取一部分变量来建模

bc<-bc[,c("HBP","SEX","AGE","FEV1","OCCU","COUGH","EDU")]

删除缺失变量,这步是必须的

bc <- na.omit(bc)

分类变量转化成因子,这里注意一下,结局变量不能转成因子

bc$SEX<-as.factor(bc$SEX)
bc$OCCU<-as.factor(bc$OCCU)
bc$EDU<-as.factor(bc$EDU)

先把数据分成训练集和预测集

set.seed(12345)
tr1<- sample(nrow(bc),0.8*nrow(bc))##随机无放抽取
bc_train <- bc[tr1,]#70%数据集
bc_test<- bc[-tr1,]#30%数据集

把训练集转变格式

x = model.matrix(HBP~.,bc_train)[,-1]
data_train <- xgb.DMatrix(x , label =as.numeric(bc_train$HBP))#构造模型需要的xgb.DMatrix对象,处理对象为稀疏矩阵

在测试集也是要同样的改变格式

x1 = model.matrix(HBP~.,bc_test)[,-1]
model_martix_bc_test<-model.matrix(HBP~.,bc_test)[,-1]
data_test <- xgb.DMatrix(x1 , label =as.numeric(bc_test$HBP))#构造模型需要的xgb.DMatrix对象,处理对象为稀疏矩阵

建立xgboost模型

xgb <- xgboost(data = data_train,max_depth=6, eta=0.5,  objective='binary:logistic', nround=25)

在测试集上预测

pre_xgb = round(predict(xgb,newdata = data_test))

输出混淆矩阵的预测结果值,表示预测值和真实值的对比,我们这里0预测错了9个,1预测错了17个,

table(bc_test$HBP,pre_xgb,dnn=c("真实值","预测值"))

在这里插入图片描述
绘制ROC曲线

library(pROC)
xgboost_roc <- roc(bc_test$HBP,as.numeric(pre_xgb))
plot(xgboost_roc, print.auc=TRUE, auc.polygon=TRUE, 
     grid=c(0.1, 0.2),grid.col=c("green", "red"), 
     max.auc.polygon=TRUE,auc.polygon.col="skyblue", 
     print.thres=TRUE,main='xgboost模型ROC曲线')

在这里插入图片描述
这里ROC曲线得出了模型的各项指标指标,可以放在论文中,
在论文:何玉花, 周梦林, 徐建云,等. 应用机器学习方法建立大于胎龄儿预测模型[J]. 现代妇产科进展, 2019.中,还使用Logistic 回归模型和XGBoost 模型进行对比,比较模型优劣性,我们这里也比较一下,先导入R包

library(InformationValue)

建立模型

f2<-glm(HBP~ SEX+OCCU+EDU,family = binomial(link = logit), data = bc_train)
summary(f2)

得出预测值

bc_test$pre<-round(predict(f2,newdata = bc_test))
pre<-round(predict(f2,newdata = bc_test))

表格显示真实和预测值

table(bc_test$HBP,pre,dnn=c("真实值","预测值"))

使用混淆矩阵进行分类

confusionMatrix(bc_test$HBP,pre)#使用混淆矩阵进行分类

建立ROC并绘图

roc1<-roc(as.ordered(bc_test$HBP) ,as.ordered(bc_test$pre))
plot(roc1,print.auc=T, auc.polygon=T, grid=c(0.1, 0.2), grid.col=c("green","red"), 
     max.auc.polygon=T, auc.polygon.col="skyblue",print.thres=T)

在这里插入图片描述
可以看出来,在验证集中Logistic 回归模型的AUC没有XGBoost 模型的高,到此我们已经完全复现了论文:何玉花, 周梦林, 徐建云,等. 应用机器学习方法建立大于胎龄儿预测模型[J]. 现代妇产科进展, 2019.的核心结果,感兴趣的可以自己取研究一下论文。
Logistic 回归模型和XGBoost 模型的ROC曲线也可以绘制在同一张图中,方法可以参看我的既往文章:《R语言基于ggplot绘制多条ROC曲线(2)》。
在这里插入图片描述
OK,本文结束。

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

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

相关文章

(day4) 自学Java——字符串

ctrlaltT 选择语句包裹 目录 1.API 2.String创建 3.字符串的比较 4.字符串——练习 (1):用户登录 (2)遍历字符串和统计字符个数 (3)字符串拼接和反转 (4)金额转换 (5)手机号屏蔽&#xff0c;游戏敏感词替换 5.StringBuilder 6.字符串相关类的底层原理 7.较难练习 …

苹果手机发热发烫怎么办?常见原因及解决办法

很多小伙伴都喜欢使用苹果手机&#xff0c;有时候正在玩着苹果手机的时候&#xff0c;发现自己的苹果手机温度很高&#xff0c;很烫手&#xff0c;这是怎么一回事呢&#xff1f;苹果手机发热发烫怎么办&#xff1f;别担心&#xff0c;下面跟着小编一起来看看苹果手机发热发烫常…

Java之集合概述、ArrayList的使用、常见API和集合案例

目录集合概述总结ArrayList集合快速入门总结ArrayList对于泛型的支持总结ArrayList常用API、遍历集合案例遍历并删除元素值总结存储自定义类型的对象元素搜索集合概述 总结 1、数组和集合的元素存储的个数问题? 数组定义后类型确定&#xff0c;长度固定集合类型可以不固定&a…

MyBatis 动态SQL使用

动态 sql 是Mybatis的强⼤特性之⼀&#xff0c;能够完成不同条件下不同的 sql 拼接。 1.<if>标签 运行结果&#xff1a; 2.<trim>标签 之前的插⼊⽤户功能&#xff0c;只是有⼀个 photo 字段可能是选填项&#xff0c;如果有多个字段&#xff0c;⼀般考虑使⽤&l…

VS Code安装教程

一、下载 1、官网 下载地址 2、下载 根据自己电脑型号下载&#xff0c;此处以Windows为例。 二、安装 1、下载完成后&#xff0c;直接点击安装包安装&#xff0c;即可。 2、开始安装&#xff0c;然后下一步 3、可以在此处自定义地址&#xff0c;然后下一步 4、默认设置&am…

数据结构课程设计

数据结构课程设计 文章目录数据结构课程设计1.1问题描述1.2需求分析1.3概要设计1.4详细设计1.5调试分析1.6测试结果1.7参考文献1.8源码1.1问题描述 编制一个能演示执行集合的交、并和差运算的程序。 要求&#xff1a; 集合元素用小写英文字母&#xff0c;执行各种操作应以对话…

iOS 系统校园无线WIFI认证上网指南

无为WiFi介绍一下IOS手机怎么连接校园网&#xff0c;本介绍为普通途径连接使用校园网&#xff0c;想了解绕过校园网请看其他贴文。1. 打开无线网络&#xff08;WLAN&#xff09;开关2. 连接校园无线WiFi网络进入“设置”->“无线局域网”->在无线WiFi信号列表中选择“SWJ…

【从零开始学习深度学习】40. 算法优化之AdaGrad算法介绍及其Pytorch实现

之前介绍的梯度下降算法中&#xff0c;目标函数自变量的每一个元素在相同时间步都使用同一个学习率来自我迭代。例如&#xff0c;假设目标函数为fff&#xff0c;自变量为一个二维向量[x1,x2]⊤[x_1, x_2]^\top[x1​,x2​]⊤&#xff0c;该向量中每一个元素在迭代时都使用相同的…

线程安全详解

线程安全 线程安全是多线程编程时的计算机程序代码中的一个概念。在拥有共享数据的多条线程并行执行的程序中&#xff0c;线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行&#xff0c;不会出现数据污染等意外情况。 多个线程访问同一个对象时&#xff0c;如…

【docker11】docker安装常用软件

docker安装常用软件 1.安装软件说明 框架图 总体步骤&#xff1a; 搜索镜像拉去镜像查看镜像启动镜像 - 服务端口映射停止容器移除容器 1.安装tomcat docker hub上查找tomcat镜像 从docker hub上拉取tomcat镜像到本地 docker images查看是否有拉取到的tomcat 使用to…

Spring Security 导致 Spring Boot 跨域失效问题

1、CORS 是什么首先我们要明确&#xff0c;CORS 是什么&#xff0c;以及规范是如何要求的。这里只是梳理一下流程。CORS 全称是 Cross-Origin Resource Sharing&#xff0c;直译过来就是跨域资源共享。要理解这个概念就需要知道域、资源和同源策略这三个概念。域&#xff0c;指…

sahrding-jdbc的雪花算法取模为0或1的问题

工作时无意间发现sahrding-jdbc使用雪花算法生成的id 在某一业务分库分表 永远在那两个库表里面,排查后这里做下分享 环境、配置、问题介绍 16库16表使用的是org.apache.shardingsphere.core.strategy.keygen下面generateKey生成id分库表算法是对16取模生成数据永远在0库0表 0…

如何有效的防护暴力破解和撞库攻击

在网络威胁领域&#xff0c;暴力破解攻击仍然是网络犯罪分子非常喜爱且有利可图的攻击方法。&#xff0c;黑客通过收集互联网已泄露的用户和密码信息&#xff0c;生成对应的字典表&#xff0c;由于许多用户重复使用相同的用户名和密码&#xff0c;攻击者可以使用撞库攻击获得对…

前缀和算法

目录1.概述2.代码实现2.1.一维前缀和2.2.二维前缀和3.应用本文参考&#xff1a; LABULADONG 的算法网站 1.概述 前缀和算法分为一维和二维&#xff0c;一维前缀和可以快速求序列中某一段的和&#xff0c;而二维前缀和可以快速求一个矩阵中某个子矩阵的和。 2.代码实现 2.1.一…

约拍小程序开发,优化约拍产业路径

随着网红、直播经济的发展&#xff0c;年轻群体对于拍摄服务的需求正在急速增长&#xff0c;与此同时该群体用户又极具个性&#xff0c;很多传统影楼拍摄价格高、拍摄风格固定化、等待时间久&#xff0c;个人摄影师宣传推广难度又大&#xff0c;导致拍摄需求被抑制&#xff0c;…

_Linux多线程-基础篇

文章目录1. 什么是线程Linux中的线程叫做轻量级进程&#xff08;LWP&#xff09;2. 线程的优点3. 线程的缺点4. 线程异常5. 线程用途6. Linux进程VS线程单进程7. 总结线程在进程内部执行是OS调度的基本单位。不同视角看待进程轻量级进程1. 什么是线程 在一个程序里的一个执行路…

【Cfeng Work】 Open API的intro和 梳理

OpenAPI 开放平台 内容管理Open API intro腾讯云OpenAPIOpenAPI请求API密钥管理云API签名过程拼接规范请求串 CanonicalRequest拼接待签名字符串计算签名拼接到Authorization中云API签名失败规范Token 和 长期密钥公共参数OpenApi设计AppId、AppSecretsign签名timestamp 时间戳…

制造服务行业需要项目管理软件吗?

伴随着时代的快速发展&#xff0c;电子制造服务行业也正在飞速发展&#xff0c;在日新月异得时代步伐下&#xff0c;科学得管理方法和现代化得管理工具相结合&#xff0c;保证企业得进步与发展。项目管理工具通过构造高效统一的项目管理平台&#xff0c;优化企业管理中存在的问…

win10 conda安装labme安装和使用

1、安装conda 在WIN10中配置conda 1.1miniconda下载 https://docs.conda.io/en/latest/miniconda.html 可以任意选择对应的版本&#xff0c;安装时选择配置路径&#xff0c;以免后期重复配置环境。 1.2.2 在环境变量中添加路径 Win R&#xff0c;打开运行&#xff0c;输入…

在ubuntu系统上用pyinstaller加密打包yolov5项目代码的详细步骤

目录0. 背景1. 创建虚拟环境2. pyinstaller打包2.1. 生成并修改spec文件2.2. 重新生成二进制文件3. 测试4. 加密打包4.1. 创建入口函数main.py4.2. 修改detect.py4.3. 加密生成main.spec文件4.4. 修改main.spec文件4.5. 生成二进制文件4.6. 测试0. 背景 最近需要在ubuntu 18.0…