Как подготовить переменные для nnet классификации / прогнозирования в R? - PullRequest
2 голосов
/ 04 мая 2020

В классификации я использую переменную x в качестве значения и y в качестве метки. Как здесь в примере для randomForest:

    iris_train_values <- iris[,c(1:4)]
    iris_train_labels <- iris[,5]
    model_RF <- randomForest(x = iris_train_values, y = iris_train_labels, importance = TRUE,
                          replace = TRUE, mtry = 4, ntree = 500, na.action=na.omit,
                          do.trace = 100, type = "classification")

Это решение работает для многих классификаторов, однако, когда я пытаюсь сделать это в nnet и получаю ошибку:

model_nnet <- nnet(x = iris_train_values, y = iris_train_labels, size = 1, decay = 0.1)

Error in nnet.default(x = iris_train_values, y = iris_train_labels, size = 1,  : 
  NA/NaN/Inf in foreign function call (arg 2)
In addition: Warning message:
In nnet.default(x = iris_train_values, y = iris_train_labels, size = 1,  :
  NAs introduced by coercion

Или на другой набор данных получает ошибку:

Error in y - tmp : non-numeric argument to binary operator

Как мне изменить переменные для классификации?

1 Ответ

1 голос
/ 04 мая 2020

Синтаксис формулы работает:

library(nnet)

model_nnet <- nnet(Species ~ ., data = iris, size = 1)

Но синтаксис матрицы не работает:

nnet::nnet(x = iris_train_values, y = as.matrix(iris_train_labels), size = 1)

Я не понимаю, почему это не работает, но, по крайней мере, есть обходной путь.

predict отлично работает с синтаксисом формулы:

?predict.nnet

predict(model_nnet,
        iris[c(1,51,101), 1:4],
        type = "class") # true classese are ['setosa', 'versicolor', 'virginica']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...