这个问题应该非常简单。但文档并没有提供帮助。
我使用的是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)# 失败了!
回答:
你是对的,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)
这对我来说是有效的。