2016-06-01 6 views
0

したがって、neuralnetパッケージを試して、その使用法と考えられる実装を理解しています。私はSPECTFに働いてる初めてSPECTハートデータセットを使用したneuralnet Rパッケージを使用

は、ここでデータセットが利用可能に聞く:私は予測に興味 https://archive.ics.uci.edu/ml/machine-learning-databases/spect/SPECTF.test

変数は、最初の列です。 実際にSPECTF.testとSPECTF.trainをマージし、test_とtrain_(スケーリングされたすべての変数)のRでランダムに分割します。次のように私は、ニューラルネットワークをセットアップするR-ブログのチュートリアル後

> str(train_) 
'data.frame': 200 obs. of 45 variables: 
$ V1 : num 1 1 0 1 1 1 1 1 1 1 ... 
$ V2 : num 0.783 0.75 0.733 0.767 0.75 ... 
$ V3 : num 0.75 0.633 0.6 0.783 0.7 ... 
$ V4 : num 0.636 0.886 0.795 0.841 0.545 ... 
... 
$ V45: num 0.71 0.855 0.797 0.913 0.754 ... 

> str(test_) 
'data.frame': 67 obs. of 45 variables: 
$ V1 : num 0 0 0 0 0 0 0 0 0 0 ... 
$ V2 : num 0.583 0.6 0.6 0.633 0.683 ... 
$ V3 : num 0.7 0.617 0.783 0.917 0.617 ... 
$ V4 : num 0.955 0.705 0.705 0.75 0.727 ... 
... 
$ V45: num 0.899 0.812 0.899 0.797 0.797 ... 

:THITは、彼らがどのように見えるかです

n <- names(train_) 
f <- as.formula(paste("train_[,1] ~", paste(n[!n %in% "train_[,1]"], collapse = " + "))) 
nn <- neuralnet(f,data=train_,hidden=2,linear.output=T) 

そして、それがスムーズに動作します。この時点まで、私はしよう

pr.nn <- compute(nn,test_[,2:45]) 

をしかし、それは戻って私が解決する方法を理解していないこのエラーは、私を与える:テストデータの予測を行う

を10
> pr.nn <- compute(nn,test_[,2:45]) 
Error in neurons[[i]] %*% weights[[i]] : non-conformable arguments 

ご協力いただきありがとうございます。このコミュニティは素晴らしいリソースです!

答えて

0

あなたの問題は、数式fの作成にあります。あなたが作成している式を見てみましょう

f <- as.formula(paste("train_[,1] ~", paste(n[!n %in% "train_[,1]"], collapse = " + "))) 
> f 
train_[, 1] ~ X1 + X2 + X3 + X4 + X5 + X6 + X7 + X8 + X9 + X10 + 
X11 + X12 + X13 + X14 + X15 + X16 + X17 + X18 + X19 + X20 + 
X21 + X22 + X23 + X24 + X25 + X26 + X27 + X28 + X29 + X30 + 
X31 + X32 + X33 + X34 + X35 + X36 + X37 + X38 + X39 + X40 + 
X41 + X42 + X43 + X44 + X45 

これは一目瞭然です。しかし、注意深く見てみると、X1が式と予測の両方に含まれていることがわかります。これは問題になります。あなたはX1以外のすべての変数を選択したい場合は

、より簡単な方法があります:

f <- as.formula(paste(paste0(n[1]," ~ "),paste(n[-1], collapse = " + "))) 
> f 
X1 ~ X2 + X3 + X4 + X5 + X6 + X7 + X8 + X9 + X10 + X11 + X12 + 
X13 + X14 + X15 + X16 + X17 + X18 + X19 + X20 + X21 + X22 + 
X23 + X24 + X25 + X26 + X27 + X28 + X29 + X30 + X31 + X32 + 
X33 + X34 + X35 + X36 + X37 + X38 + X39 + X40 + X41 + X42 + 
X43 + X44 + X45 

は、あなたはまだn個を使用して、変数名のベクトルを作成しました[1]最初の変数名をつかむだろう、 n [-1]は他のすべてをつかむでしょう。

私はこれをわずかなダミーデータを使ってテストし、compute()を使用してエラーを報告しなかったので、問題が解決するはずです。

+0

ありがとうございました!あなたの答えは完璧です!私が質問を投稿した後でなければ、問題は数式の定義にあると理解しましたが、内部で使用されている構文についての良い参考文献は見つかりませんでした。反対のコードでは、すべての変数をすばやく選択する方法については明確です。再度、感謝します! – carloab

+0

将来、このような状況では、モデルオブジェクト($ n $ call)の$ call属性を調べることをお勧めします。 nnオブジェクトを作成するために使用された式が表示されます。これは問題の内容を認識した場所です。 – ZachTurn

関連する問題