蠓虫分类doc.docx
《蠓虫分类doc.docx》由会员分享,可在线阅读,更多相关《蠓虫分类doc.docx(14页珍藏版)》请在冰豆网上搜索。
蠓虫分类doc
课程名称:
数学软件与实验成绩:
综合实验题目——蠓虫分类
课程号:
50c11033
课序号:
01
任课教师:
xxxx
班级:
xxxx
姓名:
xxx
学号:
xxxx
填写日期:
2010/6/4
实验报告题目——蠓虫分类
1.实验问题
蠓虫分类问题:
生物学家试图对两类蠓虫(Af与Apf)进行鉴别,依据的资料是蠓虫的触角和翅膀的长度,已经测得9只Af和6只Apf的数据,(触角长度用x表示,翅膀长度用y表示)具体数据为:
Af类触角和翅膀长度
x
1.24
1.36
1.38
1.38
1.38
1.40
1.48
1.54
1.56
y
1.27
1.74
1.64
1.82
1.90
1.70
1.82
1.82
2.08
Apf类触角和翅膀长度数据
x
1.14
1.18
1.20
1.26
1.28
1.30
y
1.78
1.96
1.86
2.00
2.00
1.96
现需要解决三个问题:
(1)如何凭借原始资料(15对数据,被称之为学习样本)制定一种方法,正确区分两类蠓虫;
(2)依据确立的方法,对题目提供的三个样本:
(1.24,1.80),(1.28,1.84),(1.40,2.04)加以识别;(3)设Af是宝贵的传粉益虫,Apf是某种疾病的载体,是否应该修改分类方法。
2.符号说明
判别函数:
分界线方程:
3.问题分析与建模
3.1问题分析
这是一个判别问题,建模的目标是寻找一种方法对题目提供的三个样本进行判别。
首先根据学习样本的15对数据画出散点图,图中,Af用+标记,Apf用0标记。
编写程序huitu.m(见Matlab求解部分),得到散点图(见下图),观察图形,可以发现,Af的点集中在图中右下方,而Apf的点集中在图中左上方。
客观上存在一条直线L将两类点分开之间,如果确定了直线L并将它作为Af和Apf分界线,就有了判别的方法。
确定直线L应依据问题所给的数据,即学习样本。
设直线的方程为
散点图
对于平面上任意一点
,如果该点在直线上,将其坐标代入直线方程则使方程成为恒等式,即方程左端为零;如果点
不在直线上,将其坐标代入直线方程,则方程左端不为零。
由于Af和Apf的散点都不在所求的直线上,故将问题所提供的数据代入直线方程左端所得到的表达式的值应有大于0或者小于0两种不同的结果。
3.2数学建模
为了建立判别模型,引入判别函数g(p),当
属于Af类时,有
否则
本题目中将用到两种不同的状态,不妨以以“1”和“-1”表示,这里我们可以把这两个值当做权值,当
属于Af类时,
,否则
。
取
于是由所给数据形成约束条件,这是关于判别函数中的三个待定系数
的线性方程组:
这是包括三个未知数
共15个方程的超定方程组:
使用Matlab可求得上列超定方程组的解。
4.Matlab求解
4.1凭借原始资料正确区分两类蠓虫
编写程序huitu.m,绘制散点图
xy=[1.241.27;1.361.74;1.381.64;1.381.82;1.381.90;
1.401.70;1.481.82;1.541.82;1.562.08;1.141.78;
1.181.96;1.201.86;1.262.00;1.282.00;1.301.96];%样本数据
x=xy(:
1);y=xy(:
2);x1=x(1:
9);y1=y(1:
9);x2=x(10:
15);y2=y(10:
15);
plot(x1,y1,'r+',x2,y2,'bo');%绘制散点图
编写程序mengchong.m,求出超定方程组的解,在散点图中画出分类直线
xy=[1.241.27;1.361.74;1.381.64;1.381.82;1.381.90;
1.401.70;1.481.82;1.541.82;1.562.08;1.141.78;
1.181.96;1.201.86;1.262.00;1.282.00;1.301.96];%样本数据
z=[1;1;1;1;1;1;1;1;1;-1;-1;-1;-1;-1;-1];
x=xy(:
1);y=xy(:
2);x1=x(1:
9);y1=y(1:
9);x2=x(10:
15);y2=y(10:
15);
A=[1.241.271;
1.361.741;
1.381.641;
1.381.821;
1.381.901;
1.401.701;
1.481.821;
1.541.821;
1.562.081;
1.141.781;
1.181.961;
1.201.861;
1.262.001;
1.282.001;
1.301.961];
a=A\z%求解超定方程组
x=1.10:
0.02:
1.60;
y=(-a
(1)*x-a(3))/a
(2);%确定分界线方程
plot(x1,y1,'x',x2,y2,'*',x,y)%在散点图中画出分界线
样本散点和分界线
样本散点和分界线图1
程序执行后,从图形窗口将得到样本散点和分界线图(如下图所示)
样本散点和分界线图1
从命令窗口得到运行结果
a=
6.6455
-2.9128
-3.3851
所以直线方程
中的三个待定系数分别为
a1=6.6455
a2=-2.9128
a3=-3.3857
所以判别直线方程为
6.6455x-2.9128y-3.3857=0
判别函数为
g(P)=6.6455x-2.9128y-3.3857
编写程序yanzheng.m,将15个学习样本的所有数据依次代入判别函数g(P)
x=[1.241.361.381.381.381.401.481.541.561.141.181.201.261.281.30];
y=[1.271.741.641.821.901.701.821.822.081.781.961.862.002.001.96];
g=6.6455*x-2.9128*y-3.3857
运行程序可得
g=
1.15550.58391.00810.48380.25080.96621.14831.54710.9227-0.9946-1.2531-0.8289-0.8380-0.7051-0.4556
因为前9个g(P)的值为正数,后6个g(P)的值为负数。
根据判别函数g(P)定义知,前9个学习样本为Af类,后6个学习样本为Apf类。
这与学习样本本身是一致的。
4.2对题目提供的三个样本加以识别
题目提供了三个样本供判别,它们的数据列表如下
编号
1
2
3
触角长度x
1.24
1.28
1.40
翅膀长度y
1.80
1.84
2.04
编写程序panduan.m,将这三组数据代入判别函数
x=[1.241.281.40];
y=[1.801.842.04];
g=6.6455*x-2.9128*y-3.3857
运行程序可得
g=
-0.3883-0.2390-0.0241
所以,由判别函数判别三个新蠓虫的类属,均判为Apf类。
4.3若Af是宝贵的传粉益虫,Apf是某种疾病的载体,修改的分类方法
上述的解决问题方案在解题过程中分别使用权值“1”和“-1”代表正数和负数来完成的。
这只是一种人为的规定,并不是一成不变的。
如果Af是宝贵的传粉益虫,Apf是某种疾病的载体,可以将超定方程组的右端项中的权值“-1”改为其它的负数,至于具体的修改数值不仅与原来的15个样本有关,还与保护传粉益虫Af重要,还是消灭传病害虫Apf重要有关。
修改数值后,重新求超定方程组的解获得分类边界直线的方程。
这样将与前面所求分类边界直线的方程不一样,当然对新给定的蠓虫的翅膀和触角长度数据来做判断其结果也是不同的。
例如这里以最大程度的消灭传病害虫Apf为主,将权值“-1”改为“-2”,修改部分数据,得到mengchong1.m
xy=[1.241.27;1.361.74;1.381.64;1.381.82;1.381.90;
1.401.70;1.481.82;1.541.82;1.562.08;1.141.78;
1.181.96;1.201.86;1.262.00;1.282.00;1.301.96];%样本数据
z=[1;1;1;1;1;1;1;1;1;-2;-2;-2;-2;-2;-2];%数据更改
x=xy(:
1);y=xy(:
2);x1=x(1:
9);y1=y(1:
9);x2=x(10:
15);y2=y(10:
15);
A=[1.241.271;
1.361.741;
1.381.641;
1.381.821;
1.381.901;
1.401.701;
1.481.821;
1.541.821;
1.562.081;
1.141.781;
1.181.961;
1.201.861;
1.262.001;
1.282.001;
1.301.961];
a=A\z%求解超定方程组
x=1.10:
0.02:
1.60;
y=(-a
(1)*x-a(3))/a
(2);%确定分界线方程
plot(x1,y1,'x',x2,y2,'*',x,y)%在散点图中画出分界线
程序执行后,从图形窗口将得到新的分界线图(如下图所示)
样本散点和分界线图2
从图形中可以看出,在所给出的样本中,有一只Af类蠓虫被分到了Apf类一侧,这里可以把它作为特例看待,从总体上看,这种分类方式依然是科学的,因为这种分类方式能更好的趋利避害。
同样从命令窗口得到运行结果,
a=
9.9683
-4.3692
-5.5776
编写程序panduan1.m,将需要判断的三组数据代入新的判别函数g(P)=9.9683x-4.3692y-5.5776
x=[1.241.281.40];
y=[1.801.842.04];
g=9.9683*x-4.3692*y-5.5776
运行程序可得
g=
-1.0815-0.8575-0.5351
所以,如果Af是宝贵的传粉益虫,Apf是某种疾病的载体,则由新的判别函数判别三个新蠓虫的类属,依然均判为Apf类(注:
该结论成立的前提是把权值“-1”改为“-2”,如果改为其它负值,结果可能有所不同)。
4.4解决蠓虫分类问题的其他方案简述
对于蠓虫分类问题,另有多种解决方案,比如马氏距离判别法、Fisher判别法、Bayes判别法,另外也可以运用人工智能网进行求解,解法可谓多种多样。
这里介绍人工智能网中的LVQ(LearningVectorQuantization)网以及Bayes判别法,并使用这两种方法解决蠓虫分类问题(这里不考虑两类蠓虫益虫或害虫的情况)。
4.41人工智能网LVQ
LVQ网是一种适用于有监督情况的学习方法。
在有监督的情况下,学习样本的类别是事先已知的,与此相应,每个输出单元所对应的类别也事先作了规定,但是,代表同一类别的输出单元可以不止一个。
在LVQ中,对于任一输入向量,按无监督有竞争的方式选出优胜者i*,但权的修正规则取决于输入向量的类别与i*所代表的是否一致,确切地说,令
前一种情况,修正和无监督的学习一致,权向样品方向移动一小段距离;后一种则相反,权向离开样品方向移动一小段距离,这样就减少了错误分类的机会。
对于上述的蠓虫分类问题,我们编写程序lvq.m如下:
Af=[1.241.361.381.381.381.401.481.541.56;
1.271.741.641.821.901.701.821.822.08];%Af类蠓虫的样本数据
Apf=[1.141.181.201.261.281.30;1.781.961.862.002.001.96];
%Apf类蠓虫的样本数据
p=[Af,Apf];%p为lvq神经网的输入向量
Tc=[ones(1,9)2*ones(1,6)];%Tc为分类指数Af1;Apf2
T=ind2vec(Tc);%ind2vec将Tc转换为lvq神经网的输出向量
net=newlvq(minmax(p),5,[0.6,0.4]);%新建lvq网
%以下为lvq网的学习过程
net.trainParam.show=100;
net.trainParam.epochs=1000;
net=train(net,p,T);
Y=sim(net,p);%仿真模拟lvq网
Yc=vec2ind(Y);
test=nnz(Yc-Tc);%测试lvq网
pp=[1.241.281.40;1.801.842.04];%等待分类蠓虫的数据
y=sim(net,pp);%仿真模拟lvq网对蠓虫进行分类
index=vec2ind(y)
程序运行后,从命令窗口得到运行结果,
TRAINR,Epoch0/1000
TRAINR,Epoch3/1000
TRAINR,Performancegoalmet.
index=
222
因此,通过LVQ网进行分类,所得三个蠓虫的类属为2,即依然为Apf类。
4.42Bayes判别法
(1)判别总体的协方差矩阵是否相等
(2)判断总体是否服从正态分布
首先对每个指标进行一元正态分布的检验,若有一个指标不服从正态分布,则总体不服从正态分布;若每个指标都服从一元正态分布,且各指标不相关则总体服从正态分布。
(3)利用按比例分配方法估计两个总体的先验概率:
p1=6/(6+9)=0.4;p2=9/(6+9)=0.6;
(4)编写程序Bayes.m
apf=[1.14,1.78;1.18,1.96;1.20,1.86;1.26,2.;1.28,2;1.30,1.96];
af=[1.24,1.72;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];
x=[1.24,1.80;1.28,1.84;1.4,2.04];
p1=0.4;p2=0.6;
m1=mean(apf);m2=mean(af);s1=cov(apf);s2=cov(af);
S=(5*s1+8*s2)/13;
fori=1:
3,
d(i,:
)=log(0.4)-0.5*((x(i,:
)-m1)*inv(S)*(x(i,:
)-m1)')-(log(0.6)-0.5*((x(i,:
)-m2)*inv(S)*(x(i,:
)-m2)'));
end
d
(5)得到运行结果:
d=
1.7585
0.9514
1.5747
由于d的结果全部大于零,即p1f1>p2f2,因此,通过Bayes判别法进行分类,三个蠓虫均属于Apf类。
评价:
对于以上具体描述的判别方法,每一种方法都存在一个错判概率的问题,至于具体问题哪一种判别方法好,错判概率是一个指标,它应该尽量的小,但是最终的判别结果往往需要综合考虑。
5.总结体会
这次实验是一次较为困难却有意义的实践,我用了将近半个月的时间来完整的解决这个问题。
起初并不知道从何下手,后来经过查阅资料了解到这类问题可以有多种解决方案。
于是我首先采用了分界线方法进行求解,因为这种方法容易上手,在平常的课堂实验中就有所涉及,但是调试程序的时候还是遇到了些小困难,不过很快便解决了。
对于实验中第三个问题该怎样表述,我想了很久,最后只得以例子的形式表达出来,不过自我感觉也还是能自圆其说的。
在查阅了关于这种分类问题的相关资料后,同时了解到人工智能网中的LVQ方法以及Bayes判别法,于是专门去图书馆学习了一下相关知识,发现用比较基础的知识就可以将这一问题解决,于是加以运用,便得到了上文提到的lvq.m及Bayes.m文件,得到的运行结果与使用分界线方法是一致的。
通过这次实验,我更深刻的了解了Matlab软件的强大功能以及数学应用的广泛性,同时也增强了我分析问题的能力。
另外,通过这学期的学习与实践,我学到了一些东西,也体会到了专业知识的运用,在这里要感谢邢老师的认真指导。