web-dev-qa-db-ja.com

エラー:キャレットでTrainを使用する場合、nrow(x)== nはTRUEではありません

私は次のようなトレーニングセットを持っています

_Name       Day         Area         X    Y    Month Night
ATTACK    Monday   LA           -122.41 37.78   8      0
VEHICLE  Saturday  CHICAGO      -1.67    3.15   2      0
MOUSE     Monday   TAIPEI       -12.5    3.1    9      1
_

Nameは結果/従属変数です。 NameArea、およびDayを因数に変換しましたが、MonthおよびNightに変換する必要があるかどうかはわかりませんでした。 、それぞれ1〜12と0-1の整数値のみを取ります。

次に、データを行列に変換します

_ynn <- model.matrix(~Name , data = trainDF)
mnn <- model.matrix(~ Day+Area +X + Y + Month + Night, data = trainDF)
_

次に、パラメーターの調整をセットアップします

_nnTrControl=trainControl(method = "repeatedcv",number = 3,repeats=5,verboseIter = TRUE, returnData = FALSE, returnResamp = "all", classProbs = TRUE, summaryFunction = multiClassSummary,allowParallel = TRUE)
nnGrid = expand.grid(.size=c(1,4,7),.decay=c(0,0.001,0.1))
model <- train(y=ynn, x=mnn, method='nnet',linout=TRUE, trace = FALSE, trControl = nnTrControl,metric="logLoss", tuneGrid=nnGrid)
_

ただし、_model<-train_に対してエラーError: nrow(x) == n is not TRUEが発生します

xgboostの代わりにnnetを使用した場合にも、同様のエラーが発生します

誰がこれを引き起こしているのか知っていますか?

8
user5739619

yは、行列ではなく、各サンプルの結果を含む数値または因子ベクトルである必要があります。使用する

train(y = make.names(trainDF$Name), ...)

役立つ、ここでmake.names値を変更して、有効な変数名になるようにします。

12
Julius Vainora

trainのヘルプファイルで、maxtrixまたはデータフレームのいずれかが期待されると述べていても、行列をデータフレームに変換してみることができます。

model <- train(y=ynn, x=as.data.frame(mnn), method='nnet',linout=TRUE, trace = FALSE, trControl = nnTrControl,metric="logLoss", tuneGrid=nnGrid)
0
Sixiang.Hu