西瓜书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. 《Android 开发入门与实战(第二版)》——6.6节配置改变
  2. python sort 部分元素_Python 犄角旮旯--List
  3. python ctypes库5_如何传递一个字符串数组
  4. FPGA的发展历史及相关名词解释
  5. java 当前时间的前一天_java获取当前日期的前一天和后一天
  6. MVC模式在Java Web应用程序中的实例分析
  7. SEE Conf: Umi 4 设计思路文字稿
  8. 洛谷——P1478 陶陶摘苹果(升级版)
  9. 快播王欣:区块链今天最重要的成果还只是理念布道
  10. spring邮件发送(转)
  11. docker容器管理及网络管理
  12. echart 折线统计图
  13. memcached php封装类,PHP Memcached + APC + 文件缓存封装_PHP - key
  14. 登录 SharePoint Online
  15. 没有你看不懂的Kmeans聚类算法
  16. Python 教你用OpenCV实现给照片换底色
  17. pos机属于计算机系统吗,pos机与计算机有什么区别
  18. mapi java_[Security:090504]Certificate chain received from mapi.alipay.com
  19. LED驱动电源不足,都有哪些原因
  20. linux--redis(redis在lnmp中做加速器2)

热门文章

  1. 近40个开源的工业软件-工业4.0
  2. 值得收藏!20个Python奇技淫巧,让你受益匪浅!
  3. 扎堆造芯,巨头拼什么?
  4. 星巴克和瑞幸背后,什么是中国人喝咖啡的「真相」?
  5. 机械硬盘每十秒左右“咔哒”响一声是怎么回事?
  6. 关于车机挂断蓝牙电话后使用方控调节音量,默认调节的音频流应为媒体流,实际却是电话流的问题解决
  7. 【时间序列预测】Autoformer 长时间序列预测
  8. 深入解读 HTML5
  9. python控制windows 任务计划程序 获取具体单一任务
  10. 最新商标局注册商标,商标变更规费清单。