パッケージ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)')
私がしている間違いは何ですか?このエラーを回避または修正するにはどうすればよいですか?多分問題は私の「重み」の理解にあります。
MaxNWts
をモデルのサイズに合わせて大きくするか、size
を小さくしてモデルを小さくします。
また、モデルに含める変数を正確に検討する必要があるかもしれません。提供されたデータを見ると、name
は8000レベルを超える要因です。たった1万回の観測で、そこから賢明なものを得るつもりはありません。 city
の方が便利かもしれませんが、ニューラルネットと同じくらい複雑なものの61レベルは限界になりそうです。
「MaxNWts」オプションを84581より大きい値に増やします。
ネットワークで許可される重みの数を増やすように設定するオプションは、MaxNWts
ではなくweights
です(各サンプルの重みを指定するように設定)。
直接渡すことでMaxNWtsパラメータを増やします
m4 <- nnet(stars~.,data=traindata,size=10, maxit=1000,MaxNWts=84581)