如何使用R中的neuralnet包编程多个输出节点?

时间:2015-11-26 22:56:13

标签: r machine-learning neural-network

我正在建立一个神经网络来根据许多变量预测“适合”。 “FitCls”分为三类:“优秀”,“好”和“差”。我有10个输入变量,并选择了一个带有6个神经元的隐藏层。我想要三个输出神经元,以便我可以将呈现给神经网络的情况分类为“适合”,即“优秀”,“好”或“差”。 我已经看到了一个类似的例子,其中这是使用虹膜数据(在幻灯片40,等等)上完成的:http://www.slideshare.net/DerekKane/data-science-part-viii-artifical-neural-network。我试图复制该结构,但在绘制网络时我仍然只得到一个输出节点。

这是我的代码(加载'nfit'数据帧后):

nfit[nfit$FitCls=="Excellent", "Output"] <- 2  
nfit[nfit$FitCls=="Good", "Output"] <- 1
nfit[nfit$FitCls=="Poor", "Output"] <- 0
nn <- neuralnet(Output~Universalism+Benevolence+Tradition+Conformity+Security+Power+Achievement+Hedonism+Stimulation+SelfDir, data = nfit, hidden = 6, err.fct = "ce", linear.output = FALSE)

当我运行神经网络时,它会给我一个警告信息,它强制err.fct为“sse”,因为响应不是二进制的。我不确定出了什么问题,因为在我复制的例子中,神经网络的图显示了三个输出节点。请让我知道我做错了什么。

如果这不是使用神经网络进行分类的正确方法,我也非常感谢您可以提供的关于我应该做什么的任何帮助。非常感谢!

1 个答案:

答案 0 :(得分:3)

要或多或少地复制虹膜示例,您需要:

library(neuralnet)
library(nnet)
trainset <- cbind(iris[, 1:4], class.ind(iris$Species))
espnnet2=neuralnet(setosa + versicolor + virginica ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width, trainset)
plot(espnnet2)

enter image description here

不幸的是,神经网络对数据很敏感,请尝试scale解释变量。