这个问题应该非常简单。但是文档没有帮助。
我正在使用 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 !
你是对的,neuralnet()
的公式界面不支持" .
"。
但是,上述代码的问题在于不接受一个因素作为目标。您必须先将因子Species
扩展到三个二进制变量。具有讽刺意味的是,这最适合nnet
包中的函数class.ind()
(不需要这样的函数,因为nnet()
和multinom()
可以很好地处理因子):
trainData <- cbind(iris[, 1:4], class.ind(iris$Species))
neuralnet(setosa + versicolor + virginica ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width, trainData)
这有效 - 至少对我来说。
也许你应该看看 http://cran.r-project.org/web/packages/nnet/nnet.pdf,包内容的描述。你可以看到有一个名为 multinom 的函数,它可以帮助你实现这一点。
基本上,它将定性列物种拆分为定量列(这就是类.ind所做的),然后尝试预测这些新人工列的值。
nn <- 多项(种 ~ ., 鸢尾)
我不确定我是否回答了你的问题,因为我感觉你正在尝试用神经网络做一些不适用于 nnet 的事情。如果我错了,那么...对不起;)