实验 1 Fisher 线性判别实验
一、实验目的
应用统计方法解决模式识别问题的困难之一是维数问题,在低维空间行得通的方法,在
高维空间往往行不通。因此,降低维数就成为解决实际问题的关键。Fisher的方法,实际上
涉及维数压缩。
如果要把模式样本在高维的特征向量空间里投影到一条直线上,实际上就是把特征空间
压缩到一维,这在数学上容易办到。问题的关键是投影之后原来线性可分的样本可能变得混
杂在一起而无法区分。在一般情况下,总可以找到某个最好的方向,使样本投影到这个方向
的直线上是最容易分得开的。如何找到最好的直线方向,如何实现向最好方向投影的变换,
是Fisher法要解决的基本问题。这个投影变换就是我们寻求的解向量 *w
本实验通过编制程序体会 Fisher 线性判别的基本思路,理解线性判别的基本思想,掌
握 Fisher 线性判别问题的实质。
二、实验原理
1.线性投影与Fisher准则函数
各类在 d 维特征空间里的样本均值向量:
M 1
n
i
i
k X
x
x
k
i
,
2,1i
(4.5-2)
通过变换 w 映射到一维特征空间后,各类的平均值为:
m
i
1
n
i
y
k Y
i
y
k
,
2,1i
(4.5-3)
映射后,各类样本“类内离散度”定义为:
2
S
i
y m
k
i
(
y Y
k
i
2
)
,
2,1i
(4.5-4)
显然,我们希望在映射之后,两类的平均值之间的距离越大越好,而各类的样本类内离
散度越小越好。因此,定义Fisher准则函数:
|
)
J w
F
(
m m
1
2
2
2
s
s
1
2
2
|
(4.5-5)
使 FJ 最大的解 *w 就是最佳解向量,也就是Fisher的线性判别式。
2.求解 *w
从
(wJ F 的表达式可知,它并非 w 的显函数,必须进一步变换。
)
已知:
m
i
m
i
1
n
i
1
n
i
y
k
,
2,1i
, 依次代入(4.5-1)和(4.5-2),有:
y
k Y
i
Xx
k
T
xw
k
T
w
i
1(
n
i
Xx
k
i
x
k
)
T
Mw
,
i
2,1i
(4.5-6)
所以:
|
mm
2
1
2
|
||
T
MwMw
T
1
2
||
||
2
T
MMw
(
1
2
||)
2
T
wSwwMMMMw
)(
(
)
T
T
2
1
1
2
b
其中:
S
b
(
MMMM
)(
1
2
1
T
)
2
(4.5-7)
(4.5-8)
bS 是原 d 维特征空间里的样本类内离散度矩阵,表示两类均值向量之间的离散度大小,
因此, bS 越大越容易区分。
Mwm
T
i
和(4.5-2)
i
M 1
n
i
i
k X
x
x
k
代入(4.5-4) 2
iS 式中:
i
将(4.5-6)
S
2
i
x
k X
T
w
(
T
xw
k
T
Mw
2
)
i
i
MxMx
k
)(
k
i
T
)
i
w
k X
(
i
x
T
wSw i
(
x
k
X
i
MxMx
k
)(
k
i
(4.5-9)
T
)
i
,
2,1i
其中:
S
i
因此:
2
S
1
S
2
2
T
(
Sw
1
显然:
Sw
S
1
S
2
wSwwS
2
)
w
T
(4.5-10)
(4.5-11)
(4.5-12)
iS 称为原 d 维特征空间里,样本“类内离散度”矩阵。
wS 是样本“类内总离散度”矩阵。
为了便于分类,显然 iS 越小越好,也就是 wS 越小越好。
将上述的所有推导结果代入
(wJ F 表达式:
)
可以得到:
*
w
1
MMS
w
(
1
)
2
其中,
是一个比例因子,不影响 *w 的方向,可以删除,从而得到最后解:
*
w
1
MMS
w
(
1
)
2
(4.5-18)
*w 就使
(wJ F 取得最大值, *w 可使样本由 d 维空间向一维空间映射,其投影方向最好。
)
*
w
1
MMS
w
(
1
)
2
是一个Fisher线性判断式。
这个向量指出了相对于 Fisher 准则函数最好的投影线方向。
3. Fisher算法步骤
由Fisher线性判别式
*
w
1
MMS
w
(
1
)
求解向量 *w 的步骤:
2
① 把来自两类
1 / ww
2
的训练样本集 X 分成 1w 和 2w 两个子集 1X 和 2X 。
② 由
③ 由
i
M 1
n
i
S
i
x
k
X
k X
x
x
k
i
,
2,1i
,计算 iM 。
MxMx
k
)(
k
i
T
)
i
计算各类的类内离散度矩阵 iS ,
2,1i
。
(
i
④ 计算类内总离散度矩阵
Sw
S
1
S
2
。
⑤ 计算 wS 的逆矩阵
1
wS 。
⑥ 由
*
w
1
MMS
w
(
1
)
求解 *w 。
2
4.算法优缺点分析
优点:(1)一般对于线性可分的样本,总能找到一个投影方向,使得降维后样本仍然
线性可分,而且可分性更好即不同类别的样本之间的距离尽可能远,同一类别的样本尽可能
集中分布。
(2)Fisher方法可直接求解权向量 *w ;
(3)Fisher的线性判别式不仅适用于确定性模式分类器的训练,而且对于随机模式也
是适用的,Fisher还可以进一步推广到多类问题中去
缺点:
(1)如果
1 MM ,
2
* w
0
,则样本线性不可分;
1 MM ,未必线性可分; wS
2
不可逆,未必不可分。
(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
0
y轴
-1
-0.5
0
0.5
x轴
1.5
1
训 练 数 据 w1,w2线 性 分 类 效 果 图
4
2
0
-2
-4
-6
40
20
0
y轴
-20
-60
-40
0
-20
x轴
40
20
测试数据 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
4
2
0
-2
-4
-6
4
5
0
-5
-10
-15
-20
-25
150
训 练 w1,w2/样 本 w3原 始 数 据 三 维 分 布 图
2
0
y轴
-2
-2
-1
0
x轴
2
1
训 练 w1,w2/样 本 w3数 据 线 性 投 影 分 类 效 果 图
100
50
y轴
0
-50
-200
-150
-100
x轴
50
0
-50