requires numeric/complex matrix/vector arguments
私は最近、ライブラリを操作する際のエラーについて次の質問をしましたneuralnet
。ここに私の元の質問があります:「R で初めてニューラルネットを操作する: get "数値/複素行列/ベクトル引数が必要です" が、修正方法がわかりません".
解決策は、関数を使用してデータ フレームの要素を「ダミー」変数に変換することでしたmodel.matrix
。結果のコードは次のとおりです。
matrix.train <- model.matrix(
~ survived + pclass + sex + age + sibsp + parch + fare + embarked,
data = train
)
ソース データ フレームには多数の個々の値が散りばめられているためNA
、結果のマトリックスは、元のデータ フレームの 891 行ではなく、714 行になります。
これは、私のトレーニング データでは問題ありません。ただし、テスト データ フレームを読み込んでマトリックスに変換すると、同じ問題が発生します。今回は、ソース データ フレームの 418 行に対して、331 行のマトリックスを取得します。
compute
モデルをテスト データに適用した後cbind
、行数が異なるため、予測をテスト データに戻すことができません。だから、私の質問は:
ケースmodel.matrix
を無視して、ソース データ フレームと同じ行数を強制的に出力する方法はありますか? 少なくとも 1 つの行に遭遇することはよくあるため、NA
私のモデルは予測を処理して出力できる必要があります。あるいは、値を有効な要素として扱うようにニューラルネットに指示したほうがよいでしょうか?NA
NA
NA
これまでに使用しようとしてきたコードは次のとおりです。
#Build a matrix from training data (714 rows vs 891 rows due to NAs in data)
matrix.train <- model.matrix(
~ survived + pclass + sex + age + sibsp + parch + fare + embarked,
data=train
)
library(neuralnet)
#Train the neural net
net <- neuralnet(
survived ~ pclass + sexmale + age + sibsp + parch + fare + embarkedC +
embarkedQ + embarkedS, data=matrix.train, hidden=10, threshold=0.01
)
#Build a matrix from test data (331 rows vs 418 rows due to NAs in data)
matrix.test <- model.matrix(~ pclass + sex + age + sibsp + parch + fare + embarked,
data=test
)
#Apply neural net to test matrix
net.results <- compute(
net, matrix.test
)
#Attempt to map results back to original test data
cleanoutput <- cbind(
net.results$net.result,test
)
Error in data.frame(..., check.names = FALSE) :
arguments imply differing number of rows: 331, 418
rownames
train データ フレームの を使用して、matrix.model マトリックスを同じ行数に強制しようとすると、次のようになります。
matrix.train <- matrix.train[match(rownames(train),rownames(matrix.train)),]
> matrix.train
(Intercept) survived pclass sexmale age sibsp parch fare embarkedC embarkedQ embarkedS
1 1 0 3 1 22.00 1 0 7.2500 0 0 1
2 1 1 1 0 38.00 1 0 71.2833 1 0 0
3 1 1 3 0 26.00 0 0 7.9250 0 0 1
4 1 1 1 0 35.00 1 0 53.1000 0 0 1
5 1 0 3 1 35.00 0 0 8.0500 0 0 1
6 NA NA NA NA NA NA NA NA NA NA NA
7 1 0 1 1 54.00 0 0 51.8625 0 0 1
ただし、その NA の行は不正確です。実際、その行には NA 値が 1 つしかない場合がありますが、何らかの理由で、行に 1 つの NA 値がリストされるたびに、マトリックスは行全体を NA に変換します。上記の代わりに、これは私が見たいものです:
> matrix.train
(Intercept) survived pclass sexmale age sibsp parch fare embarkedC embarkedQ embarkedS
1 1 0 3 1 22.00 1 0 7.2500 0 0 1
2 1 1 1 0 38.00 1 0 71.2833 1 0 0
3 1 1 3 0 26.00 0 0 7.9250 0 0 1
4 1 1 1 0 35.00 1 0 53.1000 0 0 1
5 1 0 3 1 35.00 0 0 8.0500 0 0 1
6 1 0 3 1 NA 0 0 6.25 1 0 NA
7 1 0 1 1 54.00 0 0 51.8625 0 0 1