R语言与机器学习--分类算法.docx

上传人:牧羊曲112 文档编号:4889005 上传时间:2023-05-21 格式:DOCX 页数:11 大小:142.82KB
返回 下载 相关 举报
R语言与机器学习--分类算法.docx_第1页
第1页 / 共11页
R语言与机器学习--分类算法.docx_第2页
第2页 / 共11页
R语言与机器学习--分类算法.docx_第3页
第3页 / 共11页
R语言与机器学习--分类算法.docx_第4页
第4页 / 共11页
R语言与机器学习--分类算法.docx_第5页
第5页 / 共11页
亲,该文档总共11页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《R语言与机器学习--分类算法.docx》由会员分享,可在线阅读,更多相关《R语言与机器学习--分类算法.docx(11页珍藏版)》请在三一办公上搜索。

1、R语言与机器学习-分类算法(三)三、BP神经网络1、sigmoid函数分类回顾我们前面提到的感知器,它使用示性函数作为分类的办法。然 而示性函数作为分类器它的跳点让人觉得很难处理,幸好sigmoid函数 y=1/(1 eA-x)有类似的性质,且有着光滑性这一优良性质。我们通过下图 可以看见sigmoid函数的图像:-420240-40200204060Sigmoid函数有着计算代价不高,易于理解与实现的优点但也有着欠 拟合,分类精度不高的特性,我们在支持向量机一章中就可以看到 sigmoid函数差劲的分类结果。2、BP神经网络结构BP (Back Propagation )神经网络,即误差反传

2、误差反向传播算法的学 习过程,由信息的正向传播和误差的反向传播两个过程组成。由下图可 知,BP神经网络是一个三层的网络:输入层(input layer):输入层各神经元负责接收来自外界的输入信息, 并传递给中间层各神经元;隐藏层(Hidden Layer):中间层是内部信息处理层,负责信息变换,根 据信息变化能力的需求,中间层可以设计为单隐层或者多隐层结构;最 后一个隐层传递到输出层各神经元的信息,经进一步处理后,完成一次 学习的正向传播处理过程;输出层(Output Layer):顾名思义,输出层向外界输出信息处理结果;当实际输出与期望输出不符时,进入误差的反向传播阶段。误差通 过输出层,按

3、误差梯度下降的方式修正各层权值,向隐藏层、输入层逐 层反传。周而复始的信息正向传播和误差反向传播过程,是各层权值不 断调整的过程,也是神经网络学习训练的过程,此过程一直进行到网络 输出的误差减少到可以接受的程度,或者预先设定的学习次数为止。3、反向传播算法反向传播这一算法把我们前面提到的delta规则的分析扩展到了带有 隐藏节点的神经网络。为了理解这个问题,设想Bob给Alice讲了一个 故事,然后Alice又讲给了 Ted,Ted检查了这个事实真相,发现这个 故事是错误的。现在Ted需要找出哪些错误是Bob造成的而哪些又归 咎于Aliceo当输出节点从隐藏节点获得输入,网络发现出现了误差,

