web-dev-qa-db-fra.com

R - XGBoost: Erreur lors de la construction de DMatrix

J'ai du mal à utiliser le XGBoost dans R. Je lis un fichier CSV avec mes données:

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))
}

Cette fonction est appelée ma principale.

lista_dados = get_data()
#machine = train_svm(lista_dados$train)
#machine = train_rf(lista_dados$train)
machine = train_xgt(lista_dados$train)

Le problème est ici dans le train_xgt

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)    
}

C'est l'erreur:

becchi @ ubuntu: ~/Documents/EEG_DATA/Dados_Eye $ Rscript main.R

[1] VRAI

[1] VRAI

Erreur dans xgb.DMatrix (data_train, label = label_train):
xgb.DMatrix: ne prend pas en charge la construction à partir de la liste Appels: train_xgt -> xgb.DMatrix Exécution arrêtée becchi @ ubuntu: ~/Documents/EEG_DATA/Dados_Eye $

Comme vous pouvez le voir, ce sont deux DataFrames.

Je ne sais pas ce que je fais mal, aidez-moi!

12

Convertissez simplement la trame de données en matrice en utilisant d'abord as.matrix() puis passez à xgb.Dmatrix().

15
ad28

"Comme vous pouvez le voir, ce sont tous les deux des DataFrames." -Gabriel Chaves Becchi

Une trame de données n'est qu'une liste de vecteurs. Cela pourrait être la raison pour laquelle vous voyez "liste".

1
Nigel Tufnel

Vérifiez si toutes les colonnes contiennent des données numériques. Je pense que cela pourrait être dû au fait que certaines colonnes contiennent des données stockées sous forme de facteurs/caractères qu'elle ne pourra pas convertir en matrice. si vous avez des variables de facteur, vous pouvez utiliser un codage à chaud pour les convertir en variables factices.

1
bia