【分类算法】BP神经网络算法理解与实现

一、模型理解

本次介绍的主要为BP神经网络,是ANN(Artifical Neural Networks)神经网络中的一种。BP即为前馈的意思,即输入节点只跟前边的隐藏层或者输出节点向前发生关系。这是一种预测模型,能根据已有的学习集训练出模型,根据预测集中的x1,x2,x3预测Y的值。

在下边的博客中,详细介绍了BP神经网络的算法:

https://blog.csdn.net/google19890102/article/details/32723459

其中,我们需要注意的关键术语有:输入层、隐藏层、输出层;权重、偏置、激励函数、学习速率;误差、权值更新、偏置更新

二、R语言调用实现案例  

首先我们拿到的数据集如下:

X1X2X3Y
100-1
1011
1101
1111
001-1
010-1
0111
000-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个案例分析》北京航空航天大学出版社 

    原文作者:神经网络算法
    原文地址: https://blog.csdn.net/glodon_mr_chen/article/details/79822812
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