一、模型理解
本次介绍的主要为BP神经网络,是ANN(Artifical Neural Networks)神经网络中的一种。BP即为前馈的意思,即输入节点只跟前边的隐藏层或者输出节点向前发生关系。这是一种预测模型,能根据已有的学习集训练出模型,根据预测集中的x1,x2,x3预测Y的值。
在下边的博客中,详细介绍了BP神经网络的算法:
https://blog.csdn.net/google19890102/article/details/32723459
其中,我们需要注意的关键术语有:输入层、隐藏层、输出层;权重、偏置、激励函数、学习速率;误差、权值更新、偏置更新
二、R语言调用实现案例
首先我们拿到的数据集如下:
X1 | X2 | X3 | Y |
1 | 0 | 0 | -1 |
1 | 0 | 1 | 1 |
1 | 1 | 0 | 1 |
1 | 1 | 1 | 1 |
0 | 0 | 1 | -1 |
0 | 1 | 0 | -1 |
0 | 1 | 1 | 1 |
0 | 0 | 0 | -1 |
输入的自变量为X1,2,3,需要预测的为因变量Y。
在R语言里,实现神经网络需要的包是AMore,函数名为newff()、train()以及sim()。以下代码是基于上述数据集的R语言实现。
#install.packages("AMORE")
library(AMORE)
x1=as.numeric(c(1,1,1,1,0,0,0,0))
x2=as.numeric(c(0,0,1,1,0,1,1,0))
x3=as.numeric(c(0,1,0,1,1,0,1,0))
y=c(-1,1,1,1,-1,-1,1,-1)
p=cbind(x1,x2,x3)
target=y
net<-newff(n.neurons = c(3,2,1),learning.rate.global = 0.01,momentum.global = 0.4,
error.criterium = "LMS",Stao = NA,hidden.layer = "tansig",output.layer = "purelin",
method = "ADAPTgdwm")
#其中n.neurons = c(3,2,1)表示有三个输入层、2个隐藏层、1个输出层;learning.rate即为学习速率,影响了权重
#调整的精细度,太大收敛的快但是不精细。error.criterium = "LMS" 为收敛条件,lms表示最小误差平方,
#hidden.layer = "tansig",output.layer = "purelin"分别表示了隐藏层和输出层的激励函数是什么
result<-train(net,p,target,error.criterium = "LMS",report = TRUE,show.step = 100000,n.shows = 5)
#net 参数即为训练好的神经网络模型,p为学习集的自变量,target为学习集的因变量,show.step = 100000代表了重置次数
z<-sim(result$net,p)
z
经过100000次拟合之后,最终拿原始数据预测结果完全一致。以下为输出结果。
> z
[,1]
[1,] -1
[2,] 1
[3,] 1
[4,] 1
[5,] -1
[6,] -1
[7,] 1
[8,] -1
三、分析师困难点
选择合适的激励函数、确定合适的学习率、对于过度拟合问题的解决
四、自定义函数实现BP神经网络(待实现)
五、参考书目
《神经网络设计》,机械工业出版社
《神经网络与机器学习》,机械工业出版社
《人工神经网络理论,设计与应用》化学工业出版社
《Matlab神经网络的30个案例分析》北京航空航天大学出版社