R语言:xgboost算法的实现——xgboost包

版权声明:未经允许,禁止转载 https://blog.csdn.net/weixin_43216017/article/details/87905163

xgboost算法可以说是一个比较新兴的算法,效果也非常好,在Kaggle上已经有不少例子说明其算法的优越性甚至超过了随机森林算法。

本文将主要介绍xgboost算法的R语言实现。使用的是xgboost包中的xgboost函数。


数据简介

本文数据选择了红酒质量分类数据集,这是一个很经典的数据集,原数据集中“质量”这一变量取值有{3,4,5,6,7,8}。为了实现二分类问题,我们添加一个变量“等级”,并将“质量”为{3,4,5}的观测划分在等级0中,“质量”为{6,7,8}的观测划分在等级1中。

数据下载戳我

因变量:等级

自变量:非挥发性酸性、挥发性酸性、柠檬酸、剩余糖分、氯化物、游离二氧化硫、二氧化硫总量、浓度、pH、硫酸盐、酒精

library(openxlsx)
wine = read.xlsx("C:/Users/Mr.Reliable/Desktop/classification/winequality-red.xlsx") 
#将数据集分为训练集和测试集,比例为7:3
train_sub = sample(nrow(wine),7/10*nrow(wine))
train_data = wine[train_sub,]
test_data = wine[-train_sub,]

xgboost的实现

R包下载

install.packages('xgboost')

实现xgboost

数据预处理

xgboost包中的xgboost函数对于数据格式有所要求,在使用xgboost函数之前,我们需要先对数据进行预处理。

library(Matrix)
####训练集的数据预处理
# 将自变量转化为矩阵
traindata1 <- data.matrix(train_data[,c(1:11)]) 
# 利用Matrix函数,将sparse参数设置为TRUE,转化为稀疏矩阵
traindata2 <- Matrix(traindata1,sparse=T) 
traindata3 <- train_data[,13]
# 将自变量和因变量拼接为list
traindata4 <- list(data=traindata2,label=traindata3) 
# 构造模型需要的xgb.DMatrix对象,处理对象为稀疏矩阵
dtrain <- xgb.DMatrix(data = traindata4$data, label = traindata4$label) 

####测试集的数据预处理
# 将自变量转化为矩阵
testset1 <- data.matrix(test_data[,c(1:11)]) 
# 利用Matrix函数,将sparse参数设置为TRUE,转化为稀疏矩阵
testset2 <- Matrix(testset1,sparse=T) 
# 将因变量转化为numeric
testset3 <- test_data[,13]
# 将自变量和因变量拼接为list
testset4 <- list(data=testset2,label=testset3) 
# 构造模型需要的xgb.DMatrix对象,处理对象为稀疏矩阵
dtest <- xgb.DMatrix(data = testset4$data, label = testset4$label) 
xgboost函数

xgboost参数有很多,这里我们简单介绍常用并且关键的参数:

参数 意义
silent 默认值是0,您需要指定0连续打印消息,静默模式1。
booster 默认值是gbtree,你需要指定要使用的上升模型:gbtree(树)或gblinear(线性函数)。
eta 默认值设置为0.3。您需要指定用于更新步长收缩来防止过度拟合。每个提升步骤后,我们可以直接获得新特性的权重。实际上 eta 收缩特征权重的提高过程更为保守。范围是0到1。低η值意味着模型过度拟合更强。
max_depth 默认值设置为6,您需要指定一个树的最大深度。参数范围是1到 \infty
objective 选择’binary:logistic’
nround 迭代次数
xgb <- xgboost(data = dtrain,max_depth=6, eta=0.5,  objective='binary:logistic', nround=25)

xgboost函数的参数

ROC曲线和AUC值

#在测试集上预测
pre_xgb = round(predict(xgb,newdata = dtest))
#输出混淆矩阵
table(test_data$等级,pre_xgb,dnn=c("真实值","预测值"))
xgboost_roc <- roc(test_data$等级,as.numeric(pre_xgb))
#绘制ROC曲线和AUC值
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

猜你喜欢

转载自blog.csdn.net/weixin_43216017/article/details/87905163
今日推荐