Работа с neuralnet в R в первый раз: get " требует числовых/комплексных аргументов матрицы / вектора"
Я пытаюсь научиться работать с нейронными сетями в 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
Я понимаю, что проблема в том, как я представляю свои входные переменные, но я слишком Новичок, чтобы понять, что мне нужно сделать, чтобы исправить это. Кто-нибудь может помочь?
спасибо!
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)
некоторые переменные имеют слишком много значений, чтобы быть полезным (по крайней мере в первой модели): вы можете удалить имя, билет, салон и passengerId. Вы также можете преобразовать некоторые числовые переменные (например, класс) В факторы, если это более значимо.
С neuralnet
имеет дело только с количественными переменными,
можно преобразовать все качественные переменные (факторы)
к двоичным ("фиктивным") переменным, с --
это одна из очень редких ситуаций
в которой 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
)
сообщение об ошибке "требует числовых/сложных аргументов матрицы / вектора" возникает, когда у вас есть факторные или символьные переменные в ваших данных.
существует три способа решить эту проблему:
- удалить переменную
- если переменная является упорядоченным фактором, используйте вместо нее целое число.
- если переменная является символом, преобразуйте ее в фактор, а затем в фиктивную переменную.
вы можете использовать модель.матрица (), упомянутая выше, или класс.функция ind () из пакета nnet для передачи коэффициента в фиктивную переменную.