20

我正在尝试使用 package 在 R 中训练神经网络nnet。以下是有关我的训练数据的信息。

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)')

我犯了什么错误?如何避免或纠正此错误?也许问题在于我对“权重”的理解。

4

4 回答 4

18

要么增加MaxNWts以适应模型大小,要么减少size以使模型更小。

您可能还想更多地考虑要在模型中包含哪些变量。仅看提供的数据,name是一个超过 8000 个级别的因素;只有 10000 次观察,你不会从中得到任何明智的结果。city可能更有用,但同样,像神经网络这样复杂的东西中的 61 个级别可能是微不足道的。

于 2013-06-14T11:09:24.737 回答
7

将“MaxNWts”选项增加到大于 84581 的值。

于 2013-06-14T10:45:42.993 回答
2

设置为增加网络中允许的权重数量的选项是MaxNWts,而不是weights(设置为指定每个样本的权重)。

于 2017-03-08T10:43:43.957 回答
1

通过直接传递来增加 MaxNWts 参数

m4 <- nnet(stars~.,data=traindata,size=10, maxit=1000,MaxNWts=84581)
于 2020-01-20T17:50:08.783 回答