web-dev-qa-db-ja.com

ニューラルネットワークのトレーニング中に「nnet.default(x、y、w、...)のエラー:重みが多すぎます(77031)」というエラーが表示される

パッケージnnetを使用して、Rでニューラルネットワークをトレーニングしようとしています。以下は私のトレーニングデータに関する情報です。

str(traindata)

'data.frame':   10327 obs. of  196 variables:
$ stars                          : num  5 5 5 3.5 3.5 4.5 3.5 5 5 3.5 ...
$ open                           : num  1 1 1 1 1 1 1 1 1 1 ...
$ city                           : Factor w/ 61 levels "ahwatukee","anthem",..: 36 38
$ review_count                   : int  3 5 4 5 14 6 21 4 14 10 ...
$ name                           : Factor w/ 8204 levels " leftys barber shop",..:
$ longitude                      : num  -112 -112 -112 -112 -112 ...
$ latitude                       : num  33.6 33.6 33.5 33.4 33.7 ...
$ greek                          : int  0 0 0 0 0 0 0 0 0 0 ...
$ breakfast...brunch             : int  0 0 0 0 0 0 0 0 0 0 ...
$ soup                           : int  0 0 0 0 0 0 0 0 0 0 ...

この情報は切り捨てました。

次を実行すると:

library(nnet)  
m4 <- nnet(stars~.,data=traindata,size=10, maxit=1000)

次のエラーが発生します。

Error in nnet.default(x, y, w, ...) : too many (84581) weights

次のように引数の重みを変更しようとすると:

m4 <- nnet(stars~.,data=traindata,size=10, maxit=1000,weights=1000)

次に、次のエラーが発生します。

Error in model.frame.default(formula = stars ~ ., data = traindata, weights = 1000) : 
variable lengths differ (found for '(weights)')

私がしている間違いは何ですか?このエラーを回避または修正するにはどうすればよいですか?多分問題は私の「重み」の理解にあります。

16
Ayush Raj Singh

MaxNWtsをモデルのサイズに合わせて大きくするか、sizeを小さくしてモデルを小さくします。

また、モデルに含める変数を正確に検討する必要があるかもしれません。提供されたデータを見ると、nameは8000レベルを超える要因です。たった1万回の観測で、そこから賢明なものを得るつもりはありません。 cityの方が便利かもしれませんが、ニューラルネットと同じくらい複雑なものの61レベルは限界になりそうです。

14
Hong Ooi

「MaxNWts」オプションを84581より大きい値に増やします。

7
Tommy Levi

ネットワークで許可される重みの数を増やすように設定するオプションは、MaxNWtsではなくweightsです(各サンプルの重みを指定するように設定)。

2
Filippo Mazza

直接渡すことでMaxNWtsパラメータを増やします

m4 <- nnet(stars~.,data=traindata,size=10, maxit=1000,MaxNWts=84581)
1
Artemination