私は次のようなトレーニングセットを持っています
_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
は結果/従属変数です。 Name
、Area
、および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
を使用した場合にも、同様のエラーが発生します
誰がこれを引き起こしているのか知っていますか?
y
は、行列ではなく、各サンプルの結果を含む数値または因子ベクトルである必要があります。使用する
train(y = make.names(trainDF$Name), ...)
役立つ、ここでmake.names
値を変更して、有効な変数名になるようにします。
train
のヘルプファイルで、maxtrixまたはデータフレームのいずれかが期待されると述べていても、行列をデータフレームに変換してみることができます。
model <- train(y=ynn, x=as.data.frame(mnn), method='nnet',linout=TRUE, trace = FALSE, trControl = nnTrControl,metric="logLoss", tuneGrid=nnGrid)