基于R语言的神经网络

R语言中几种可用于神经网络的包的使用

  • nnet包
nnet提供了最常见的前馈反向传播神经网络算法
nnet只有一层隐藏层,是基于BP神经网络的一种算法
library(nnet)
#训练集序号
trIn=c(sample(1:50,40),sample(51:100,40),sample(101:150,40))
traindata=iris[trIn,]
testdata=iris[-trIn,]
#类别预处理,这一步是nnet()函数特别要求的
ide=class.ind(iris$Species)
#构建网络,训练模型,nnet前两个参数构成训练集,size表示中间层神经元个数
net=nnet(traindata[,-5],ide[trIn,],size = 3,softmax = TRUE)
#预测
tex=predict(net,testdata[,-5],type = "class")
#混淆矩阵
my.da=table(real=testdata$Species,predict=tex)
  • AMORE
AMORE包则更进一步提供了更为丰富的控制参数,并可以增加多个隐藏层。
自己写的,只是阐明用法,应该需要归一化处理,这里没有做。
library(AMORE)
#训练集序号
trIn=c(sample(1:50,40),sample(51:100,40),sample(101:150,40))
data=iris
#将列别响应变量转为数值型
data$Species=as.numeric(data$Species)
traindata=data[trIn,]
testdata=data[-trIn,]
#创建网络
net=newff(n.neurons=c(4,4,2,1),learning.rate.global=1e-4,momentum.global=0.05,error.criterium="LMS", Stao=NA, hidden.layer="tansig", output.layer="purelin", method="ADAPTgdwm")
#训练
result=train(net,traindata[,-5],traindata[,5],error.criterium = "LMS",report = TRUE,show.step = 100,n.shows = 10)
#预测
y=sim(result$net,testdata[,-5])
  • neuralnet包
neuralnet包的改进在于提供了弹性反向传播算法和更多的激活函数形式
library(neuralnet)
#训练集序号
trIn=c(sample(1:50,40),sample(51:100,40),sample(101:150,40))
data=iris
#将列别响应变量转为数值型
data$Species=as.numeric(data$Species)
traindata=data[trIn,]
testdata=data[-trIn,]
#建立模型
#net=neuralnet(Species~Sepal.Length+Sepal.Width+Petal.Length+Petal.Width,data = traindata,hidden = 10,threshold = 0.01)
net=neuralnet(Species~.,data = traindata,hidden = 10,threshold = 0.01)
#绘制网络
plot(net)
#预测
predict=compute(net,testdata[,-5])
##输出
predict$net.result
  • RSNNS包
前面三个包主要是基于BP神经网络,而RSNNS包则提供了更多的神经网络模型
这真的是一个非常高大上的包啊!!!
library(RSNNS)
data(iris)
#将数据顺序打乱
iris = iris[sample(1:nrow(iris),length(1:nrow(iris))),1:ncol(iris)]
#定义网络输入 
irisValues= iris[,1:4]
#定义网络输出,并将数据进行格式转换,将类别变量处理成向量形式 
irisTargets = decodeClassLabels(iris[,5])
#从中划分出训练样本和检验样本 
#splitForTrainingAndTest将输入值和目标值拆分为训练集和测试集。 得到的是列表
#测试集从数据的结尾获取。如果要对数据进行混洗,则应在调用此函数之前完成。
iris = splitForTrainingAndTest(irisValues, irisTargets, ratio=0.15)
#数据标准化 
iris = normTrainingAndTestSet(iris)
#利用mlp命令执行前馈反向传播神经网络算法 
model = mlp(iris$inputsTrain, iris$targetsTrain, size=5, learnFunc="Quickprop", 
            learnFuncParams=c(0.1, 2.0, 0.0001, 0.1),maxit=100, inputsTest=iris$inputsTest, 
            targetsTest=iris$targetsTest) 
#利用上面建立的模型进行预测 
predictions = predict(model,iris$inputsTest)
#生成混淆矩阵,观察预测精度 
confusionMatrix(iris$targetsTest,predictions)

你可能感兴趣的:(基于R语言的机器学习)