2017-03-12 22 views
7

Ben R. ben bir CSV benim verilerle dosyasını okuyorum yılında XGBoost kullanırken sorun yaşıyorum:R - XGBoost: Hata bina DMatrix

get_data = function() 
{ 
#Loading Data 
path = "dados_eye.csv" 
data = read.csv(path) 

#Dividing into two groups 
train_porcentage = 0.05 
train_lines = nrow(data)*train_porcentage 
train = data[1:train_lines,] 
test = data[train_lines:nrow(data),] 
rownames(train) = c(1:nrow(train)) 
rownames(test) = c(1:nrow(test)) 

return (list("test" = test, "train" = train)) 
} 

Bu fonksiyon

benim main.R Called
lista_dados = get_data() 
#machine = train_svm(lista_dados$train) 
#machine = train_rf(lista_dados$train) 
machine = train_xgt(lista_dados$train) 

train_xgt = function(train_data) 
{ 
data_train = data.frame(train_data[,1:14]) 
label_train = data.frame(factor(train_data[,15])) 

print(is.data.frame(data_train)) 
print(is.data.frame(label_train)) 

dtrain = xgb.DMatrix(data_train, label=label_train) 
machine = xgboost(dtrain, num_class = 4 ,max.depth = 2, 
    eta = 1, nround = 2,nthread = 2, 
    objective = "binary:logistic") 

return (machine)  
} 

Bu Hata olduğunu sorun train_xgt burada edilmektedir:

[email protected]:~/Documents/EEG_DATA/Dados_Eye$ Rscript main.R

[1] TRUE

[1] TRUE

Error in xgb.DMatrix(data_train, label = label_train) :
xgb.DMatrix: does not support to construct from list Calls: train_xgt -> xgb.DMatrix Execution halted [email protected]:~/Documents/EEG_DATA/Dados_Eye$

Gördüğünüz gibi, bunlar her ikisi de DataFrames'dir.

Neyi yanlış yaptığımı bilmiyorum, lütfen yardım edin!

+2

Eğer 'data.matrix()' kullanarak 'data.frame' girdi neyi dönüştürmek olur? xgboost data.frame'den hoşlanmayabilir –

cevap

1

Tüm sütunların içinde sayısal veriler olup olmadığını kontrol edin. Bunun nedeni, bir matrise dönüştürülemeyecek faktör/karakter olarak saklanan verilere sahip bir sütuna sahip olmanız olabilir. Faktör değişkenleriniz varsa, bunları bir tek kodlama ile kukla değişkenlere dönüştürmek için kullanabilirsiniz.

3

Sadece dataframe as.matrix() kullanarak ilk matrix ve sonra xgb.Dmatrix geçmek dönüştürmek()