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

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,本文结束。

  • 4
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天桥下的卖艺者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值