西瓜书5.5:试编程实现BP算法与累积BP算法,在西瓜数据集3.0上分别用这两个算法训练一个单隐层网络,并进行比较。

BP算法matlab实现

clearx = xlsread('watermelon3.0.xlsx', 'Sheet1', 'A1:Q8');
y = xlsread('watermelon3.0.xlsx', 'Sheet1', 'A9:Q9');
x=x';
y=y';
%将y设为0,1两类
y=y-1;
%获取输入参数的样本数与参数数
[m,n]=size(x);t=1;    %输出层神经元
rand('seed',0);
v=rand(n,n+1);  %输入层与隐层的权值
w=rand(n+1,t);  %隐层与输出层的权值
thy=rand(n+1);  %隐层阀值
thj=rand(t);    %输出层阀值
ty=zeros(m,t);  %输出层输出
b=zeros(n+1);   %隐层输出
gj=zeros(t);    %累计误差对w,thj求导的参数
eh=zeros(n+1);  %累计误差对v,thy求导的参数
xk=1;           %学习率kn=0;           %迭代次数
sn=0;           %同样的累计误差值累积次数
old_ey=0;       %前一次迭代的累计误差EY_BP = zeros(2175); #随机种子为0的时候,BP算法迭代2175次终止
while(1)    kn=kn+1;ey=0;       %当前迭代的累计误差for i=1:m%计算隐层输出for j=1:n+1ca=0;for k=1:nca=ca+v(k,j)*x(i,k);endb(j)=1/(1+exp(-ca+thy(j)));end%计算输出层输出for j=1:tcb=0;for k=1:n+1cb=cb+w(k,j)*b(k);endty(i,j)=1/(1+exp(-cb+thj(j)));end%计算当前迭代累计误差for j=1:tey=ey+((y(i)-ty(i,j))^2)/2;end%计算w,thj导数参数for j=1:tgj(j)=ty(i,j)*(1-ty(i,j))*(y(i)-ty(i,j));end%计算v,thy导数参数for j=1:n+1teh=0;for k=1:tteh=teh+w(j,k)*gj(k);endeh(j)=teh*b(j)*(1-b(j));end%更新v,thyfor j=1:n+1thy(j)=thy(j)+(-xk)*eh(j);for k=1:nv(k,j)=v(k,j)+k*eh(j)*x(i,k);endend%更新thj,wfor j=1:tthj(j)=thj(j)+(-xk)*gj(j);for k=1:n+1w(k,j)=w(k,j)+xk*gj(j)*b(k);endend endEY_BP(kn) = ey;%迭代终止判断if(abs(old_ey-ey)<0.0001)sn=sn+1;if(sn==100)break;endelseold_ey=ey;sn=0;end
end
save('EY_BP.mat','EY_BP')

ABP算法matlab实现

