Xgboost是Boosting算法的其中一种,Boosting算法的思想是将许多弱分类器集成在一起,形成一个强分类器。因为Xgboost是一种提升树模型,所以它是将许多树模型集成在一起,形成一个很强的分类器。
我目前整合了多个R包,编写了scixgboost函数,以xgboost包为支持,可以轻松进行xgboost分析,下面我来演示一下,先导入R包和数据
library(sciml)
library(scitable)
bc<-read.csv("E:/r/test/demo.csv",sep=',',header=TRUE)
bc <- na.omit(bc)
bc<-bc[,c("HBP","SEX","AGE","FEV1","OCCU","COUGH","EDU")]
数据变量很多,我解释几个我等下要用的,HBP:是否发生高血压,结局指标,AGE:年龄,是我们的协变量,BMI肥胖指数,FEV1肺活量指标,WEIGHT体重,“SBP”,“DBP”:收缩压和舒张压。公众号回复:体检数据,可以获得数据。
整理数据,主要是对数据检查,把分类变量转成因子
out2<-organizedata2(data = bc,username=username,token=token,explore = T)
提取整理好的数据
data<-out2[["data"]]
allVars<-out2[["allVars"]]
fvars<-out2[["factorvarout"]]
对数据3:7划分
set.seed(123)
tr1<- sample(nrow(data),0.7*nrow(data))##随机无放抽取
data_train <- data[tr1,]#70%数据集
data_test<- data[-tr1,]#30%数据集
生成模型
out<-scixgboost(data = data_train,y="HBP",var = allVars,username=username,token=token)
如果想看验证集的情况,需要加入验证集数据,如我就不放了,后面视频有
out<-scixgboost(data = data_train,datatest = data_test,y="HBP",var = allVars,username=username,token=token)
如果需要绘制roc曲线,可以把模型提取出来
fitxgboot<-out[["fitxgboot"]]
提取后绘制曲线
sciroc(fit=fitxgboot,newdata = data_train)
查看验证集roc
sciroc(fit=fitxgboot,newdata = data_test)
咱们也可以想sci文章中,把多个模型roc合并一起,我简单演示一下
我们先要把多个模型建立起来
###随机森林
out<-scirandomForest(data=data_train,y="HBP",username=username,token=token,onlygetfit = T)
fitForest<-out[["fit"]]
##支持向量机
out2<-scisvm(data = data_train,y="HBP",var = allVars,username=username,token=token)
fitsvm<-out2[["fit"]]
##逻辑回归
fit2<- glm(HBP ~ SEX + AGE + FEV1+ OCCU+COUGH+EDU,family = binomial(link = logit), data = data_train)
##xgboost
out3<-scixgboost(data = data_train,y="HBP",var = allVars,username=username,token=token)
fitxgboot<-out3[["fitxgboot"]]
建立数据列表
newdata<-list(data_train,data_train,data_train,data_train)
绘图
out4<-m.sciroc(fitForest,fitsvm,fit2,fitxgboot,newdata = newdata)
out4[["p"]]
在测试集绘图
newdata<-list(data_test,data_test,data_test,data_test)
out4<-m.sciroc(fitForest,fitsvm,fit2,fitxgboot,newdata = newdata)
out4[["p"]]
提取auc值重新绘图
rocauc<-out4[["rocauc"]]out5<-m.sciroc(fitForest,fitsvm,fit2,fitxgboot,newdata = newdata,legend.name =rocauc,legend.title = "模型种类")out5[["p"]]
这里就结束了,接下来会进一步完善sciml的一些相关功能,比如决策曲线绘制和下面这种图的绘制
文字有点快,下面视频更详细精彩
sciml包scixgboost函数发布,轻松完成机器学习xgboost分析