4

这个问题应该很简单。但是文档没有帮助。

我正在使用 R。我必须将neuralnet包用于多项分类问题。

所有示例均适用于二项式或线性输出。我可以使用二项式输出做一些一对多的实现。但我相信我应该能够通过将 3 个单元作为输出层来做到这一点,其中每个单元都是二项式(即正确输出的概率)。不?

这就是我将使用的nnet(我相信它正在做我想要的):

data(iris)
library(nnet)
m1 <- nnet(Species ~ ., iris, size = 3)
table(predict(m1, iris, type = "class"), iris$Species)

这就是我正在尝试使用neuralnet的(公式破解是因为neuralnet似乎不支持.公式中的 ' ' 符号):

data(iris)
library(neuralnet)
formula <- paste('Species ~', paste(names(iris)[-length(iris)], collapse='+'))
m2 <- neuralnet(formula, iris, hidden=3, linear.output=FALSE)
# fails !
4

2 回答 2

8

你说得对,公式界面neuralnet()不支持' .'。

但是,您上面的代码的问题在于不接受一个因素作为目标。您必须首先将因子扩展Species为三个二进制变量。具有讽刺意味的是,这最适用于包中的函数class.ind()nnet它不需要这样的函数,因为nnet()并且multinom()可以很好地处理因子):

trainData <- cbind(iris[, 1:4], class.ind(iris$Species))
neuralnet(setosa + versicolor + virginica ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width, trainData)

这有效 - 至少对我来说。

于 2014-02-15T17:43:33.247 回答
-1

也许你应该看看http://cran.r-project.org/web/packages/nnet/nnet.pdf,包内容的描述。您可以看到有一个名为 multinom 的函数可以帮助您实现这一点。

基本上,它将定性列种类拆分为定量列(这是 class.ind 所做的),然后尝试预测这些新人工列的值。

nn <- multinom(物种 ~ ., iris)

我不确定我是否回答了你的问题,因为我觉得你正在尝试用神经网络做一些不适用于 nnet 的事情。如果我错了,那么......对不起;)

于 2014-02-10T14:25:58.070 回答