实验1 Fisher线性判别实验
一、实验目的
应用统计方法解决模式识别问
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
的困难之一是维数问题,在低维空间行得通的方法,在高维空间往往行不通。因此,降低维数就成为解决实际问题的关键。Fisher的方法,实际上涉及维数压缩。
如果要把模式样本在高维的特征向量空间里投影到一条直线上,实际上就是把特征空间压缩到一维,这在
数学
数学高考答题卡模板高考数学答题卡模板三年级数学混合运算测试卷数学作业设计案例新人教版八年级上数学教学计划
上容易办到。问题的关键是投影之后原来线性可分的样本可能变得混杂在一起而无法区分。在一般情况下,总可以找到某个最好的方向,使样本投影到这个方向的直线上是最容易分得开的。如何找到最好的直线方向,如何实现向最好方向投影的变换,
*是Fisher法要解决的基本问题。这个投影变换就是我们寻求的解向量 w
本实验通过编制程序体会Fisher线性判别的基本思路,理解线性判别的基本思想,掌握Fisher线性判别问题的实质。
二、实验原理
1(线性投影与Fisher准则函数
各类在维特征空间里的样本均值向量: d
1M,x, (4.5-2) i,1,2,iknx,Xiki
w通过变换映射到一维特征空间后,各类的平均值为:
1m,y, (4.5-3) i,1,2,ikny,Yiki
映射后,各类样本“类内离散度”定义为:
22Sym,,(),iki, (4.5-4) i,1,2yY,ki
显然,我们希望在映射之后,两类的平均值之间的距离越大越好,而各类的样本类内离散度越小越好。因此,定义Fisher准则函数:
2||mm,12Jw(), (4.5-5) F22ss,12
*使最大的解就是最佳解向量,也就是Fisher的线性判别式。 JwF
*2(求解 w
w从的表达式可知,它并非的显函数,必须进一步变换。 J(w)F
1m,y已知:,, 依次代入(4.5-1)和(4.5-2),有: i,1,2,ikny,Yiki
11TTTm,wx,w(x),wM, (4.5-6) i,1,2,,ikkinn,,xXxXiikiki
2TT2T2所以: |m,m|,||wM,wM||,||w(M,M)||121212
TTT (4.5-7) ,w(M,M)(M,M)w,wSw1212b
T其中: (4.5-8) S,(M,M)(M,M)1212b
是原维特征空间里的样本类内离散度矩阵,表示两类均值向量之间的离散度大小,Sdb
因此,越大越容易区分。 Sb
1T2M,x将(4.5-6)和(4.5-2)代入(4.5-4)式中: m,wMS,ikiiinx,Xiki
TT22S,(wx,wM) ,ikix,Xki
TT,w,(x,M)(x,M),w ,kikix,Xki
T (4.5-9) ,wSwi
T其中:, (4.5-10) S,(x,M)(x,M)i,1,2,ikiki,xXki
22TT因此: (4.5-11) S,S,w(S,S)w,wSw1212w显然: (4.5-12) S,S,Sw12
称为原维特征空间里,样本“类内离散度”矩阵。 Sdi
是样本“类内总离散度”矩阵。 Sw
为了便于分类,显然越小越好,也就是越小越好。 SSiw将上述的所有推导结果代入表达式: J(w)F
可以得到:
1,,*w,S(M,M) w12,
,*其中,是一个比例因子,不影响的方向,可以删除,从而得到最后解: w,
1,* (4.5-18) w,S(M,M)w12
**就使取得最大值,可使样本由维空间向一维空间映射,其投影方向最好。J(w)wwdF
1,*是一个Fisher线性判断式。 w,S(M,M)w12
这个向量指出了相对于Fisher准则函数最好的投影线方向。
3. Fisher算法步骤
1,**由Fisher线性判别式求解向量的步骤: w,S(M,M)ww12
X? 把来自两类的训练样本集分成和两个子集和。 w/wwwXX121212
1M,x? 由,,计算。 Mi,1,2,ikinx,Xiki
T? 由计算各类的类内离散度矩阵,。 S,(x,M)(x,M)Si,1,2,ikikii,xXki
? 计算类内总离散度矩阵。 S,S,Sw12
,1? 计算的逆矩阵。 SSww
1,**? 由求解。 w,S(M,M)ww12
4(算法优缺点分析
优点:(1)一般对于线性可分的样本,总能找到一个投影方向,使得降维后样本仍然
线性可分,而且可分性更好即不同类别的样本之间的距离尽可能远,同一类别的样本尽可能
集中分布。
*(2)Fisher方法可直接求解权向量; w
(3)Fisher的线性判别式不仅适用于确定性模式分类器的训练,而且对于随机模式也
是适用的,Fisher还可以进一步推广到多类问题中去
缺点:
*(1)如果,,则样本线性不可分; ,未必线性可分; SM,MM,Mw,0w1212不可逆,未必不可分。
(2)对线性不可分的情况,Fisher方法无法确定分类
三、实验结果分析
(1)训练样本程序确定投影方向
clear
% w1类训练样本,10组,每组为行向量。
w1=[-0.4,0.58,0.089;-0.31,0.27,-0.04;-0.38,0.055,-0.035;-0.15,0.53,0.011;-0.35,0.47,0.034;..
.
0.17,0.69,0.1;-0.011,0.55,-0.18;-0.27,0.61,0.12;-0.065,0.49,0.0012;-0.12,0.054,-0.063];
% w2类训练样本,10组,每组为行向量。
w2=[0.83,1.6,-0.014;1.1,1.6,0.48;-0.44,-0.41,0.32;0.047,-0.45,1.4;0.28,0.35,3.1;...
-0.39,-0.48,0.11;0.34,-0.079,0.14;-0.3,-0.22,2.2;1.1,1.2,-0.46;0.18,-0.11,-0.49];
%w1=load('xxx1.txt');
%w2=load('xxx2.txt');
xx1=[-0.7,0.58,0.089]'; % 测试数据xx1,为列向量。
xx2=[0.047,-0.4,1.04]'; % 测试数据xx2,为列向量。
m1=mean(w1,1)'; % w1类样本均值向量,为列向量
sw1=cov(w1,1); % w1类样本类内离散度矩阵
m2=mean(w2,1)'; % w2类样本均值向量,为列向量
sw2=cov(w2,1); % w2类样本类内离散度矩阵
sw=sw1+sw2; % 总类内离散度矩阵
w= inv(sw)*(m1-m2); % 投影方向
y0=(w'*m1+w'*m2)/2; % 阈值y0
figure(1)
for i=1:10
plot3(w1(i,1),w1(i,2),w1(i,3),'g+')
hold on
plot3(w2(i,1),w2(i,2),w2(i,3),'ro') end
xlabel('x轴');
ylabel('y轴');
title('原始训练数据w1,w2三维分布图');
z1=w'*w1';
z2=w'*w2';
figure(2)
for i=1:10
plot3(z1(i)*w(1),z1(i)*w(2),z1(i)*w(3),'g+')
hold on
plot3(z2(i)*w(1),z2(i)*w(2),z2(i)*w(3),'ro')
end
xlabel('x轴');
ylabel('y轴');
title('训练数据w1,w2线性分类效果图'); hold off
y1=w'*xx1;
if y1>y0
fprintf('测试数据xx1属于w1类\n'); else
fprintf('测试数据xx1属于w2类\n'); end
y2=w'*xx2;
if y2>y0
fprintf('测试数据xx2属于w1类\n'); else
fprintf('测试数据xx2属于w2类\n'); end
结果如下:
原始训练数据w1,w2三维分布图
4
3
2
1
0
-1
2
1.511
0.50
0
-1-0.5y轴x轴
训练数据w1,w2线性分类效果图
4
2
0
-2
-4
-6
40
40202000-20-40-20-60y轴x轴
测试数据xx1属于w1类
测试数据xx2属于w2类
(2)对样本数据w3中的10个样本数据进行fisher判别法分类(程序及结果) 程序如下:
clear
% w1类训练样本,10组,每组为行向量。
w1=[-0.4,0.58,0.089;-0.31,0.27,-0.04;-0.38,0.055,-0.035;-0.15,0.53,0.011;-0.35,0.47,0.034;..
0.17,0.69,0.1;-0.011,0.55,-0.18;-0.27,0.61,0.12;-0.065,0.49,0.0012;-0.12,0.054,-0.063];
% w2类训练样本,10组,每组为行向量。
w2=[0.83,1.6,-0.014;1.1,1.6,0.48;-0.44,-0.41,0.32;0.047,-0.45,1.4;0.28,0.35,3.1;...
-0.39,-0.48,0.11;0.34,-0.079,0.14;-0.3,-0.22,2.2;1.1,1.2,-0.46;0.18,-0.11,-0.49];
% w3为待分类样本数据,10组,每组为列向量。
w3=[1.58,2.32,-5.8;0.67,1.58,-4.78;1.04,1.01,-3.63;-1.49,2.18,-3.39;-0.41,1.21,-4.73;...
1.39,3.61,2.87;1.2,1.4,-1.89;-0.92,1.44,-3.22;0.45,1.33,-4.38;-0.76,0.84,-1.96]';
m1=mean(w1,1)'; % w1类样本均值向量,为列向量
sw1=cov(w1,1); % w1类样本类内离散度矩阵
m2=mean(w2,1)'; % w2类样本均值向量,为列向量
sw2=cov(w2,1); % w2类样本类内离散度矩阵
sw=sw1+sw2; % 总类内离散度矩阵
w= inv(sw)*(m1-m2); % 投影方向
y0=(w'*m1+w'*m2)/2 % 阈值y0
% w1,w2,w3原始数据三维分布图
figure(3)
for i=1:10
plot3(w1(i,1),w1(i,2),w1(i,3),'g+')
hold on
plot3(w2(i,1),w2(i,2),w2(i,3),'ro')
hold on
plot3(w3(1,i),w3(2,i),w3(3,i),'bp') end
xlabel('x轴');
ylabel('y轴');
title('训练w1,w2/样本w3原始数据三维分布图');
% w1,w2,w3数据线性投影分类效果图
z1=w'*w1';
z2=w'*w2';
z3=w'*w3;
figure(4)
for i=1:10
plot3(z1(i)*w(1),z1(i)*w(2),z1(i)*w(3),'g+')
hold on
plot3(z2(i)*w(1),z2(i)*w(2),z2(i)*w(3),'ro')
hold on
plot3(z3(i)*w(1),z3(i)*w(2),z3(i)*w(3),'bp') end
xlabel('x轴');
ylabel('y轴');
title('训练w1,w2/样本w3数据线性投影分类效果图'); hold off
for i=1:10
y(i)=w'*w3(:,i);
if y(i)>y0
fprintf('样本数据%d属于w1类\n',i);
else
fprintf('样本数据%d属于w2类\n',i);
end
end
训练w1,w2/样本w3原始数据三维分布图
4
2
0
-2
-4
-6
4
221
00
-1
-2-2y轴x轴
训练w1,w2/样本w3数据线性投影分类效果图5
0
-5
-10
-15
-20
-25
150
10050
050-50-1000-150-50-200y轴x轴
具体分类结果如下: 样本数据1属于w1类 样本数据2属于w1类 样本数据3属于w2类 样本数据4属于w1类 样本数据5属于w1类 样本数据6属于w1类 样本数据7属于w2类 样本数据8属于w1类 样本数据9属于w1类 样本数据10属于w1类