2017-03-12 13 views
7

मैं आर मैं एक सीएसवी मेरे डेटा के साथ फ़ाइल पढ़ रहा हूँ में XGBoost उपयोग करने में समस्या हो रहा है:आर - XGBoost: त्रुटि इमारत 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)) 
} 

इस समारोह मेरी main.R

कहा जाता है
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)  
} 

यह त्रुटि है समस्या train_xgt में यहाँ है:

[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$

जैसा कि आप देख सकते हैं, वे दोनों डेटाफ्रेम हैं।

मुझे नहीं पता कि मैं क्या गलत कर रहा हूं, कृपया मदद करें!

+2

क्या आप 'data.frame' इनपुट का उपयोग' data.matrix() 'परिवर्तित करता है, तो? xgboost डेटा.फ्रेम पसंद नहीं हो सकता है –

उत्तर

1

जांचें कि क्या सभी कॉलम में संख्यात्मक डेटा है- मुझे लगता है कि ऐसा इसलिए हो सकता है क्योंकि आपके पास कुछ कॉलम है जिसमें डेटा को कारकों/वर्णों के रूप में संग्रहीत किया गया है जो यह मैट्रिक्स में कनवर्ट नहीं कर पाएंगे। यदि आपके पास कारक चर हैं, तो आप उन्हें डमी चर में बदलने के लिए एक-हॉट एन्कोडिंग का उपयोग कर सकते हैं।

3

बस dataframe as.matrix() का उपयोग कर पहली मैट्रिक्स और फिर xgb.Dmatrix को पारित करने के लिए परिवर्तित()

संबंधित मुद्दे