【问题标题】:How to prepare variables for nnet classification/predict in R?如何为 R 中的 nnet 分类/预测准备变量?
【发布时间】:2020-05-04 22:01:45
【问题描述】:

在分类中,我使用变量 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

我应该如何更改要分类的变量?

【问题讨论】:

  • 使用formula 语法似乎有效:nnet::nnet(Species ~ ., data = iris, size = 1) 这是一个选项吗?文档说 y 必须是数据框的矩阵,但我使用 as.data.frame(iris_train_labels)as.matrix(iris_train_labels) 得到了同样的错误
  • 谢谢,你的回答是正确的,写在帖子里,我会给出解决方案
  • 也许您知道如何使用 caret 中的 predict 函数来预测测试数据集?

标签: r neural-network nnet


【解决方案1】:

公式语法有效:

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']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-18
    • 2014-07-06
    • 1970-01-01
    • 2015-05-24
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多