算法第一课——BP神经网络

算法学习
学习过程
http://www.planetb.ca/syntax-highlight-word
一、BP神经网络
BP(back propagation)神经网络是1986年由Rumelhart和McClelland为首的科学家提出的概念,是一种按照误差逆向传播算法训练的多层前馈神经网络,是目前应用最广泛的神经网络。从结构上讲,BP神经网络具有输入层、隐藏层和输出层;从本质上讲,BP算法就是以网络误差平方为目标函数、采用梯度下降法来计算目标函数的最小值。
人工神经网络无需事先确定输入输出之间映射关系的数学方程,仅通过自身的训练,学习某种规则,在给定输入值时得到最期望接近输出值的结果。
(一)基本构成
BP神经网络构成
(二)基本思想
BP神经网络算法包括信号的前向传播和误差的反向传播两个过程。即计算误差输出时按从输入到输出的方向进行,而调整权值和阈值从输出到输入的方向进行。
正向传播时,输入信号通过隐层作用于输出节点,经过非线性变换,产生输出信号,若实际输出与期望输出不相符,则转入误差的反向传播过程。误差反向传播是将输出误差通过隐层逐级反传,并将误差分摊给各层的所有单元,以从各层获得的信号误差作为调整各单元权值的依据。通过调整输入节点与隐层节点的连接强度和隐层节点与输出节点的连接强度以及阈值,使误差沿梯度方向下降,经过反复学习训练,确定与最小误差相对应的网络参数(权值和阈值),训练即告停止。此时经过训练的神经网络即能对类似样本的输入信息,自行处理输出误差最小的经过非线性转换的信息。
(三)BP神经网络的优缺点
1.优点
BP神经网络无论在网络理论还是在性能方面已比较成熟。其突出优点就是具有很强的非线性映射能力和柔性的网络结构。网络的中间层数、各层的神经元个数可根据具体情况任意设定,并且随着结构的差异其性能也有所不同。
2.缺点
1、学习速度慢,即使是一个简单的问题,一般也需要几百次甚至上千次的学习才能收敛。
2、容易陷入局部极小值。
3、网络层数、神经元个数的选择没有相应的理论指导。
4、网络推广能力有限
(四)BP神经网络的应用
1)函数逼近:用输入向量和相应的输出向量训练一个网络逼近一个函数。
2)模式识别:用一个待定的输出向量将它与输入向量联系起来。
3)分类:把输入向量所定义的合适方式进行分类。
4)数据压缩:减少输出向量维数以便于传输或存储。
nnet(formula, data, weights, …,subset, na.action, contrasts = NULL)
nnet(x, y, weights, size, Wts, mask,
linout = FALSE, entropy = FALSE, softmax = FALSE,
censored = FALSE, skip = FALSE, rang = 0.7, decay = 0,
maxit = 100, Hess = FALSE, trace = TRUE, MaxNWts = 1000,
abstol = 1.0e-4, reltol = 1.0e-8, …)
其中formula:公式的形式class ~ x1 + x2 + …
x:矩阵x值的例子或数据框
Y:矩阵或数据框的例子目标值
size:隐藏层单位数目
linout:切换线性输出单位
nnet包中的nnet(x, y, size, rang, decay, maxit, skip, Hess, trace)函数:单层的前向神经网络模型。
size神经网络隐藏层的神经元个数;
rang初始随机权值[-rang, rang];
decay经元输入权重的一个修改偏正参数,表明权值是递减的(可以防止过拟合);
maxit最大反馈迭代次数;
skip是否允许跳过隐藏层;
Hess是否输出Hessian值;
trace指出是否要最优化。
(五)案例分析

  1. install.packages(“nnet”)
  2. library(nnet)
  3. install.packages(“mlbench”)
  4. library(mlbench)
  5. data(Vehicle)#选取数据
  6. head(Vehicle)#数据前五行展示
  7. str(Vehicle)#变量类型
  8. n = length(Vehicle[,1]); #样本量
  9. n
  10. set.seed(111)#设置随机数的种子
  11. samp = sample(1:n, n/2)#随机选择半数观测值作为训练集
  12. b = class.ind(Vehicle$Class); #生成类别的示性函数
  13. head(b)
  14. #利用初始训练集前18个变量作为输入变量,隐藏层有三个节点,初始随机权值在[-0.1, 0.1],权值是逐渐衰减的
  15. test.cl = function(true, pred){
  16.       true = max.col(true);cres = max.col(pred);table(true, cres)}  
    
  17. a = nnet(Vehicle[samp, -19], b[samp, ],size = 3, rang = 0.1,
  18. decay = 5e-4, maxit = 200);
  19. #结果分析
  20. summary(a)
  21. #给出训练集分类结果
  22. test.cl(b[samp, ], predict(a, Vehicle[samp, -19]))
  23. #给出测试集分类结果
  24. test.cl(b[-samp, ], predict(a, Vehicle[samp, -19]))
  25. #结果不好,换组数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值