Работа с нейронной сетью в R впервые: для получения требуются числовые/сложные матричные/векторные аргументы

Я пытаюсь научиться работать с нейронными сетями в R. В качестве задачи обучения я использовал следующая проблема на Kaggle:

Не волнуйтесь, эта задача специально разработана для того, чтобы люди могли с ней учиться, за нее не закреплено никакого вознаграждения.

Я начал с простой логистической регрессии, которая отлично помогла мне замочить ноги. Теперь я хотел бы научиться работать с нейронными сетями. Мои тренировочные данные выглядят так (столбец:строка):

- survived: 1
- pclass:   3
- sex:      male
- age:      22.0
- sibsp:    1
- parch:    0
- ticket:   PC 17601
- fare:     7.25
- cabin:    C85
- embarked: S

Мой начальный код R выглядит так:

> net <- neuralnet(survived ~ pclass + sex + age + sibsp +
                   parch + ticket + fare + cabin + embarked, 
                   train, hidden=10, threshold=0.01)

Когда я запускаю эту строку кода, я получаю следующую ошибку:

Error in neurons[[i]] %*% weights[[i]] : 
  requires numeric/complex matrix/vector arguments

Я понимаю, что проблема в том, как я представляю свои входные переменные, но я слишком новичок, чтобы понять, что мне нужно сделать, чтобы исправить это. Кто-нибудь может помочь?

Спасибо!


person user2548029    schedule 03.07.2013    source источник
comment
Сначала, глядя на ваши данные, я считаю, что вы преобразовали все данные в числовые значения. Например, кабина = c85, что это значит? Если вы преобразуете значения этого типа в числовые, ваша проблема будет решена.   -  person user1471980    schedule 04.07.2013


Ответы (2)


Прежде чем вслепую отдать данные компьютеру, неплохо было бы посмотреть на них:

d <- read.csv("train.csv")
str(d)
# 'data.frame': 891 obs. of  12 variables:
#  $ PassengerId: int  1 2 3 4 5 6 7 8 9 10 ...
#  $ Survived   : int  0 1 1 1 0 0 0 0 1 1 ...
#  $ Pclass     : int  3 1 3 1 3 3 1 3 3 2 ...
#  $ Name       : Factor w/ 891 levels "Abbing, Mr. Anthony",..: 109 191 358 277 16 559 520 629 417 581 ...
#  $ Sex        : Factor w/ 2 levels "female","male": 2 1 1 1 2 2 2 2 1 1 ...
#  $ Age        : num  22 38 26 35 35 NA 54 2 27 14 ...
#  $ SibSp      : int  1 1 0 1 0 0 0 3 0 1 ...
#  $ Parch      : int  0 0 0 0 0 0 0 1 2 0 ...
#  $ Ticket     : Factor w/ 681 levels "110152","110413",..: 524 597 670 50 473 276 86 396 345 133 ...
#  $ Fare       : num  7.25 71.28 7.92 53.1 8.05 ...
#  $ Cabin      : Factor w/ 148 levels "","A10","A14",..: 1 83 1 57 1 1 131 1 1 1 ...
#  $ Embarked   : Factor w/ 4 levels "","C","Q","S": 4 2 4 4 4 3 4 4 4 2 ...
summary(d)

Некоторые переменные имеют слишком много значений, чтобы быть полезными (по крайней мере, в вашей первой модели): вы можете удалить имя, билет, кабину и идентификатор пассажира. Вы также можете преобразовать некоторые числовые переменные (скажем, класс) в множители, если это более значимо.

Поскольку neuralnet имеет дело только с количественными переменными, вы можете преобразовать все качественные переменные (факторы) в бинарные («фиктивные») переменные с помощью функции model.matrix — это одна из очень редких ситуаций, когда R не выполняет преобразование для ты.

m <- model.matrix( 
  ~ Survived + Pclass + Sex + Age + SibSp + Parch + Fare + Embarked, 
  data = d 
)
head(m)
library(neuralnet)
r <- neuralnet( 
  Survived ~ Pclass + Sexmale + Age + SibSp + Parch + Fare + EmbarkedC + EmbarkedQ + EmbarkedS, 
  data=m, hidden=10, threshold=0.01
)
person Vincent Zoonekynd    schedule 03.07.2013
comment
Спасибо! Именно на такой ответ я и рассчитывал. Спасибо, что нашли время ответить так подробно. - person user2548029; 04.07.2013
comment
Спасибо тебе за это! У меня есть вопрос, @VincentZoonekynd, есть ли определенное правило относительно того, какие переменные применимы к преобразованию model.matrix? - person ; 09.01.2014
comment
@llorgge: все качественные переменные, т. е. типа factor (или character), будут преобразованы в фиктивные переменные. Но поскольку числовые переменные сохраняются без преобразования, вы можете поместить все переменные. - person Vincent Zoonekynd; 09.01.2014
comment
Спасибо! Последний вопрос, какое предельное количество значений факторов вы рекомендуете принять в использование в neuralnet после model.matrix? Я боюсь потерять некоторые из моих факторных переменных со значениями от двух до 200. - person ; 10.01.2014
comment
@llorgge: Вам, вероятно, следует спросить на перекрестной проверке. - person Vincent Zoonekynd; 10.01.2014
comment
Спасибо за подробный ответ!! Верно помогло. - person Sarun Dahal; 30.11.2019
comment
Для меня эта ошибка возникает в функции predict! neuralnet отлично работает и подходит к поезду. Однако ни обучающий набор, ни тестовый набор не могут быть предсказаны моделью из-за той же проблемы numeric/complex matrix/vector arguments. Есть идеи? @VincentZoonekynd Я преобразовал оба, используя model.matrix, и имена их столбцов совпадают. - person Hadij; 21.12.2020

Сообщение об ошибке «требуются числовые/сложные матричные/векторные аргументы» возникает, когда в ваших данных есть факторные или символьные переменные.

Есть три способа решить эту проблему:

  1. Удалить переменную
  2. Если переменная является упорядоченным фактором, вместо этого используйте целое число.
  3. Если переменная символьная, преобразуйте ее в фактор, а затем в фиктивную переменную.

Вы можете использовать упомянутую выше функцию model.matrix() или функцию class.ind() из пакета nnet для передачи коэффициента в фиктивную переменную.

person Tara    schedule 15.01.2014
comment
К моему удивлению, SPSS требует, чтобы переменные Factor помещались отдельно в специальное поле. - person Espanta; 10.07.2015