数据挖掘---BP神经网络

文章目录

    • 一、构建训练集与检验集
    • 二、nnet包的nnet函数
    • 三、AMORE包

R中关于神经网络的包:nnet、AMORE、neuralnet以及RSNNS
nnet包提供了最常见的前馈反向传播神经网络算法,构建单隐层神经网络;
AMORE包则进一步提供了更为丰富的控制参数,并可以增加多个隐层
neuralnet包的改进在于提供了弹性反向传播算法和更多的激活函数形式。

一、构建训练集与检验集

data(iris)
ind <- sample(2,nrow(iris),replace=T,prob=c(0.7,0.3)) 
trainSet <- iris[ind==1,]
testSet <- iris[ind==2,]

二、nnet包的nnet函数

nnet(traindata,trainlable,size,rang=0.1,decay=5e-4,maxit=300)
#traindata:训练数据,注意这里的训练数据要去掉类标签
#trainlable:类别
#size:隐层神经元数目
#rang:初始化权值会在-rang和rang之间选择
#decay:权值衰减参数
#maxit:最大迭代次数
#生成类别的示性函数,把类别数值化才能计算误差(安装nnet包才有效)
library(nnet)
trainlable <- class.ind(trainSet$Species)
testlable <- class.ind(testSet$Species)

bpnet <- nnet(trainSet[,- 5],trainlable,size=3,rang=0.1,decay=5e-4,maxit=300)

在这里插入图片描述

输入层4个神经元(4个属性),隐层3个神经元,输出层3个神经元(3个类)

数据挖掘---BP神经网络_第1张图片

b:偏移(每个隐层结点有一个b,每个输出层结点有一个b)
输入层:i1,i2,i3,i4
隐层:h1,h2,h3
输出层:o1,o2,o3
权值

#给出训练集分类结果
trainpre<-predict(bpnet,trainSet[,-5])
#给出检验集的分类结果
testpre<-predict(bpnet,newdata=testSet[,-5])
table(testSet$Species,apply(testpre,1,function(x){
     names(x)[which.max(x)]}))
#左边的是行(真实类标签),右边是列(预测列标签)

数据挖掘---BP神经网络_第2张图片
数据挖掘---BP神经网络_第3张图片

三、AMORE包

应用AMORE包中的三个函数实现ANN构建:
newff函数:实现构建ANN网络框架
train函数:实现网络学习过程,即权值训练过程;
sim函数:实现网络预测,对未知样本类别的推断。

trainattri <- trainSet[,-5] #训练样本特征信息
trainlabel <- trainSet[,5]  #训练样本类别信息
T <- class.ind(trainlabel)  #示性函数
netframe <- newff(n.neurons=c(dim(trainattri)[2],3,dim(T)[2]),# n.neurons:输入-隐层-输出层的神经元数目
					learning.rate.global=1e-4, #学习速率
					momentum.global=0.001, #动量因子
					error.criterium="LMS",  #误差预测方法
					Stao=NA,  #误差参数
					hidden.layer="sigmoid", #隐层神经元激活函数 
					output.layer="sigmoid",  #输出层神经元激活函数
					method="ADAPTgdwm") #训练方法
bpnet <- train(netframe, #由netff构建的网络(框架)
				trainattri, #训练样本的特征信息
				T, #训练样本的类别信息
				error.criterium="LMS", 
				report=T,n.shows=20,show.step=500)
				#是否提供结果的图形信息或文字信息
				#report=T的前提下,report的次数为20,每迭代500次报告一次(步长)
				#训练总次数:n.shows*show.step
testattri <- testSet[,-5]
testlabel <- testSet[,5]

testPre <- sim(bpnet$net,testattri)
                #由train函数生成的训练好权值的ANN模型,bpnet不是sim的操作对象,而是bpnet中的元素net
				#bpnet是一个list,bpnet$net即bpnet[[1]]
				#待检测的样本(行为样本,列为特征信息)		

你可能感兴趣的:(数据挖掘,r语言,神经网络)