我将使用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))
答案 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
这会创建虚拟变量cyl6
和cyl8
,其中4个汽缸车辆将成为基本组(cyl6=0
和cyl8=0
)。
然后你可以将这个矩阵传递给xgb.DMatrix
函数:
d_train<-xgb.DMatrix(x.train,label=my.dat$mpg)