一、设计目的
本设计旨在进一步了解分类器的设计概念,能够根据自己的设计对线性分类器有更深刻地认识,理解Fisher准则方法确定最佳线性分界面方法的原理。
二、算法原理
线性判别函数的一般形式可表示成
根据Fisher选择投影方向W的原则,即使原样本向量在该方向上的投影能兼顾类间分布尽可能分开,类内样本投影尽可能密集的要求,用以评价投影方向W的函数为:
使用Fisher准则方法确定最佳线性分界面的方法是一个著名的方法,尽管提出该方法的时间比较早,仍见有人使用。
三、设计内容
已知有两类数据和,即 Female.txt和Male.txt,进行Fisher判别分类,用test1.txt和test2.txt中的样本进行测试。
数据的样本点分布如下图:
图 1:样本点分布图
四、设计要求
1)把数据作为样本,根据Fisher选择投影方向的原则,使原样本向量在该方向上的投影能兼顾类间分布尽可能分开,类内样本投影尽可能密集的要求,求出评价投影方向的函数,并在图形表示出来。并在实验报告中表示出来,并求使取极大值的。用matlab完成Fisher线性分类器的设计,程序的语句要求有注释。
2)根据上述的结果并判断test2.txt中第5、第10、第15、第22、第32个样本,分别属于哪个类别,并画出数据分类相应的结果图,要求画出其在上的投影。
3)回答如下问题,分析一下的比例因子对于Fisher判别函数没有影响的原因
五、算法步骤
六、MATLAB源代码
%读入男生的身高、体重
male = importdata(‘MALE.TXT’) ;
%读入女生的身高、体重
female = importdata(‘FEMALE.TXT’);
m1=mean(male);
m2=mean(female);
test1 = ‘.\test1.txt’;
[data1,data2,data3]=textread(test1,’%n%n%s’);
pos = find(strcmp(data3,‘m’));
neg = find(strcmp(data3,‘f’));
%画图
figure;
hold on;
plot(data1(pos,1),data2(pos,1),‘k+’); %男生样本
plot(data1(neg,1),data2(neg,1),‘ko’); %女生样本
legend(‘男生’,‘女生’);title(‘test1样本点分布’);
xlabel(‘身高’);ylabel(‘体重’);
test2 = ‘.\test2.txt’;
[data11,data22,data33]=textread(test2,’%n%n%s’);
pos1 = find(strcmp(data33,‘M’));
neg1 = find(strcmp(data33,‘F’));
%画图
figure(2);
hold on;
plot(data11(pos1,1),data22(pos1,1),‘k+’); %男生样本
plot(data11(neg1,1),data22(neg1,1),‘ko’); %女生样本
legend(‘男生’,‘女生’);title(‘test2样本点分布’);
xlabel(‘身高’);ylabel(‘体重’);
figure(3)
hold on;
plot(male(:,1),male(:,2),‘b*’); %男生样本
plot(female(:,1),female(:,2),‘r+’); %女生样本
legend(‘男生’,‘女生’);title(‘投影前图像’);
xlabel(‘身高’);ylabel(‘体重’);
s1=zeros(2,2);
for i=1:size(male,1)
s1 = s1 + (male(i,:)-m1)’*(male(i,:)-m1);
end
s2=zeros(2,2);
for i=1:size(female,1)
s2 = s2 + (female(i,:)-m2)’*(female(i,:)-m2);
end
sw=s1+s2;
m1=m1’;
m2=m2’;
w=inv(sw)*(m1-m2);
w=w/sqrt(w’*w)
w0=w’*(m1+m2)/2
g1 = w’*male’;
g2 = w’*female’;
r1=ones(size(g1));
r2=ones(size(g2));
figure(4);
hold on
plot(g1,r1,‘b*’)%男生样本的投影结果
plot(g2,r2,‘r+’)%女生样本的投影结果
t =[156 45; 160 47; 155 60;160 45;173 54];
yt=w’t’% - w0;
rt1=1.1ones(size(yt));
plot(yt(find(yt>w0)),rt1(yt>w0),‘b+’)
plot(yt(find(yt<w0)),rt1(yt<w0),‘r*’)
a=axis();
a(3)= 0.99;
a(4)= 1.12;
axis(a)
plot([w0 w0],[a(3) a(4)],‘r’)
legend(‘男生样本的投影结果’,‘女生样本的投影结果’,‘测试数据中的第一类’,‘测试数据中的第二类’,‘两类数据投影的平均值’);
七、结果展示
1.投影前后图形显示
2、参数
决策面向量:W =[0.7817,0.6236 ]
阈值:yuzhi= 168.4505
样本点分类:
150.0115 154.3856 158.5842 153.1383 168.9133
八、实验分析
1.分析一下的比例因子对于Fisher判别函数没有影响的原因
设乘上一比例因子α,则投影后即为,相当于每一个样本都乘以比例因子α,所以对Fisher判别函数没有影响。
2.Fisher判别的直观解释是,把待决策的样本投影到Fisher判别的方向上,通过与两类均值投影的平分点相比较做出分类决策。在先验概率相同的情况下,以该平分点为两类的分类点;在先验概率不同时,分类点向先验概率小的一侧偏移。
3.Fisher判别并不对样本的分布做任何假设。但在很多情况下,当样本维数比较高且样本数也比较多时,投影到一维空间后样本接近正态分布。这时可以在一维空间中用样本拟合正态分布,用得到的参数来确定分类阈值。