使用神经网络包进行多项式分类

时间:2013-12-28 09:38:40

标签: r machine-learning artificial-intelligence neural-network nnet

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

我正在使用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 !

2 个答案:

答案 0 :(得分:5)

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

但是,上面代码的问题在于,不接受某个因素作为目标。您必须首先将因子Species扩展为三个二进制变量。具有讽刺意味的是,这最适用于class.ind()包中的函数nnet(由于nnet()multinom()可以正常使用这些函数,因此不需要这样的函数):< / p>

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

这很有效 - 至少对我而言。

答案 1 :(得分:-1)

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

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

nn&lt; - multinom(species~。,iris)

我不确定我是否回答了你的问题,因为我觉得你正在尝试用神经网络做一些与nnet不兼容的东西。如果我错了那么......抱歉;)