2017-08-11 125 views
0

我要使用xgb.train函数在R上执行xgboost。如何在R中输入xgb.train函数中的数据?

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

但是,当我在我的数据SETM使用此功能我得到一个错误信息:

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)) 
+0

显然,这错误来自于列车具有(见本[问题](非数值变量https://stackoverflow.com/questions/ 38186478 /特殊安装预警致病-包到故障))。您可以添加'read.csv(..,colClasses =“numeric”)'并删除将某些变量转换为因子的行,它应该可以工作。 – Lamia

+0

@Lamia我应该只使用数字变量吗?那么,如何使用因子类型变量呢? –

+0

是的,'xgb.DMatrix'只作为输入数字变量,你不应该将它们转换成因子。 – Lamia

回答

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) 
相关问题