r语言 - 使用神经网络包的多项式分类



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

我正在使用 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 的事情。如果我错了,那么...对不起;)

最新更新