Я получаю сообщение об ошибке "Ошибка в nnet.default(x, y, w,...): слишком много (77031) весов" при обучении нейронных сетей

Я пытаюсь обучить нейронные сети в 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)')

Какую ошибку я делаю? Как избежать или устранить эту ошибку? Возможно, проблема заключается в моем понимании "весов".

Ответ 1

Либо увеличьте MaxNWts на то, что будет соответствовать размеру вашей модели, либо уменьшите size, чтобы уменьшить вашу модель.

Вероятно, вам также нужно подумать о том, какие именно переменные включать в модель. Просто глядя на предоставленные данные, name является фактором с более чем 8000 уровнями; вы не получите ничего разумного из этого только с 10000 наблюдениями. city может быть более полезным, но опять же, 61 уровень в чем-то сложном, как нейронная сеть, вероятно, будет незначительным.

Ответ 2

Увеличьте параметр "MaxNWts" на что-то большее, чем 84581.

Ответ 3

Параметр, позволяющий увеличить количество допустимых в сети весов, составляет MaxNWts, а не weights (для задания веса для каждого образца).