Вопрос по prediction, kaggle, r, regression – Работа с нейронной сетью в R в первый раз: get «требует числовую / сложную матрицу / векторные аргументы»

25

Я пытаюсь научиться работать с нейронными сетями в 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 
Глядя на ваши данные сначала, я полагаю, что вы преобразовали все данные в числовые значения. Например, кабина = c85, что это значит? Если вы преобразуете значения этого типа в числовые, ваша проблема будет решена. user1471980

Ваш Ответ

2   ответа
7

требуется числовая / сложная матрица / векторные аргументы " происходят, когда у вас есть факторные или символьные переменные в ваших данных.

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

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

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

К моему удивлению, поскольку SPSS требует, чтобы вы поместили переменные фактора отдельно в указанное поле. Espanta
39

стоит взглянуть на это:

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 имеет дело только с количественными переменными, вы можете преобразовать все качественные переменные (факторы) в двоичные ("манекен») переменные, с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
)
Спасибо! Последний вопрос: какое предельное количество значений факторов вы рекомендуете, которые можно принять вneuralnet послеmodel.matrix? Я боюсь потерять некоторые из моих факторных переменных со значениями от двух до 200. user1685185
Спасибо! Это именно тот ответ, на который я надеялся. Спасибо, что нашли время, чтобы ответить в таких деталях. user2548029
@llorgge: Вы должны спроситьперекрестная проверка. Vincent Zoonekynd
Спасибо тебе за это! У меня есть вопрос @VincentZoonekynd, есть ли определенное правило, какие переменные применимы кmodel.matrix преобразование? user1685185
@llorgge: все качественные переменные, т.е. типаfactor (или жеcharacter), будут преобразованы в фиктивные переменные. Но поскольку числовые переменные сохраняются без преобразования, вы можете поместить все переменные. Vincent Zoonekynd

Похожие вопросы