如何在R中的xgb.train函数中输入数据?

时间:2017-08-11 00:03:36

标签: r xgboost training-data gbm

我将使用xgb.train函数在R上执行xgboost。

为了使用xgb.train函数,我知道必须使用xgb.DMatrix函数转换输入数据。

但是当我在我的数据集中使用此函数时,我收到一条错误消息:

Error in xgb.DMatrix(data = as.matrix(train)) : 
  [09:01:01] amalgamation/../dmlc-core/src/io/local_filesys.cc:66: LocalFileSystem.GetPathInfo 1 Error:No such file or directory

以下是我的完整R代码。要使用输入数据,如何转换输入数据?

credit<-read.csv("http://freakonometrics.free.fr/german_credit.csv", header=TRUE)
F=c(1,2,4,5,7,8,9,10,11,12,13,15,16,17,18,19,20,21)
for(i in F) credit[,i]=as.factor(credit[,i])
str(credit)


library(caret)
set.seed(1000)
intrain<-createDataPartition(y=credit$Creditability, p=0.7, list=FALSE) 
train<-credit[intrain, ]
test<-credit[-intrain, ]

d_train<-xgb.DMatrix(data=as.matrix(train))

1 个答案:

答案 0 :(得分:0)

如果您仍想使用因子,则应使用model.matrix()函数将因子转换为虚拟变量。

例如:

my.dat <- mtcars[c("mpg","cyl","disp")]
my.dat$cyl <- as.factor(my.dat$cyl)
# Convert data frame to X matrix
x.train <- model.matrix(mpg~.,data=my.dat)
head(x.train)

输出:

                  (Intercept) cyl6 cyl8 disp
Mazda RX4                   1    1    0  160
Mazda RX4 Wag               1    1    0  160
Datsun 710                  1    0    0  108
Hornet 4 Drive              1    1    0  258
Hornet Sportabout           1    0    1  360
Valiant                     1    1    0  225

这会创建虚拟变量cyl6cyl8,其中4个汽缸车辆将成为基本组(cyl6=0cyl8=0)。

然后你可以将这个矩阵传递给xgb.DMatrix函数:

d_train<-xgb.DMatrix(x.train,label=my.dat$mpg)