clear
x = xlsread('watermelon3.0.xlsx', 'Sheet1', 'A1:Q8');
y = xlsread('watermelon3.0.xlsx', 'Sheet1', 'A9:Q9');
x=x';
y=y';
y=y-1;
[m,n]=size(x);
t=1;    %输出层神经元rand('seed',0);
v=rand(n,n+1);  %输入层与隐层的权值
w=rand(n+1,t);  %隐层与输出层的权值
thy=rand(n+1);  %隐层阀值
thj=rand(t);    %输出层阀值
ty=zeros(m,t);  %输出层输出
b=zeros(n+1);   %隐层输出
gj=zeros(t);    %累计误差对w,thj求导的参数
eh=zeros(n+1);  %累计误差对v,thy求导的参数
tk=1;           %学习率kn=0;           %迭代次数
sn=0;           %同样的累计误差值累积次数
old_ey=0;       %前一次迭代的累计误差EY_ABP = zeros(1305); %在随机种子为0的情况下,ABP达到终止条件,迭代了1305次
while(1)kn=kn+1;ey=0;%当前迭代的累计误差%计算全部样本输出层输出for i=1:m%计算隐层输出for j=1:n+1ca=0;for k=1:nca=ca+v(k,j)*x(i,k);endb(i,j)=1/(1+exp(-ca+thy(j)));end%计算输出层输出for j=1:tcb=0;for k=1:n+1cb=cb+w(k,j)*b(i,k);endty(i,j)=1/(1+exp(-cb+thj(j)));endend%用来存累计误差对四个变量的下降方向tv=zeros(n,n+1);tw=zeros(n+1,t);tthy=zeros(n+1);tthj=zeros(t);%计算累计误差for i=1:mfor j=1:tey=ey+((y(i)-ty(i,j))^2)/2;end%计算w,thj导数参数for j=1:tgj(j)=ty(i,j)*(1-ty(i,j))*(y(i)-ty(i,j));end%计算v,thy导数参数for j=1:n+1teh=0;for k=1:tteh=teh+w(j,k)*gj(k);endeh(j)=teh*b(i,j)*(1-b(i,j));end%计算w,thj导数for j=1:n+1tthy(j)=tthy(j)+(-1)*eh(j);for k=1:ntv(k,j)=tv(k,j)+k*eh(j)*x(i,k);endend%计算v,thy导数for j=1:ttthj(j)=tthj(j)+(-1)*gj(j);for k=1:n+1tw(k,j)=tw(k,j)+gj(j)*b(i,k);endend end%更新参数v=v+tk*tv;w=w+tk*tw;thy=thy+tk*tthy;tthj=thj+tk*tthj;%迭代终止条件EY_ABP(kn) = ey;if(abs(old_ey-ey)<0.0001)sn=sn+1;if(sn==50)break;endelseold_ey=ey;sn=0;end
end
save('EY_ABP.mat','EY_ABP');

西瓜书:一般来说,标准BP算法每次更新只针对单个样本,参数更新地非常频繁,而且对不同地样例进行更新的效果可能出现抵消的现象,因此,达到同样的累积误差极小值点,标准BP算法往往需要更多的迭代次数。累积BP算法直接对累积误差最小化,它在读取整个训练集D一遍后才对参数进行更新,其参数的更新频率低很多,在很多任务中,累积误差下降到一定程度之后,进一步下降会非常缓慢,这时候,标准BP往往会获得较好的解,尤其在训练集D非常大的时候更加明显。

标准BP算法与累积BP算法之间的区别,类似于随机梯度下降(SGD)与标准梯度下降之间的区别。

相关python实现可参考:

https://blog.csdn.net/qdbszsj/article/details/79110888

