主讲:何仁斌实际应用问题1、蠓虫的分类问题2、DNA序列分类问题3、癌症诊断问题……神经网络算法简介•感知器感知器(perceptron)是由美国科学家F.Rosenblatt于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=1wp+b0a=0•单层感知器•多层感知器w(1,1)w(1,2)p1p2na2∑b1∑b2n2a2n1a1∑b1w(2,1)w(2,2)111221212(),()afwpbafwab性能指标:均方误差达到最小2(,)()minFwbEta涉及算法注意:单层感知器的局限性是:仅对线性可分问题具有分类能力。分类问题的MATLAB软件实现以蠓虫分类问题为例%输入向量P=[1.241.361.381.381.381.41.481.541.561.141.181.21.261.281.3;1.721.741.641.821.91.71.821.822.081.781.961.862.02.01.96];%目标向量T=[111111111000000];%绘制输入向量plotpv(P,T);11.21.41.61.81.41.51.61.71.81.922.12.22.3VectorstobeClassifiedP(1)P(2)1)单层感知器∑w(1,1)w(1,2)p(1)p(2)nab%建立一个感知器net=newp([03;03],1);%绘制输入向量plotpv(P,T);%初始化感知器net=init(net);%画出分类线net.iw{1,1}net.b{1}linehandle=plotpc(net.iw{1,1},net.b{1});%作wx+b=0的分类线分类问题的MATLAB软件实现0.911.11.21.31.41.51.61.71.81.41.51.61.71.81.922.12.22.3VectorstobeClassifiedP(1)P(2)分类问题的MATLAB软件实现E=1;%修正感知器网络while(sse(E))%sse返回误差的平方[net,Y,E]=adapt(net,P,T);%返回学习后的网络,Y是输出,E是误差linehandle=plotpc(net.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');holdon;plotpv(P,T);plotpc(net.IW{1},net.b{1});holdoff;disp('Endofpercept')分类问题的MATLAB软件实现11.21.41.61.81.41.51.61.71.81.922.12.22.3VectorstobeClassifiedP(1)P(2)分类结果:AfApf以上结果是图形化的结果,如下给出数值化的结果:mcfl1.mP=[1.241.361.381.381.381.41.481.541.561.141.181.21.261.281.3;1.721.741.641.821.91.71.821.822.081.781.961.862.02.01.96];%目标向量T=[111111111000000];%建立一个感知器net=newp([03;03],1);%网络训练次数net.adaptParam.passes=100net=adapt(net,P,T);%返回自适应的神经网络%输出仿真结果Y=sim(net,P)%利用训练好的感知器进行分类p=[1.24,1.28,1.4;1.8,1.84,2.04];a=sim(net,p)仿真结果:Y=Columns1through1111111111100Columns12through150000a=111准确率达到100%。•BP网络(Back-PropagationNetwork)目前,在人工神经网络的实际应用中,决大部分的神经网络模型是采用BP网络和它的变化形式。BP网络主要用于:◆函数逼近◆模式识别◆分类◆数据压缩学习过程由信号的正向传播与反向传播两个过程组成。正向传播时,输入样本从输入层传入,经各隐层逐层处理后,传向输出层。若输出层的实际输出与期望输出(教师信号)不符合时,则转入误差的反向传播阶段。误差反传是将输出误差以某种形式通过隐层向输入层逐层反传,并将误差分摊给各层的所有单元,从而获得各层单元的误差信号,此信号作为修正各单元权值的依据。BP算法的基本思想:x1x2xixn-1xn……y1y2yjym……W1WkWlo1okol……输入层隐层输出层隐层到输出层之间的权值矩阵: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)=1/(1+exp(-x))(s型函数)误差函数:Eh=0.5*(∑j=0:l(thj-ohj)2),thj,ohj分别为期望输出和网络的实际输出。MATLAB中有关BP网络的重要函数newff创建前向BP网络格式:net=newff(PR,[S1S2...SNl],{TF1TF2...TFNl},BTF,BLF,PF)其中:PR——R维输入元素的R×2阶最大最小值矩阵;Si——第i层神经元的个数,共N1层;TFi——第i层的转移函数,默认‘tansig’;BTF——BP网络的训练函数,默认‘trainlm’;BLF——BP权值/偏差学习函数,默认’learngdm’PF——性能函数,默认‘mse’;(误差)MATLAB中有关BP网络的重要函数例如:net=newff([020;016;012;012;013],[51],{'logsig''purelin'},'traingdx');三层神经网络结构:中间层为5输出层为1输入层5维向量的取值范围训练函数转移函数(1)purelin——线性传递函数;(2)tansig——双曲正切S型(sigmoid)传递函数;(3)logsig——对数S型(sigmoid)传递函数;1、转移函数:(1)(2)(3)1logsig()1xxetansig()xxxxeexee2、训练函数:trainlm——Levenberg-Marquardt的BP算法训练函数;trainbfg——BFGS拟牛顿BP算法训练函数;trainrp——具有弹性的BP算法训练;traingd——梯度下降是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,trastd3)正交化主成分分析也可以将数据进行正交处理,减少输入数据的处理,函数有:prepca,trapca.注意:数据预处理P=[012345678910];%输入向量T=[01234321234];%期望输出例:%创建两层的BP网络:net=newff([010],[51],{'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-1.2784-0.8590-0.29810.24950.48111.03751.22681.4232T=[01234321234];%期望输出第一种情况的输出结果:0246810-3-2-101234误差很大!未训练,非线性映射能力差。Y=-0.00191.00451.98963.01573.96373.10211.81751.20561.83223.11623.9551T=[01234321234];%期望输出第二种情况的输出结果:0246810-0.500.511.522.533.54思考:究竟误差有多大?修改程序:P=[012345678910];T=[01234321234];net=newff([010],[51],{'tansig''purelin'});net.trainparam.show=50;%每次循环50次net.trainParam.epochs=500;%最大循环500次net.trainparam.goal=0.01;%期望目标误差最小值net=train(net,P,T);%对网络进行反复训练Y=sim(net,P)figure%打开另外一个图形窗口plot(P,T,P,Y,'o')Y=0.00051.00261.99473.01343.94293.12111.84821.17551.85683.11503.9595第二种情况的输出结果:024681000.511.522.533.54051015202510-310-210-110010129EpochsTraining-BlueGoal-BlackPerformanceis0.00975742,Goalis0.01范例:DNA序列模式分类问题一、问题假定已知两组人工已分类的DNA序列(20个已知类别的人工制造的序列),其中序列标号1—10为A类,11-20为B类。要求我们从中提取已经分类了的DNA序列片段的特征和构造分类方法,并且还要衡量所用分类方法的好坏,从而构造或选择一种较好的分类方法。测试对象是20个未标明类别的人工序列(标号21—40)和182个自然DNA序列。例如A类:a1='aggcacggaaaaacgggaataacggaggaggacttggcacggcattacacggaggacgaggtaaaggaggcttgtctacggccggaagtgaagggggatatgaccgcttgg';b1='gttagatttaacgttttttatggaatttatggaattataaatttaaaaatttatattttttaggtaagtaatccaacgtttttattactttttaaaattaaatatttatt';……二、特征提取序列中含有四个碱基a、g、t、c,反映该序列特征的方面主要有两个:1、碱基的含量,反映了该序列的内容;统计a、g、t、c序列中分别出现的频率;2、碱基的排列情况,反映了该序列的形式;①从字符出现的周期性来反映。②统计三个字符出现的频率;在遗传学中每三个碱基的组合被称为一个密码子,如agg,att,ggc,cgg等,共有43=64个,还可以由密码子组成20个氨基酸。三、神经网络对DNA序列分类问题的应用假定提取已知序列类别的三字符串,如agg,att,ggc,cgg……,共有43=64个,将它简化成只有5个:ttt,tta,ggc,cgg