《神经网络算法含感知器和B.ppt》由会员分享,可在线阅读,更多相关《神经网络算法含感知器和B.ppt(38页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、主讲:何仁斌实际应用问题 1、蠓虫的分类问题2、DNA序列分类问题3、癌症诊断问题神经网络算法简介 感知器感知器(perceptron)是由美国科学家于1957年提出的,其目的是为了模拟人脑的感知和学习能力。感知器是最早提出的一种神经网络模型。它特别适合于简单的模式分类问题,如线性可分的形式。神经网络算法简介以两个输入的单层感知器神经元为例w(1,1)w(1,2)p(1)p(2)nabw 权重;b 阈值如果设 w(1,1)=-1,w(1,2)=2,b=1L-b/w(1,2)-b/w(1,1)wp+b0a=1 wp+b0a=0 单层感知器 多层感知器w(1,1)w(1,2)p1p2na2b1b2
2、n2a2n1a1b1w(2,1)w(2,2)性能指标:均方误差达到最小涉及算法注意:单层感知器的局限性是:仅对线性可分问题具有分类能力。分类问题的MATLAB软件实现以蠓虫分类问题为例%输入向量P=1.241.36 1.38 1.38 1.38 1.4 1.48 1.54 1.56 1.14 1.18 1.2 1.26 1.28 1.3;1.72 1.74 1.64 1.82 1.9 1.7 1.82 1.82 2.08 1.78 1.96 1.86 2.0 2.0 1.96;%目标向量T=1 1 1 1 1 1 1 1 1 0 0 0 0 0 0;%绘制输入向量plotpv(P,T);1)单
3、层感知器w(1,1)w(1,2)p(1)p(2)nab%建立一个感知器net=newp(0 3;0 3,1);%绘制输入向量plotpv(P,T);%初始化感知器net=init(net);%画出分类线net.iw 1,1net.b 1linehandle=plotpc(net.iw 1,1,net.b 1);%作wx+b=0的分类线分类问题的MATLAB软件实现分类问题的MATLAB软件实现E=1;%修正感知器网络while(sse(E)%sse 返回误差的平方 net,Y,E=adapt(net,P,T);%返回学习后的网络,Y是输出,E是误差 linehandle=plotpc(net.
4、IW 1,net.b 1,linehandle);%分界线绘制函数 drawnow;%更新分界线end;%利用训练好的感知器对未知类别样本进行分类p=1.24,1.28,1.4;1.8,1.84,2.04;a=sim(net,p);plotpv(p,a);ThePoint=findobj(gca,type,line);set(ThePoint,Color,red);hold on;plotpv(P,T);plotpc(net.IW 1,net.b 1);hold off;disp(End of percept)分类问题的MATLAB软件实现分类结果:AfApf以上结果是图形化的结果,如下给出数
5、值化的结果:P=1.241.36 1.38 1.38 1.38 1.4 1.48 1.54 1.56 1.14 1.18 1.2 1.26 1.28 1.3;1.72 1.74 1.64 1.82 1.9 1.7 1.82 1.82 2.08 1.78 1.96 1.86 2.0 2.0 1.96;%目标向量T=1 1 1 1 1 1 1 1 1 0 0 0 0 0 0;%建立一个感知器net=newp(0 3;0 3,1);%网络训练次数net.adaptParam.passes=100net=adapt(net,P,T);%返回自适应的神经网络%输出仿真结果Y=sim(net,P)%利用训
6、练好的感知器进行分类p=1.24,1.28,1.4;1.8,1.84,2.04;a=sim(net,p)仿真结果:Y=Columns 1 through 11 1 1 1 1 1 1 1 1 1 0 0 Columns 12 through 15 0 0 0 0a=1 1 1准确率达到100%。BP网络(Back-Propagation Network)目前,在人工神经网络的实际应用中,决大部分的神经网络模型是采用BP网络和它的变化形式。BP网络主要用于:函数逼近 模式识别 分类 数据压缩 学习过程由信号的正向传播与反向传播两个过程组成。正向传播时,输入样本从输入层传入,经各隐层逐层处理后,传
7、向输出层。若输出层的实际输出与期望输出(教师信号)不符合时,则转入误差的反向传播阶段。误差反传是将输出误差以某种形式通过隐层向输入层逐层反传,并将误差分摊给各层的所有单元,从而获得各层单元的误差信号,此信号作为修正各单元权值的依据。BP算法的基本思想:x1x2xixn-1xny1y2yjymW1WkWlo1okol输入层隐层输出层隐层到输出层之间的权值矩阵:W=W1,W2,Wl 1、网络结构2、各层信号之间的数学关系输出层 ok=f(netk),netk=j=0:mwjkyj,k=1,2,l,对隐层 yk=f(netj),netj=i=0:nvijxi,j=1,2,m,传递函数一般用:f(x)
8、=1/(1+exp(-x)(s型函数)误差函数:Eh=0.5*(j=0:l(thj-ohj)2),thj,ohj分别为期望输出和网络的实际输出。MATLAB中有关BP网络的重要函数newff 创建前向BP网络格式:net=newff(PR,S1 S2.SNl,TF1 TF2.TFNl,BTF,BLF,PF)其中:PR R维输入元素的R2阶最大最小值矩阵;Si 第i层神经元的个数,共N1层;TFi 第i层的转移函数,默认tansig;BTF BP网络的训练函数,默认trainlm;BLF BP权值/偏差学习函数,默认learngdm PF 性能函数,默认mse;(误差)MATLAB中有关BP网络
9、的重要函数例如:net=newff(0 20;0 16;0 12;0 12;0 13,5 1,logsig purelin,traingdx);三层神经网络结构:中间层为5输出层为1输入层5维向量的取值范围训练函数转移函数(1)purelin 线性传递函数;(2)tansig 双曲正切S型(sigmoid)传递函数;(3)logsig 对数S型(sigmoid)传递函数;1、转移函数:(1)(2)(3)2、训练函数:trainlm Levenberg-Marquardt的BP算法训练函数;trainbfg BFGS拟牛顿BP算法训练函数;trainrp 具有弹性的BP算法训练;traingd
10、梯度下降是BP算法训练;traingda 梯度下降自适应lr的BP算法训练;traingdm 梯度下降动量的BP算法训练;traingdx 梯度下降动量和自适应lr的BP算法训练;如果对神经网络的输入、输出数据进行一定的预处理,可以加快网络的训练速度。有三种方法:1)归一化 将每组数据都变为-1至1之间的数,matlab中有函数:premnmx,postmnmx,tramnmx算法:pn=2*(p-minp)/(maxp-minp)-1;2)标准化 将每组数据变换为均值为0,方差为1的数,所涉及的函数有:prestd,posttd,trastd 3)正交化 主成分分析也可以将数据进行正交处理,
11、减少输入数据的处理,函数有:prepca,trapca.注意:数据预处理P=0 1 2 3 4 5 6 7 8 9 10;%输入向量 T=0 1 2 3 4 3 2 1 2 3 4;%期望输出 例:%创建两层的BP网络:net=newff(0 10,5 1,tansig,purelin);Y=sim(net,P);%输出仿真结果plot(P,T,P,Y,o)%作图,未经过训练的结果或net.trainParam.epochs=50;net=train(net,P,T);Y=sim(net,P);plot(P,T,P,Y,o)%作图 训练后的结果Y=-2.3431 -2.7532 -2.4510
12、 -1.2784 -0.8590 -0.2981 T=0 1 2 3 4 3 2 1 2 3 4;%期望输出第一种情况的输出结果:误差很大!未训练,非线性映射能力差。T=0 1 2 3 4 3 2 1 2 3 4;%期望输出第二种情况的输出结果:思考:究竟误差有多大?修改程序:P=0 1 2 3 4 5 6 7 8 9 10;T=0 1 2 3 4 3 2 1 2 3 4;net=newff(0 10,5 1,tansig purelin);net.trainparam.show=50;%每次循环50次net.trainParam.epochs=500;%最大循环500次net.trainpa
13、ram.goal=0.01;%期望目标误差最小值net=train(net,P,T);%对网络进行反复训练Y=sim(net,P)figure%打开另外一个图形窗口plot(P,T,P,Y,o)第二种情况的输出结果:范例:DNA序列模式分类问题一、问题 假定已知两组人工已分类的DNA序列(20个已知类别的人工制造的序列),其中序列标号110 为A类,11-20为B类。要求我们从中提取已经分类了的DNA序列片段的特征和构造分类方法,并且还要衡量所用分类方法的好坏,从而构造或选择一种较好的分类方法。测试对象是20个未标明类别的人工序列(标号2140)和182个自然DNA序列。例如A类:a1=agg
14、cacggaaaaacgggaataacggaggaggacttggcacggcattacacggaggacgaggtaaaggaggcttgtctacggccggaagtgaagggggatatgaccgcttgg;b1=gttagatttaacgttttttatggaatttatggaattataaatttaaaaatttatattttttaggtaagtaatccaacgtttttattactttttaaaattaaatatttatt;二、特征提取 序列中含有四个碱基a、g、t、c,反映该序列特征的方面主要有两个:1、碱基的含量,反映了该序列的内容;统计a、g、t、c序列中分别出现的频率
15、;2、碱基的排列情况,反映了该序列的形式;从字符出现的周期性来反映。统计三个字符出现的频率;在遗传学中每三个碱基的组合被称为一个密码子,如agg,att,ggc,cgg等,共有43=64个,还可以由密码子组成20个氨基酸。三、神经网络对DNA序列分类问题的应用 假定提取已知序列类别的三字符串,如agg,att,ggc,cgg,共有43=64个,将它简化成只有5个:ttt,tta,ggc,cgg,gga。统计出任意一个DNA序列片段的5维向量,即每个特征字符串在序列中出现的频数作为分量。a1=aggcacggaaaaacgggaataacggaggaggacttggcacggcattacacgg
16、aggacgaggtaaaggaggcttgtctacggccggaagtgaagggggatatgaccgcttgg;编程统计出该片段的字符串(ttt,tta,ggc,cgg,gga)的频数分别为:(0,1,5,7,10)经过统计计算,得到已知类别的输入向量:p=0 1 0 5 1 3 2 2 2 1 19 18 23 17 43 12 2 17 19 23;1 2 0 4 1 1 1 4 0 1 13 15 13 11 9 9 2 14 12 7;5 5 8 0 10 9 5 7 11 9 0 0 1 0 0 0 3 1 0 0;7 10 16 2 11 9 6 5 8 6 0 0 0 1
17、 0 0 3 2 0 0;10 11 15 2 11 12 12 9 5 6 2 1 1 1 0 1 1 0 1 1;待判类别的输入向量:P=9 2 3 13 3 15 3 10 3 2 6 5 9 2 2 2 2 16 2 18;7 4 4 8 5 9 6 12 3 3 12 4 7 3 2 4 4 10 2 10;0 0 4 1 5 0 2 1 7 0 2 2 0 4 2 1 3 1 2 1;0 2 8 0 1 1 5 0 7 0 1 3 0 3 3 1 1 1 0 2;2 3 9 1 2 1 8 1 5 0 2 1 1 5 4 1 3 1 1 2;由前20个已知类别的DNA序列片段可以构
18、造出目标向量:t=1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0;1、应用感知器对DNA序列进行分类:()net=newp(0 1;0 1;0 1;0 1;0 1,1);net.adaptParam.passes=110net=adapt(net,p,t);Y=sim(net,p)%回代检验a=sim(net,P)%对待判类别的序列进行分类A 类B 类a=0 1 1 0 0 0 1 0 1 0 0 0 0 1 1 0 1 0 0 0回代检验结果是100%的准确。待判序列的分类结果:A类:22,23,27,29,34,35,37;B类:21,24,25,26,28
19、,30,31,32,33,36,38,39,40;输出结果:a=0 1 1 0 0 0 1 0 1 0 0 0 0 1 1 0 1 0 0 0并附图形:获得数值分类结果:()net=newp(0 1;0 1;0 1;0 1;0 1,1);net.adaptParam.passes=110net=adapt(net,p,t);Y=sim(net,p)%回代检验a=sim(net,P)%对待判类别的序列进行分类输出结果:误差曲线图2、应用BP网络对DNA序列进行分类:()net=newff(0 20;0 16;0 12;0 12;0 13,3 1,logsig purelin,traingdx);net.trainparam.show=100;%两次显示之间的训练步数net.trainparam.lr=0.5;net.trainparam.mc=0.8;net.trainparam.epochos=20000;net.trainparam.goal=0.01;%训练目标net,tr=train(net,p,t);Y=sim(net,p)a=sim(net,P)回代检验结果也是100%的准确。待判序列的分类结果:同上输出结果:误差曲线图思考:1、前面所述的特征提取为:ttt,tta,ggc,cgg,gga,是否合理?2、请给出另外的特征重新计算!3、分析改进后的误差。
限制150内