web-dev-qa-db-ja.com

R-XGBoost:DMatrixの構築エラー

RでXGBoostを使用するのに問題があります。自分のデータを含むCSVファイルを読み込んでいます:

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

この関数はmy the 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にあります

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

これはエラーです:

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

[1] TRUE

[1] TRUE

Xgb.DMatrix(data_train、label = label_train)のエラー:
xgb.DMatrix:リストからの構築をサポートしていません。呼び出し:train_xgt-> xgb.DMatrix

ご覧のとおり、どちらもDataFrameです。

私が間違っていることを私は知らない、助けてください!

12

最初にas.matrix()を使用してデータフレームをマトリックスに変換してから、xgb.Dmatrix()に渡します。

15
ad28

「ご覧のとおり、どちらもデータフレームです。」 -ガブリエル・シャベス・ベッキ

データフレームは単なるベクトルのリストです。 「リスト」が表示される理由かもしれません。

1
Nigel Tufnel

すべての列に数値データが含まれているかどうかを確認します。これは、行列に変換できないファクター/文字としてデータが格納されている列があるためだと思います。因子変数がある場合は、ワンホットエンコーディングを使用してダミー変数に変換できます。

1
bia