4、权系数的调整需要一个算法来找出整个误差是由多少不同的节点造成 的,网络需要问,“是谁让我误入歧途?到怎样的程度?如何弥补? ”这 时,网络该怎么做呢?同样源于梯度降落原理,在权系数调整分析中的唯一不同是涉及到 t(p,n)与y(p,n)的差分。通常来说Wi的改变在于:alpha * s(a(p,n) * d(n) *X(p,i,n)其中d(n)是隐藏节点n的函数,让我们来看:n对任何给出的输出节点有多大影响;输出节点本身对网络整体的误差有多少影响。一方面,n影响一个输出节点越多,n造成网络整体的误差也越多。 另一方面,如果输出节点影响网络整体的误差越少,n对输出节点的影 响也相应减少。这里d是

5、对网络的整体误差的基值,W(n,j)是n对j 造成的影响,d* W(n,j)是这两种影响的总和。但是n几乎总是影响 多个输出节点,也许会影响每一个输出结点,这样,d(n)可以表示为: SUM(d(j)*W(n,j)这里j是一个从n获得输入的输出节点,联系起来,我们就得到了 一个培训规则。第1部分:在隐藏节点n和输出节点j之间权系数改变,如下所示: alpha *s(a(p,n)*(t(p,n) - y(p,n) * X(p,n,j)第2部分:在输入节点i和输出节点n之间权系数改变,如下所示: alpha *s(a(p,n) * sum(d (j) * W(n,j) * X(p,i,n)这里每个

6、从n接收输入的输出节点j都不同。关于反向传播算法的 基本情况大致如此。通常把第1部分称为正向传播,把第2部分称为反向传播。反向传 播的名字由此而来。4、最速下降法与其改进最速下降法的基本思想是:要找到某函数的最小值,最好的办法是 沿函数的梯度方向探寻,如果梯度记为d,那么迭代公式可写为 w=w-alpha*d,其中alpha可理解为我们前面提到的学习速率。最速下降法有着收敛速度慢(因为每次搜索与前一次均正交,收敛 是锯齿形的),容易陷入局部最小值等缺点,所以他的改进办法也有不 少,最常见的是增加动量项与学习率可变。增加冲量项(Momentum)修改权值更新法则,使第n次迭代时的权值的更新部分地

7、依赖于发 生在第n-1次迭代时的更新Delta (w) (n)=-alpha*(1-mc)*Delta(w)(n) mc*Delta(w)(n-1)右侧第一项就是权值更新法则,第二项被称为冲量项。梯度下降的 搜索轨迹就像一个球沿误差曲面滚下,冲量使球从一次迭代到下一次迭 代时以同样的方向滚动冲量有时会使这个球滚过误差曲面的局部极小 值或平坦区域,冲量也具有在梯度不变的区域逐渐增大搜索步长的效 果,从而加快收敛。改变学习率当误差减小趋近目标时,说明修正方向是正确的,可以增加学习率; 当误差增加超过一个范围时,说明修改不正确,需要降低学习率。5、BP神经网络的实现(1) 数据读入,这里我们还是使用

8、R的内置数据一一鸢尾花数据, 由于神经网络本质是2分类的,所以我们将鸢尾花数据也分为两类(将 前两类均看做第2类),按照特征:花瓣长度与宽度做分类。(2) 划分训练数据与测试数据(3) 初始化BP网络,采用包含一个隐含层的神经网络,训练方法 使用包含动量的最速下降法,传递函数使用sigmoid函数。(4) 输入样本,对样本进行归一化,计算误差,求解误差平方和(5) 判断是否收敛(6) 根据误差调整权值。权值根据以下公式进行调整:Delta(w)= alpha *s(a(p,n)*(t(p,n) - y(p,n) * X(p,n,j)其中,alpha为学习率,s(a(p,n)*(t(p,n)-

9、y(p,n)为局部梯度。此外, 由于使用了有动量因子的最速下降法,除第一次外,后续改变量应为:Delta(w)(n)=-alpha*(1-mc)*Delta(w)(n) mc*Delta(w)(n-1)(7) 测试,输出分类正确率。完整的R代码:01 .|i pi。1-亦.m狗pi02 .irisl-cbind(irisl,c(rep(l,100),rep(0,50)03 .jset.seed(5)04 .n-length(irisl1)05 .samp-sample(l:n,n/5)06.traind-irisl-samp,c(l,2)07. jtrainl-irisl-samp,308.t

10、estd-irislsampJc(l,2)09. jtestl-irislsamp,313. |11.set.seed(l)12 .ntrainnum-12613. nsampdim-214. |15 .net.nin-216. net.nhiddcn 217. net.nout-l.nhiddennet.nin)18 .w-2*matrix(runif(net.nhidden*net.nin)-0.5,19.b-2*(runif(net nhidden)-0.5)23 .net .wl-cbind(vj,b)21 . j W-2*matrix(runif (net nhidden*net.

11、nout )-6.5,net. noutnet .nhidden)22 .B-2*(runif(net.nout)-0.5)23. net .u/2-cbind(W,B)24. |25. jtraind_s-traind26 .traind_s,l-traind,l-mean(traind,l)27 .traind_s,2-traind,2-mean(traind,2)28 .traind_s,l-traind_s,l/sd(traind_s,l)29 .traind_s,2-traind_s,2/sci(traincl_s,2)30. |31 .sampinex-rbind(t(traind

12、_s),rep(lntrainnum)32. expectedout-trainl33. |34. eps-0.0135. a-e.336. mc-0.837. maxiter-200638. iter-039. |40. errrec-rep(0,maxiter)41 I I43.44. |45. |46.47 I48.49.m I51.52.53. |54.54. |56 - I57.58. |59 I60.61时I6,I64. |65. |66. |67. |63 - I69 |70.outrec-matrix(rep(Qntrainnummaxiter)ntrainnumj maxit

13、er)sigmoid - -Funczion(x)exp(-x)fr(i in 1:maxiTer)(hid_iinpuT -nez .wlXsampinex;hid_out-sigmoid(hid_input);out_impuzl - rbind(hid_out3 rep(lJ irzrainnum):out_itnpuT2 -ne-z .w2%*%out_inputl;out_out-sigmoid(ouT_input2);outreci-t(out_ouz):err -expec Tedout-ouTut;sse-5um(errA2);errrec i| -sse;izer-iTer

14、1;if(sse=eps)breaDelta-err*sigmoid(out_out)*(1-sigmoid(out_out)delta-(matrix(net.w21:(length(net.w2l,)-!)%*%Delta*sigmoid(hid_out)*(1-sigmoid(hid_out);dWex-Delta%*%t(out_inputl)dwex-delta%*%t(sampinex)顼i=l)net.w2-net.w2 a*dWex;net.wl-net.wl adwex;71 - I72. I else73 . |net.w2-net.w2 (l-mc)*a*dWex mc*

15、dWexold;74. net.wl-net.wl (l-mc)*a*dv/ex mc*dv/exold;75. |76. |77. jdWexold-dWex;78. dv/exold-dv/ex;79. |80. I81.81. Testd_s -zestd8? .Testd j 1 -zestd , 1 -mean( testd , 1)84.std_s j 2 -zestd ,2_ -mean(testd , 2)85 d_s j 1 -zestd , 1 /sd( testd_s , 1)186 .Testd j 2 -zestd , 2 /sd( testd_s , 2)87.88

16、 .inex-rbind(t(testd_5)j reptl,150-ntrainnum)89 .Ihid_input-pet.wl%*%inex90 .Ihid_out-sigmoid(hid_input)E1.out_inputl - rbind(hid_Qut, reptl, 150-ntrainnum)92 out_input2-pet.w2%*%out_inputl9? .out_out-sigmoid(out_input2)94.out_outl-out_out95.96 .out_outlout_out 0.5=0.5-198.99 .rate-sum(out_outl=-zes-zl)/length(tesTl)分类正确率为:0.9333333,是一个不错的学习器。这里需要注意的 是动量因子mc的选取,mc不能过小,否则容易陷入局部最小而出不去, 在本例中,如果mc=0.5,分类正确率仅为:0.5333333,学习效果很不 理想。(未完待续。)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号