利用K-L变换进行特征提取的实验报告稿.doc
《利用K-L变换进行特征提取的实验报告稿.doc》由会员分享,可在线阅读,更多相关《利用K-L变换进行特征提取的实验报告稿.doc(7页珍藏版)》请在冰豆网上搜索。
模式识别大作业
班级:
09030901
题目:
利用K-L变换进行特征提取的实验
姓名:
陈升富学号:
2009302313
姓名:
黎照学号:
2009302320
姓名:
益琛学号:
2009302311
日期:
2012/4/25
1、基本要求
用FAMALE.TXT和MALE.TXT的数据作为本次实验使用的样本集,利用K-L变换对该样本集进行变换,与过去用Fisher线性判别方法或其它方法得到的分类面进行比较,从而加深对所学内容的理解和感性认识。
2、具体做法
(1)不考虑类别信息对整个样本集进行K-L变换(即PCA),并将计算出的新特征方向表示在二维平面上,考察投影到特征值最大的方向后男女样本的分布情况并用该主成分进行分类。
(2)利用类平均向量提取判别信息,选取最好的投影方向,考察投影后样本的分布情况并用该投影方向进行分类。
(3)将上述投影和分类情况与以前做的各种分类情况比较,考察各自的特点和相互关系。
3、K-L变换的原理
设n维随机向量,其均值向量,相关矩阵,协方差矩阵,经正交变换后产生向量。
设有标准正交变换矩阵T,(即T'T=I)
,
(称为的K-L展开式)
取前m项为的估计值其均方误差为
在T‘T=I的约束条件下,要使均方误差
为此设定准则函数
由可得
即
表明:
li是的特征值,而是相应的特征向量。
利用上式有:
用“截断”方式产生x的估计时,使均方误差最小的正交变换矩阵是其相关矩阵Rx的前m个特征值对应的特征向量构成的。
4、实验内容
实验中,训练样本集的身高和体重数据构成二维特征向量。
利用K-L变换,找出合适的投影方向,将原坐标系中的二维向量变为新坐标系中的一维向量,根据变换后的数据进行分类及为实验目的。
4.1不考虑类别信息的特征提取
根据训练样本集数据,计算样本均值和协方差矩阵ssss诉讼,式中,是二维特征列向量。
令产生矩阵Ψ=计算Ψ的特征值,则最大特征值对应的特征向量即为要求的新坐标系。
将原来的二维坐标系中的数据投影到以为坐标系之后,给定适当的阈值即可实现对样本数据得分类。
4.2利用类均值向量的特征提取
根据训练样本集数据,分别计算两个样本的均值和协方差矩阵。
在给定先验概率的情况下可以计算出类内离散度矩阵以及类间离散度矩阵,其中和分别代表各类均值与总体均值。
是K-L坐标系的产生矩阵,变换后表征分类性能的函数
可见是类间离散度与类内离散度在这坐标的分量之比,越大,表明在新坐标系中该坐标轴包含较多可分性信息。
为了降低特征空间的维数,可以将各分量按大小重新排列,使:
并且与前面d个最大的值相对应的特征向量,j=1,……,d作为特征空间的基向量。
5、实验结果
5.1不考虑类别信息的特征提取实验结果
实验中不考虑类别信息,用FAMALE.TXT和MALE.TXT的数据作为本次实验使用的样本集,建立基于K-L变换的分类器,记录错误率,并与Fisher线性分类器的分类结果作比较。
5.2利用类均值向量的特征提取实验结果
实验中考虑类别信息,设定男女先验概率分别为0.75和0.25,建立基于K-L变换的分类器,记录分类错误率并与Fisher线性分类器的分类错误率进行比较。
6、总结及心得
总结:
由实验结果可知:
不考虑类别信息的基于K-L变换的特征提取再分类与Fisher分类器效果差不多,不过在本次实验中,Fisher判别更胜一筹。
考虑类别信息时,分类效果会受到先验概率的影响。
心得:
7、实验源代码
不考虑类别信息:
clearall
clc
A=textread('MALE.TXT');
B=textread('FEMALE.TXT');
male=A(:
1:
2);
female=B(:
1:
2);
T=[male;female];
s=cov(T)
[m,n]=eig(s);
ifn(1,1)>n(2,2)
w=m(:
1);
elseifn(1,1)w=m(:
2);
end
hei_m=male(:
1);
wei_m=male(:
2);
hei_fe=female(:
1);
wei_fe=female(:
2);
plot(hei_m,wei_m,'g*',hei_fe,wei_fe,'ro');
holdon
y=w'*[male',female'];
fori=1:
50
plot(y(:
i),'g*');
end
fori=51:
100
plot(y(:
i),'ro');
end
l=mean(y);
k=0;
m=0;
fori=1:
100
ify(i)k=k+1;
elseify(i)>l&i>50
m=m+1;
end
end
k,m
ess1=k/100
ess2=m/100
考虑类别信息:
clearall
clc
pw1=input('ÄÐÉúµÄÏÈÑé¸ÅÂÊ£º');
pw2=input('Å®ÉúµÄÏÈÑé¸ÅÂÊ£º');
A=textread('MALE.TXT');
B=textread('FEMALE.TXT');
male=A(:
1:
2);
female=B(:
1:
2);
T=[male;female];
thegema1=cov(male);
thegema2=cov(female);
Sw=pw1*thegema1+pw2+thegema2;
[V,U]=eig(Sw);
u1=mean(male);
u2=mean(female);
u=mean(T);
Sb=pw1*(u1-u)'*(u1-u)+pw2*(u2-u)'*(u2-u);
J1=V(:
1)'*Sb*V(:
1)/U(1,1);
J2=V(:
2)'*Sb*V(:
2)/U(2,2);
ifJ1>=J2
w=V(:
1);
else
w=V(:
2);
end
hei_m=male(:
1);
wei_m=male(:
2);
hei_fe=female(:
1);
wei_fe=female(:
2);
plot(hei_m,wei_m,'g*',hei_fe,wei_fe,'ro');
holdon
y=w'*[male',female'];
fori=1:
50
plot(y(:
i),'g*');
end
fori=51:
100
plot(y(:
i),'ro');
end
l=mean(y);
k=0;
m=0;
fori=1:
100
ify(i)k=k+1;
elseify(i)>l&i>50
m=m+1;
end
end
k,m
ess1=k/100
ess2=m/100