使用XGBoost仅需简单调用xgboost包,需要注意的一点是数据需要转化为xgb.DMatrix()格式。
调用iris数据集
library(datasets)
library(xgboost)
n<-dim(iris)[1] #样本数
p<-dim(iris)[2]-1 #特征数
k<-dim(table(iris$Species)) #类别数
划分训练集测试集,并处理数据格式
i<-sample(n,n) #打乱样本编号,用于划分训练集测试集
#训练集取80%的样本
data_train<-as.matrix(iris[i[1:(0.8*n)],-(p+1)]) #训练集数据,需转为matrix类型
label_train<-as.numeric(iris[i[1:(0.8*n)],(p+1)]) #训练集标签,需转化为数组类型
#训练集取20%的样本
data_test<-as.matrix(iris[i[(0.8*n+1):n],-(p+1)]) #测试集数据,需转为matrix类型
label_test<-as.numeric(iris[i[(0.8*n+1):n],(p+1)]) #测试集标签,需转化为数组类型
#xgb需要转化格式
dtrain <- xgb.DMatrix(data = data_train, label = label_train)
dtest <- xgb.DMatrix(data = data_test, label =label_test)
调用xgboost函数进行训练和预测
iris数据有三类,故使用多类别的xgboost,objective参数为’multi:softmax’
(若是两分类问题则objective=‘binary:logistic’)
xgb <- xgboost(data = dtrain,max_depth=6, eta=0.5, objective='multi:softmax',num_class=k, nround=25)
#预测训练集
pre_train_xgb <- round(predict(xgb,newdata = dtrain))
error_trian<-1-sum(pre_train_xgb==label_train)/n/0.8 #训练集错判率
#预测测试集
pre_test_xgb <- round(predict(xgb,newdata = dtest))
error_test<-1-sum(pre_test_xgb==label_test)/n/0.2 #测试集错判率