问题:蠓虫分类问题
1 问题描述
蠓虫分类问题可概括叙述如下:生物学家试图对两种蠓虫(Af 与Apf)进行鉴别,依据的资料是触角和翅膀的长度,已经测得了9 只Af 和6 只Apf 的数据如下:
Af: (1.24,1.27),(1.36,1.74),(1.38,1.64),(1.38,1.82),(1.38,1.90),(1.40,1.70),(1.48,1.82),(1.54,1.82),(1.56,2.08).
Apf: (1.14,1.82),(1.18,1.96),(1.20,1.86),(1.26,2.00),(1.28,2.00),(1.30,1.96).
现在的问题是:(i)根据如上资料,如何制定一种方法,正确地区分两类蠓虫。(ii)对触角和翼长分别为(1.24,1.80),(1.28,1.84)与(1.40,2.04)的3 个标本,用所得到的方法加以识别。已知的蠓虫数据分布如图(圆圈为Apf类,六角为Af,米字型为未知型)
2.MATLAB 实现
clear
p1=[1.24,1.27;1.36,1.74;1.38,1.64;1.38,1.82;1.38,1.90;1.40,1.70;1.48,1.82;1.54,1.82;1.56,2.08]; %Afp2=[1.14,1.82;1.18,1.96;1.20,1.86;1.26,2.00;1.28,2.00;1.30,1.96]; %Apfp=[p1;p2]';pr=minmax(p);goal=[ones(1,9),zeros(1,6);zeros(1,9),ones(1,6)]; %p1类为1;p2类为0x=[1.24 1.80;1.28 1.84;1.40 2.04];for i=1:9
plot(p1(i,1),p1(i,2),'h') hold onendfor i=1:6
plot(p2(i,1),p2(i,2),'o');endfor i=1:3
plot(x(i,1),x(i,2),'*') text (x(i,1),x(i,2),'?'); end%Rx2的矩阵以定义R个输入向量的最小值和最大值;设定每层神经元个数的数组
net=newff(pr,[3,2],{'logsig','logsig'}); net.trainParam.show = 10; % 训练显示间隔net.trainParam.lr = 0.05; %学习步长net.trainParam.goal = 1e-10; %最小均方误差net.trainParam.epochs = 50000; %最大训练次数net = train(net,p,goal); %训练神经网络y0=sim(net,p); %对已知的数据进行验证x=x';y=sim(net,x); %对未知的数据进行分类3 结果
目标标签设置
goal =
1 1 1 1 1 1 1 1 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 1 1 1 1 1已知数据训练后:
y0 =
1 至 10 列 11 至 15 列
0.9999 0.9999 0.9999 0.9998 0.9995 0.9999 0.9999 0.9999 0.9999 0.0001 0.0001 0.0001 0.0001 0.0002 0.0006
0.0001 0.0001 0.0001 0.0002 0.0005 0.0001 0.0001 0.0001 0.0001 0.9999 0.9999 0.9999 0.9999 0.9998 0.9994未知数据分类:
y =
0.0004 0.0036 0.9899
0.9996 0.9964 0.0101从结果可知:(1.24,1.80),(1.28,1.84)属于Apf,(1.40,2.04)属于Af
4 工具箱界面简介
更具体的介绍详见:http://blog.csdn.net/q1302182594/article/details/8790613
神经网络训练参数说明:http://blog.sina.com.cn/s/blog_5c9288aa0101gsu2.html
5 拓展
可以通过蒙卡特罗法产生大量数据点,通过神经网络进行分类。
因为有一些数据点分布在神经网络的分界面附近,因此可以大约知道分界面的位置。
N=1000;k1 = 1.1 + (1.6-1.1).*rand(1,N);k2 = 1.2 + (2.1-1.2).*rand(1,N);z=[k1;k2];z1=sim(net,z);for i=1:1000 if z1(1,i)<0.5 plot(z(1,i),z(2,i),'o'); hold on end if z1(1,i)>0.5 plot(z(1,i),z(2,i),'h'); endend
6.非监督学习
clearp1=[1.24,1.27;1.36,1.74;1.38,1.64;1.38,1.82;1.38,1.90; 1.40,1.70;1.48,1.82;1.54,1.82;1.56,2.08];p2=[1.14,1.82;1.18,1.96;1.20,1.86;1.26,2.00; 1.28,2.00;1.30,1.96];p=[p1;p2]'pr=minmax(p)goal=[ones(1,9),zeros(1,6);zeros(1,9),ones(1,6)]net = newlvq(pr,4,[0.6,0.4])net = train(net,p,goal)Y = sim(net,p)x=[1.24 1.80;1.28 1.84;1.40 2.04]'sim(net,x)