《模式识别》实验报告四.非线性分类器实验-BP神经网络1.(a)初始化高斯随机生成器为0,即randn(‘seed’,0);产生2维两类数据集(X1,y1),其中X1的数据来自4个高斯分布,m=[-5,5,-5,5;5,-5,5,-5]的正态分布,S=s*I,s=2,I是一个2×2的单位矩阵。前两个分布的数据为一类y=1,后两个分布的数据为另一类y=-1,每一类数据的数量N=100。(b)初始化高斯随机生成器为10,即randn(‘seed’,10),重复(a)产生数据集(X2,y2)。(c)使s=5,重复(a)、(b)分别产生数据集(X3,y3)、(X4,y4)。(d)画出数据集。M1文件如下:function[X1,y]=data_generator(S)m=[-5,5,-5,5;5,-5,5,-5];x1=mvnrnd(m(:,1),S,50);x2=mvnrnd(m(:,2),S,50);x3=mvnrnd(m(:,3),S,50);x4=mvnrnd(m(:,4),S,50);fori=1:50forj=1:2X1(i,j)=x1(i,j);endy(i,1)=1;endfori=1:50forj=1:2X1(i+50,j)=x2(i,j);endy(i+50,1)=1;endfori=1:50forj=1:2X1(i+100,j)=x3(i,j);endy(i+100,1)=-1;endfori=1:50forj=1:2X1(i+150,j)=x4(i,j);endy(i+150,1)=-1;endendM2文件如下:functionplotXy(S)[X1,y]=data_generator(S);figure(1);scatter3(X1(:,1),X1(:,2),y(:,1),'.b');end(a)调用指令如下:randn('seed',0);S=[2,0;0,2];plotXy(S)显示结果如下:-10-50510-10-50510-1-0.500.51(b)调用指令如下:randn('seed',10);S=[2,0;0,2];plotXy(S)显示结果如下:-10-50510-10-50510-1-0.500.51(c)调用指令如下:randn('seed',0);S=[5,0;0,5];plotXy(S)结果显示如下:-20-1001020-1001020-1-0.500.51(d)调用指令如下:randn('seed',10);S=[5,0;0,5];plotXy(S)显示结果如下:-10-50510-20-1001020-1-0.500.512.(a)运行标准BP算法(traingd),隐层节点数为15,分别取学习率参数lr=0.01,2,4,设迭代次数为1000,用数据集(X1,y1)作为训练数据。(b)对训练得到神经网络,用数据集(X1,y1)(训练数据)和(X2,y2)(测试数据)进行性能评估,并进行分析。M3文件如下:functionnet=NN_training(S,code,iter,par_vec)[x,y]=data_generator(S);rand('seed',0);randn('seed',0);methods_list={'traingd';'traingdm';'traingda'};limit=[min(x(:,1)),max(x(:,1));min(x(:,2)),max(x(:,2))];net=newff(limit,[151],{'tansig','tansig'},methods_list{code,1});net=init(net);net.trainParam.epochs=iter;net.trainParam.lr=par_vec(1);if(code==2)net.trainParam.mc=par_vec(2);elseif(code==3)net.trainParam.lr_inc=par_vec(3);net.trainParam.lr_dec=par_vec(4);net.trainParam.max_perf_inc=par_vec(5);endnet=train(net,x',y);endM4文件如下:functionpe=NN_evaluation(net,x,y)y1=sim(net,x);pe=sum(y.*y10)/length(y);end(a)(b)调用指令为:randn('seed',0);S=[2,0;0,2];code=1;iter=1000;par_vec=[0.01,0,0,0,0];net=NN_training(S,code,iter,par_vec);randn('seed',10);S=[2,0;0,2];[x,y]=data_generator(S);NN_evaluation(net,x',y)结果显示如下:当lr取0.01时,用数据集(X1,y1)(训练数据)和(X2,y2)(测试数据)进行性能评估结果返回错误率是0.5950,性能图如下:当Lr取2时评估结果返回错误率是0.5250,性能图如下:当lr取4时评估结果返回错误率为0.5050,性能图如下:3.(a)运行自适应学习率BP算法(traingda),设学习率参数lr=0.01,lr_inc=1.05,lr_dec=0.7,max_perf_inc=1.04,设迭代次数为300,用数据集(X1,y1)作为训练数据。(b)对训练得到神经网络,用数据集(X1,y1)(训练数据)和(X2,y2)(测试数据)进行性能评估,并进行分析。调用指令如下:randn('seed',0);S=[2,0;0,2];code=3;iter=300;par_vec=[0.01,0,1.05,0.7,1.04];net=NN_training(S,code,iter,par_vec);randn('seed',10);S=[2,0;0,2];[x,y]=data_generator(S);NN_evaluation(net,x',y)结果如下:当lr=0.01,lr_inc=1.05,lr_dec=0.7,max_perf_inc=1.04,设迭代次数为300时,评估结果返回错误率是0.5850,性能图为:4.重复2-3中的实验内容,分别使用数据集(X3,y3)、(X4,y4)作为训练和测试数据。当lr取0.01时,用数据集(X3,y3)(训练数据)和(X4,y4)(测试数据)进行性能评估结果返回错误率是0.5500,性能图如下:当lr取2时评估结果返回错误率是0.4750,性能图如下:当lr取4时评估结果返回错误率是0.500,性能图如下:当lr=0.01,lr_inc=1.05,lr_dec=0.7,max_perf_inc=1.04,设迭代次数为300时,评估结果返回错误率是0.4750,性能图为:五.非线性分类器实验-支持向量机1.(a)在Matlab中运行smomenu.m,进入SVM实验软件。(b)从菜单项“Examples”选择数据集“Example#1”,在绘制的数据界面中可以改变数据集样本数量和分布参数(方差)。(c)从菜单项“Classifier”中选择分类器类型,线性或非线性,以及求解方法(plat-标准smo方法,Keerthi-改进smo方法,速度快)。(d)选择核函数、参数C的值、高斯核函数的参数、训练误差和迭代次数等,单击按钮“Startsimulation”,运行训练程序,绘制最优分类面、间隔和支持向量(圆圈标记)。选择数据集“Examples#1”,将数据集方差改为0.032,样本数量改为50;选择线性分类器(plat-标准smo方法),核函数是linear,核函数参数C=20,高斯核函数的参数sigam=0.5,训练误差tolerance=0.001和迭代次数step=1000,点击按钮“Startsimulation”得到的结果显示如下:-0.500.511.5-0.4-0.200.20.40.60.811.21.41.62.选取不同参数,比较和分析得到最优分类面和支持向量的数量。选择不同的参数绘制绘制最优分类面、间隔和支持向量(圆圈标记),选择参数列表如下,显示结果见表格下方:分类器类型核函数参数C参数sigma训练误差步长linear(keerthi1)linear200.50.00110000linear(keerthi1)linear200.50.0012000linear(keerthi1)linear50.50.00110000nonlinear(plat)linear200.50.00110000nonlinear(plat)linear1000.50.0012000nonlinear(plat)linear1001.50.012000nonlinear(plat)Gaussian200.50.00110000nonlinear(plat)Gaussian11.50.012000nonlinear(keerthi1)linear200.50.00110000nonlinear(keerthi1)linear200.50.110000nonlinear(keerthi1)Gaussian200.50.0012000nonlinear(keerthi2)linear200.50.0012000nonlinear(keerthi2)Gaussian200.50.0012000图(1):-0.4-0.200.20.40.60.811.21.41.6-0.4-0.200.20.40.60.811.21.4图(2):-0.4-0.200.20.40.60.811.21.41.6-0.4-0.200.20.40.60.811.21.4图(3):-0.4-0.200.20.40.60.811.21.41.6-0.4-0.200.20.40.60.811.21.4图(4):-0.500.511.5-0.4-0.200.20.40.60.811.21.4图(5):-0.500.511.5-0.4-0.200.20.40.60.811.21.4图(6):-0.500.511.5-0.4-0.200.20.40.60.811.21.4图(7):-0.500.511.5-0.4-0.200.20.40.60.811.21.4图(8):-0.500.511.5-0.4-0.200.20.40.60.811.21.4图(9):-0.500.511.5-0.4-0.200.20.40.60.811.21.4图(10):-0.500.511.5-0.4-0.200.20.40.60.811.21.4图(11):-0.500.511.5-0.4-0.200.20.40.60.811.21.4图(12):-0.4-0.200.20.40.60.811.21.41.6-0.4-0.200.20.40.60.811.21.4图(13):-0.4-0.200.20.40.60.811.21.41.6-0.4-0.200.20.40.60.811.21.4实验结果分析:本实验通过控制变量法,改变不同参数得到不同的绘制结果,经过试验,可以得出以下结论:(1)运用不同的分类器,影响分类间隔距离以及支持向量的个数;(2)运用不同的核函数,影响分隔线形状,运用高斯核函数能使分类更清晰准确;(3)改变核函数参数C以及sigma同样分类间隔距离以及支持向量的个数。