神经网络1.单层感知器数据分类输出为0和1解决线性可分的分类模型例1.从待分类的数据中取出一部分数据及其对应的类别作为样本数据,设计并训练一个能对分类数据进行分类的单层感知器神经网络代码:%给定训练样本数据P=[-.4-.5.6;.90.1];%给定样本数据所对应的类别,用0和1来表示两种类别T=[110];%创建一个有两个输入、样本数据的取值范围都在[-11]之间,并且网络只有一个神经元的感知器神经网络net=newp([-11;-11],1);%设置网络的最大训练次数为20次net.trainParam.epochs=20;%使用训练函数对创建的网络进行训练net=train(net,P,T);%对训练后的网络进行仿真Y=sim(net,P)%计算网络的平均绝对误差,表示网络错误分类E1=mae(Y-T)%给定测试数据,检测训练好的神经网络的性能Q=[0.60.9-0.1;-0.1-0.50.5];%使用测试数据,对网络进行仿真,仿真输出即为分类的结果Y1=sim(net,Q)%创建一个新的绘图窗口figure;%在坐标中绘制测试数据点,并根据数据所对应的类别用约定的符号画出plotpv(Q,Y1);%在坐标中绘制分类线plotpc(net.iw{1},net.b{1})2.线性神经网络模型线性神经网络类似感知器,但是线性神经网络的激活函数是线性的,而不是硬线转移函数,因此,线性神经网络的输出可以是任意值,而感知器的输出不是0就是1,线性神经网络网络和感知器一样只能解决线性可分的问题.例2.要求设计一个线性神经网络,寻找给定数据之间的线性关系代码:P=[1.1-1.3];T=[0.61];%创建一个只有一个输出,输入延迟为0,学习速率为0.01的线性神经网络,minmax(P)表示样本数据的取值范围net=newlin(minmax(P),1,0,0.01);%对创建的神经网络进行初始化,设置权值和阈值的初始值net=init(net);net.trainParam.epochs=500;%设置网络训练后的目标误差为0.0001net.trainParam.goal=0.0001;net=train(net,P,T);y=sim(net,P)%求解网络的均方误差值E=mse(y-T)3.BP神经网络预测能逼近任意非线性函数例3.表2-4为某药品的销售情况,现构建一个如下的BP神经网络对药品的销售进行预测:输入层为三个结点,隐含层结点数为5,隐含层的激活函数为tansig(双曲正切S型传递函数);输出层结点数为1,输出层的激活函数为logsig(S型的对数函数),并利用此网络对药品的销售量进行预测,预测的方法采用滚动预测方式,即用前三个月的销售量来预测第四个月的销售量,如用1、2、3月的销售量为输入预测第4个月的销售量,用2、3、4月的销售量为输入预测第5个月的销售量。如此反复直至满足预测精度要求为止。月份123456销量205623952600229816341600月份789101112销量187314781900150020461556212241263;241263236;263236161;236161168;161168187;168187148;187148193;148193157205156;]代码:%以每三个月的销售量经归一化处理后作为输入P=[0.51520.81731.000;0.81731.0000.7308;1.0000.73080.1390;0.73080.13900.1087;0.13900.10870.3520;0.10870.35200.000]’;%以第四个月的销售量归一化处理后作为目标向量T=[0.73080.13900.10870.35200.0000.3761];%创建一个BP神经网络,每一个输入向量的取值范围为[0,1],隐含层为5个神经元,输出层有一个神经元,隐含层的激活函数为tansig,输出层的激活函数为logsig,训练函数为梯度下降函数net=newff([01;01;01],[51],{‘tansig’,’logsig’},’traingd’);net.trainParam.epochs=15000;net.trainParam.goal=0.01;%设置学习速率为0.1LP.lr=0.1;net=train(net,P,T)4.RBF神经网络属于前向神经网络,能够以任意精度逼近任意连续函数,特别适合于解决分类问题例4.建立一个径向基神经网络,对非线性函数y=sqrt(x)进行逼近,并作出网络的逼近误差曲线代码:%输入从0开始变化到5,每次变化幅度为0.1x=0:0.1:5;y=sqrt(x);%建立一个目标误差为0,径向基函数的分布密度为0.5,隐含层神经元个数的最大值为20,每增加5个神经元显示一次结果net=newrb(x,y,0,0.5,20,5);t=sim(net,x);%在以输入x和函数值与网络输出之间的差值y-t坐标上绘出误差曲线,并用“*”来标记函数值与输出值之间的差值plot(x,y-t,’*-’)5.自组织竞争神经网络属于前向神经网络,特别适合于解决模式分类和识别方面的问题例5.人口分类是人口统计中的重要指标,现有1999年共10个地区的人口出生比例情况如下:出生男性百分比分别为:0.55120.51230.50870.50010.60120.52980.50000.49650.51030.5003;出生女性百分比分别为:0.44880.48770.49130.49990.39880.47020.50000.50350.48970.4997;建立一个自组织神经网络对上述数据分类,给定某个地区的男女出生比例分别为:0.5,0.5,测试训练以后的自组织神经网络的性能,判断其属于哪个类别.代码:P=[0.55120.51230.50870.50010.60120.52980.50000.49650.51030.5003;0.44880.48770.49130.49990.39880.47020.50000.50350.48970.4997];%创建一个自组织神经网络,[01;01]表示输入数据的取值范围在[01]之间,[34]表示竞争层组织结构为3×4,其余参数取默认值net=newsom([01;01],[34]);net.trainParam.epochs=500;net=init(net);net=train(net,P);y=sim(net,P);%获取训练后的自组织神经网络的权值w1=net.IW{1,1};%绘出训练后自组织神经网络的权值分布图plotsom(w1,net.layers{1}.distances);%输入测试数据p=[0.5;0.5];%对网络进行测试y_test=sim(net,p);%将测试数据所得到的单值向量变换成下标向量y_test=vec2ind(y_test)6.学习向量量化(LVQ)神经网络属于前向神经网络,在模式识别和优化领域有着广泛应用例6.针对一组输入向量,设计一个LVQ神经网络,经过训练后,能对给定的数据进行模式识别.代码:%输入向量P及其对应的类别向量CP=[-6-4-20000246;02-212-212-20];C=[1112222111];%将类别向量C转换为目标向量TT=ind2vec(C);%绘制输入向量P,用颜色将输入向量分为两类Plotvec(P,C,’*r’);axis([-88-33])%创建一个LVQ神经网络,隐含层有5个神经元,[0.60.4]表示在隐含层的权值中,有60%的列的第一行的值是1,40%的列的第一行值为1,也就是说60%的列属于第一类,40%属于第二类,网络的其他参数取默认值net=newlvq(minmax(P),5,[0.60.4]);net.trainParam.epoches=100;net=train(net,P,T);%给定数据,输出网络的分类结果测试网络的性能p=[01;0.20];y=sim(net,p);yc=vec2ind(y)%对给定数据,一个归为第二类,一个归为第一类yc=217.Elman神经网络反馈神经网络,他是一种有非线性元件构成的反馈系统,其稳定状态的分析比属于前向神经网络要复杂得多可解决旅行商问题(TSP)例7.下表为某单位办公室七天上午9点到12点的空调负荷数据,数据已经做了归一化处理,预测方法采用前6天数据作为网络的训练样本,每3天的负荷数据作为输入向量,第4天的负荷作为目标向量,第7天的数据作为网络的测试数据空调负荷数据表时间9时负荷10时负荷11时负荷12时负荷第1天0.44130.47070.69530.8133第2天0.43790.46770.69810.8002第3天0.45170.47250.70060.8201第4天0.45570.47900.70190.8211第5天0.46010.48110.71010.8298第6天0.46120.48450.71880.8312第7天0.46150.48910.72010.8330代码:%根据预测方法得到输入向量和目标向量P=[0.44130.47070.69530.81330.43790.46770.69810.80020.45170.47250.70060.8201;0.43790.46770.69810.80020.45170.47250.70060.82010.45570.47900.70190.8211;0.45170.47250.70060.82010.45570.47900.70190.82110.46010.48110.71010.8298]';T=[0.45570.47900.70190.8211;0.46010.48110.71010.8298;0.46120.48450.71880.8312]';%输入向量的取值范围为[01],用threshold来标记threshold=[01;01;01;01;01;01;01;01;01;01;01;01];%创建一个Elman神经网络,隐含层的神经元的个数为17个,4个输出层神经元,隐含层激活函数为tansig,输出层激活函数为purelinnet=newelm(threshold,[17,4],{'tansig','purelin'});net.trainParam.epoches=3000;net=init(net);net=train(net,P,T);%输入测试数据P_test=[0.45570.47900.70190.82110.46010.48110.71010.82980.46120.48450.71880.8312]';T_test=[0.46150.48910.72010.8330]';y=sim(net,P_test)%在测试数据下,计算网络的输出和实际目标向量之间的差值Error=y-T_test;%在坐标平面上画出差值曲线Plot(1:4,error,'-')8.基于遗传算法的BP神经网络BP神经网络是人工神经网络中应用最广泛的缺陷:学习收敛速度太慢;不能保证收敛到全局最小点;网络结构不易确定