机器学习(周志华) 参考答案 第五章 神经网络 5.5
2016-08-03 19:06
429 查看
机器学习(周志华) 参考答案 第五章 神经网络 5.5
机器学习(周志华西瓜书) 参考答案 总目录http://blog.csdn.net/icefire_tyh/article/details/52064910
机器学习(周志华) 参考答案 第五章 神经网络
http://blog.csdn.net/icefire_tyh/article/details/52106899
BP网络算是这章最重要的算法了,它提供了一种基于导数的训练大部分神经网络的思路
5.试编程实现标准BP算法与累积BP算法,在西瓜数据集3.0上分别用这两个算法训练一个单隐层网络,并进行比较。
假设一个单隐层BP网络中
d个输入节点
隐层有q个神经元
输出层l个神经元
BP算法要训练的参数有
输入层与隐层全连接的权值vij d*q个
隐层神经元阀值 θi q个
隐层与输出层全连接的权值wij q*l个
输出层神经元阀值 γi l个
BP算法每次迭代依次计算每一个样本,最小化该样本输出值与真实值的差距,然后将修改过参数传给下一个样本,直到达到收敛条件。这样做参数更新频繁,也可能出现参数更改相互抵销的情况,于是便有了ABP。
ABP算法每次迭代会先算出所有样本的输出,然后最小化整个样本输出与真实值的最小平方和,修改参数后进行下一次迭代。ABP参数更新次数比BP算法少的多,但是当累计误差降到一定程度时,进一步下降会非常缓慢。
迭代终止条件:这里设置的终止条件是相邻一百次迭代的累计误差的差值不超过0.001。
BP算法结果:
在西瓜数据集3上迭代1596次迭代,使得累计误差达到0.0013,此时对比表为
输出值 | 真实值 |
---|---|
0.000574239 | 0 |
0.003128893 | 0 |
0.001880475 | 0 |
0.016725407 | 0 |
0.019083811 | 0 |
0.993134077 | 1 |
0.993662799 | 1 |
0.977969458 | 1 |
0.990724507 | 1 |
0.987087467 | 1 |
0.005125069 | 0 |
0.008542622 | 0 |
0.023722006 | 0 |
0.99006993 | 1 |
0.99689923 | 1 |
0.989569681 | 1 |
0.986590243 | 1 |
clear x = xlsread('C:\Users\icefire\Desktop\ml\西瓜3.xlsx', 'sheet1', 'A1:Q8'); y = xlsread('C:\Users\icefire\Desktop\ml\西瓜3.xlsx', 'sheet1', 'A9:Q9'); x=x'; y=y'; %将y设为0,1两类 y=y-1; %获取输入参数的样本数与参数数 [m,n]=size(x); t=1; %输出层神经元 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; %前一次迭代的累计误差 while(1) kn=kn+1; ey=0; %当前迭代的累计误差 for i=1:m %计算隐层输出 for j=1:n+1 ca=0; for k=1:n ca=ca+v(k,j)*x(i,k); end b(j)=1/(1+exp(-ca+thy(j))); end %计算输出层输出 for j=1:t cb=0; for k=1:n+1 cb=cb+w(k,j)*b(k); end ty(i,j)=1/(1+exp(-cb+thj(j))); end %计算当前迭代累计误差 for j=1:t ey=ey+((y(i)-ty(i,j))^2)/2; end %计算w,thj导数参数 for j=1:t gj(j)=ty(i,j)*(1-ty(i,j))*(y(i)-ty(i,j)); end %计算v,thy导数参数 for j=1:n+1 teh=0; for k=1:t teh=teh+w(j,k)*gj(k); end eh(j)=teh*b(j)*(1-b(j)); end %更新v,thy for j=1:n+1 thy(j)=thy(j)+(-xk)*eh(j); for k=1:n v(k,j)=v(k,j)+k*eh(j)*x(i,k); end end %更新thj,w for j=1:t thj(j)=thj(j)+(-xk)*gj(j); for k=1:n+1 w(k,j)=w(k,j)+xk*gj(j)*b(k); end end end %迭代终止判断 if(abs(old_ey-ey)<0.0001) sn=sn+1; if(sn==100) break; end else old_ey=ey; sn=0; end end
ABP:与BP算法最大的不同是参数在计算完全部样本才更改,由于ABP后期下降很慢,所以ABP的终止条件是50次相同的累计误差。
经过1660次迭代,累计误差达到0.0015。
输出值 | 真实值 |
---|---|
0.00337534523762459 | 0 |
0.00197885866471479 | 0 |
0.00379711463016395 | 0 |
0.0205696800567297 | 0 |
0.0208229173910228 | 0 |
0.994965085512552 | 1 |
0.989507102641039 | 1 |
0.966100739459433 | 1 |
0.993137548630017 | 1 |
0.993568720687235 | 1 |
0.00820831499581366 | 0 |
0.0106159051815879 | 0 |
0.0199653750774157 | 0 |
0.995719300147538 | 1 |
0.993319830282617 | 1 |
0.992253246322361 | 1 |
0.986823143409678 | 1 |
clear x = xlsread('C:\Users\icefire\Desktop\ml\西瓜3.xlsx', 'sheet1', 'A1:Q8'); y = xlsread('C:\Users\icefire\Desktop\ml\西瓜3.xlsx', 'sheet1', 'A9:Q9'); x=x'; y=y'; y=y-1; [m,n]=size(x); t=1; %输出层神经元 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; %前一次迭代的累计误差 while(1) kn=kn+1; ey=0;%当前迭代的累计误差 %计算全部样本输出层输出 for i=1:m %计算隐层输出 for j=1:n+1 ca=0; for k=1:n ca=ca+v(k,j)*x(i,k); end b(i,j)=1/(1+exp(-ca+thy(j))); end %计算输出层输出 for j=1:t cb=0; for k=1:n+1 cb=cb+w(k,j)*b(i,k); end ty(i,j)=1/(1+exp(-cb+thj(j))); end end %用来存累计误差对四个变量的下降方向 tv=zeros(n,n+1); tw=zeros(n+1,t); tthy=zeros(n+1); tthj=zeros(t); %计算累计误差 for i=1:m for j=1:t ey=ey+((y(i)-ty(i,j))^2)/2; end %计算w,thj导数参数 for j=1:t gj(j)=ty(i,j)*(1-ty(i,j))*(y(i)-ty(i,j)); end %计算v,thy导数参数 for j=1:n+1 teh=0; for k=1:t teh=teh+w(j,k)*gj(k); end eh(j)=teh*b(i,j)*(1-b(i,j)); end %计算w,thj导数 for j=1:n+1 tthy(j)=tthy(j)+(-1)*eh(j); for k=1:n tv(k,j)=tv(k,j)+k*eh(j)*x(i,k); end end %计算v,thy导数 for j=1:t tthj(j)=tthj(j)+(-1)*gj(j); for k=1:n+1 tw(k,j)=tw(k,j)+gj(j)*b(i,k); end end end %更新参数 v=v+tk*tv; w=w+tk*tw; thy=thy+tk*tthy; tthj=thj+tk*tthj; %迭代终止条件 if(abs(old_ey-ey)<0.0001) sn=sn+1; if(sn==50) break; end else old_ey=ey; sn=0; end end
相关文章推荐
- 机器学习(周志华) 参考答案 第五章 神经网络 5.7
- <机器学习>(周志华)读书笔记 -- 第五章 神经网络
- 机器学习+周志华+第五章习题+解决异或问题的单层RBF神经网络
- 机器学习(周志华)_第五章神经网络
- 周志华 《机器学习》之 第五章(神经网络)概念总结
- 机器学习(周志华) 参考答案 第十三章 半监督学习 13.10
- 机器学习(周志华西瓜书) 参考答案 总目录
- 机器学习(周志华西瓜书) 参考答案 总目录
- 机器学习(周志华) 参考答案 第七章 贝叶斯分类器 7.6
- 《机器学习》周志华 习题答案5.5
- 机器学习(周志华) 参考答案 第九章 聚类 9.4
- 机器学习(周志华) 参考答案 第十四章 概率图模型 14.9
- 机器学习(周志华) 参考答案 第十章 降维与度量学习 10.6
- 《机器学习》周志华版参考答案
- 机器学习(周志华) 参考答案 第四章 决策树 4.10
- 机器学习(周志华) 参考答案 第六章 支持向量机 6.9
- 机器学习(周志华) 参考答案 第十五章 规则学习 15.1
- 《机器学习(周志华)》 习题5.5答案
- 机器学习(周志华) 参考答案 第四章 决策树 4.4
- 《机器学习(周志华)》 习题9.4参考答案