华南师范大学计算机学院–神经网络作者:杨劲松2013-4-24鸢尾花分类BP网实现2/202013-4-24鸢尾花分类BPBPBPBP网实现�问题描述�感知器网络�BP网�用BP网实现鸢尾花分类问题3/202013-4-24问题描述�鸢尾花分类问题�Fisher'sIrisDataSepallengthSepalwidthPetallengthPetalwidthSpecieslengthSepalwidthPetallengthPetalwidthSpecieslengthSepalwidthPetallengthPetalwidthSpecieslengthSepalwidthPetallengthPetalwidthSpecies5.13.51.40.2setosa7.03.24.71.4versicolor6.33.36.02.5virginica有一批Iris花,已知这批Iris花可分为3个品种,现需要对其进行分类。不同品种的Iris花的花萼长度、花萼宽度、花瓣长度、花瓣宽度会有差异。4/202013-4-24感知器网络�感知器的结构加权输入:感知器网络简化结构图∑=+=rjijijibpwn1输出:)(iinfa=5/202013-4-24感知器网络�感知器的学习——有教师的学习有教师学习算法将一组训练集送入网络,根据网络的实际输出与期望输出间的差别来调整连接权。有导师学习算法的主要步骤包括:1)从样本集合中取一个样本(Ai,Bi);2)计算网络的实际输出O;3)求D=Bi-O;4)根据D调整权值W和阈值b;5)对每个样本重复上述过程,直到对整个样本集来说,误差不超过规定范围。6/202013-4-24感知器网络�感知器的学习——有教师的学习(δ规则)ate−=目标输出实际输出——训练目的:t-a•当e=0时,得到最优网络权值和阈值•当e0时,实际输出小于目标输出,应增加网络权值和阈值•当e0时,实际输出大于目标输出,应减少网络权值和阈值7/202013-4-24BPBPBPBP网�BP网——反向传播网络(backpropagationnetwork)—单层感知器网络只有一层神经元,简单,处理线性问题—BP网络有多层神经元,复杂,非线性问题xxxx1111oooo1111输出层隐藏层输入层xxxx2222oooo2222oooommmmxxxxnnnn…………………………………………………………………………(1)(1)(1)(1)(2)(2)(2)(2)(3)(3)(3)(3)(L)(L)(L)(L)�BP网结构8/202013-4-24BPBPBPBP网�BP网结构9/202013-4-24用BPBPBPBP网实现鸢尾花分类问题�要做的工作:a)建立一个BP网络c)使用新的数据集模拟这个网络b)使用样本训练这个网络10/202013-4-24用BPBPBPBP网实现鸢尾花分类问题�要做的工作:a)建立一个BP网络—网络层数—每层的神经元数—每层使用的转移函数—使用的训练函数11/202013-4-24用BPBPBPBP网实现鸢尾花分类问题net=newff(PR,S,TF,BTF,BLF,PF,IPF,OPF,DDF)�matlab提供newff函数用于创建一个BP网络每组输入向量的最大和最小值每层神经元的个数每层使用转移函数训练函数•BLF-权值和阈值学习函数,默认为'learngdm'.•PF-网络性能函数,默认为'mse'.•IPF-行输入处理单元矩阵•OPF-行输出处理单元矩阵•DDF-数据分割函数,默认为'dividerand';示例:net=newff(minmax(input),[103],{'logsig''purelin'},'traingdx');12/202013-4-24用BPBPBPBP网实现鸢尾花分类问题�训练样本—读取训练数据[f1,f2,f3,f4,class]=textread('trainData.txt','%f%f%f%f%f',150);—训练神经网络net=train(net,input,output');13/202013-4-24用BPBPBPBP网实现鸢尾花分类问题�检验网络—读取测试数据[t1t2t3t4c]=textread('testData.txt','%f%f%f%f%f',150);—模拟神经网络Y=sim(net,testInput)14/202013-4-24用BPBPBPBP网实现鸢尾花分类问题%读取训练数据[f1,f2,f3,f4,class]=textread('trainData.txt','%f%f%f%f%f',150);%特征值归一化[input,PS]=mapminmax([f1,f2,f3,f4]');%构造输出矩阵s=length(class);output=zeros(s,3);fori=1:soutput(i,class(i))=1;end%创建神经网络net=newff(minmax(input),[103],{'logsig''purelin'},'traingdx');%设置训练参数net.trainparam.show=50;%显示中间结果的周期net.trainparam.epochs=500;%最大迭代次数net.trainparam.goal=0.01;%神经网络训练的目标误差net.trainParam.lr=0.01;%学习率15/202013-4-24用BPBPBPBP网实现鸢尾花分类问题%开始训练net=train(net,input,output');%读取测试数据[t1t2t3t4c]=textread('testData.txt','%f%f%f%f%f',150);%测试数据归一化testInput=mapminmax([t1,t2,t3,t4]');%仿真Y=sim(net,testInput);%统计识别正确率[s1,s2]=size(Y);hitNum=0;fori=1:s2[m,Index]=max(Y(:,i));if(Index==c(i))hitNum=hitNum+1;endendsprintf('识别率是%3.3f%%',100*hitNum/s2)16/202013-4-24用BPBPBPBP网实现鸢尾花分类问题�网络未经训练时的输出(隐层:100,输出层:3)输出图示输出图示输出图示输出图示((((识别率是识别率是识别率是识别率是8.000%)8.000%)8.000%)8.000%)17/202013-4-24用BPBPBPBP网实现鸢尾花分类问题�训练后的训练样本输出(隐层:100,输出层:3)输出图示输出图示输出图示输出图示((((识别率是识别率是识别率是识别率是100.000%)100.000%)100.000%)100.000%)18/202013-4-24用BPBPBPBP网实现鸢尾花分类问题�训练后的测试样本输出(隐层:100,输出层:3)输出图示输出图示输出图示输出图示((((识别率是识别率是识别率是识别率是94.667%)94.667%)94.667%)94.667%)19/202013-4-24用BPBPBPBP网实现鸢尾花分类问题�一个隐层(隐层:100,输出层:3)输出图示输出图示输出图示输出图示((((识别率是识别率是识别率是识别率是93.333%)93.333%)93.333%)93.333%)�两个隐层(隐层:20,20,输出层:3)输出图示输出图示输出图示输出图示((((识别率是识别率是识别率是识别率是96.000%)96.000%)96.000%)96.000%)20/202013-4-24用BPBPBPBP网实现鸢尾花分类问题�一个隐层(隐层:100,输出层:3)输出图示输出图示输出图示输出图示((((识别率是识别率是识别率是识别率是96.000%)96.000%)96.000%)96.000%)�两个隐层(隐层:20,20,输出层:3)输出图示输出图示输出图示输出图示((((识别率是识别率是识别率是识别率是96.000%)96.000%)96.000%)96.000%)