BP算法与累积BP算法相关推荐

  1. 标准BP算法、累积BP算法Python实现

    标准BP,累积BP算法原理及MATLAB自编写实现在这里 以下是自己编写的Python的代码,欢迎指正 标准BP算法: import numpy as npx=np.matrix(np.random. ...

  2. bp算法和nlp算法_西瓜书5.5 编程实现BP神经网络——标准BP算法、累积BP算法

    这里照着书上的公式,实现了一下标准BP算法,和累积BP算法,BP是error Back Propagation的意思,误差逆传播.BP网络通常是指用BP算法训练的多层前馈神经网络.代码是照着书本公式自 ...

  3. 深度学习 --- BP算法详解(流程图、BP主要功能、BP算法的局限性)

    上一节我们详细推倒了BP算法的来龙去脉,请把原理一定要搞懂,不懂的请好好理解BP算法详解,我们下面就直接把上一节推导出的权值调整公式拿过来,然后给出程序流程图,该流程图是严格按照上一节的权值更新过程写 ...

  4. Interview:算法岗位面试—上海某科技公司算法岗位(偏AI算法,国企)技术面试之BN层的认知、BP的推导、GD优化的几种改进等

    Interview:算法岗位面试-上海某科技公司算法岗位(偏AI算法,国企)技术面试之BN层的认知.BP的推导.GD优化的几种改进等 导读:关于神经网络,问的比较深,因为博主做过总结,所以用自己的语言 ...

  5. DL之DNN之BP:神经网络算法简介之BP算法/GD算法之不需要额外任何文字,只需要八张图讲清楚BP类神经网络的工作原理

    DL之DNN之BP:神经网络算法简介之BP算法/GD算法之不需要额外任何文字,只需要八张图讲清楚BP类神经网络的工作原理 目录 BP类神经网络理解 1.信号正向传播FP 2.误差反向传播BP+GD B ...

  6. DL之BP:神经网络算法简介之BP算法简介(链式法则/计算图解释)、案例应用之详细攻略

    DL之BP:神经网络算法简介之BP算法简介(链式法则/计算图解释).案例应用之详细攻略 相关文章:DL之DNN之BP:神经网络算法简介之BP算法/GD算法之不需要额外任何文字,只需要八张图讲清楚BP类 ...

  7. 简单易学的机器学习算法——神经网络之BP神经网络

    一.BP神经网络的概念     BP神经网络是一种多层的前馈神经网络,其主要的特点是:信号是前向传播的,而误差是反向传播的.具体来说,对于如下的只含一个隐层的神经网络模型: (三层BP神经网络模型) ...

  8. MATLAB中BP神经网络用于回归拟合算法实现(另附GRNN代码)

    BP神经网络:是1986年由Rumelhart和McClelland为首的科学家提出的概念,是一种按照误差逆向传播算法训练的多层前馈神经网络,是目前应用最广泛的神经网络.神经网络是把生活中的常见情节推 ...

  9. BP神经网络求解异或算法

    BP神经网络求解异或算法 目录 BP神经网络求解异或算法 一.BP神经网络 二.激活函数 三.异或求解 一.BP神经网络 BP算法包括信号的前向传播和误差的反向传播两个过程.即计算误差输出时按从输入到 ...

最新文章

  1. c hello world_C 字符串
  2. 【算法】快速排序与归并排序对比
  3. 如何让hybris启动加快
  4. 三阶矩阵的lu分解详细步骤_快速入门矩阵运算——开源库Eigen
  5. 8006.ros2发布与订阅
  6. 程序设计与算法----递归汉诺塔问题
  7. 【渝粤教育】国家开放大学2018年春季 0175-22T社会调查研究与方法 参考试题
  8. 绿云酒店管理系统 服务器要求,绿云宾馆管理软件-系统基础.doc
  9. 读《别在该努力的年纪,徘徊不前》有感
  10. 未了(endless)([CCF] NOI Online 能力测试2 入门组第一题)
  11. matlab中二维插值中cubic方法的实现原理(个人见解)
  12. Intel千兆网卡驱动Linux系统下安装方法
  13. 博客书写-教师节收益
  14. JS和jQuery通过this获取html标签中的属性值
  15. mysql ocp 认证 题库_MySQL 8 OCP(1Z0-908)认证考试题库原题(第12题)
  16. 2019第十六届研究生数学建模竞赛--跨越五年从本科省二到研赛国一
  17. 迅速提高网站流量的方法
  18. 云计算和大数据的标准化需求和标准化组织有哪些?
  19. 项目目标文档(河创平台项目)
  20. 获取application.yml配置文件中配置的对象集合

热门文章

  1. 在速变的区块链行业,如何高效地学习与思考? |链捕手
  2. FFT中的汉宁窗 C#
  3. 进度计划:什么是关键路径管理 1/2
  4. [转]原子模型的历史演变
  5. 单点登录,同域名下有和非同域名下的登录
  6. 随机造句工具-曾经四五千块的工资工作的产物现在想想
  7. python下载速度慢
  8. QTimer::singleShot + lambda
  9. 北科大matlab,教学反思怎么写北科大Matlab_数学实验报告1~6次(全)亲情作文开头
  10. 视频图像去重复 修改视频MD5