3

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私のモデルは予測を処理して出力できる必要があります。あるいは、値を有効な要素として扱うようにニューラルネットに指示したほうがよいでしょうか?NANANA

これまでに使用しようとしてきたコードは次のとおりです。

#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

rownamestrain データ フレームの を使用して、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
4

0 に答える 0