2017-08-11 27 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) 
相關問題