《模式识别》实验报告 K-L变换 特征提取
- 格式:doc
- 大小:360.50 KB
- 文档页数:9
模式识别实验报告 西安交通大学 高海南
1 基于K-L变换的iris数据分类
一、实验原理
K-L变换是一种基于目标统计特性的最佳正交变换。它具有一些优良的性质:即变换后产生的新的分量正交或者不相关;以部分新的分量表示原矢量均方误差最小;变换后的矢量更趋确定,能量更集中。这一方法的目的是寻找任意统计分布的数据集合之主要分量的子集。
设n维矢量12,,,Tnxxxx,其均值矢量Eμx,协方差阵()TxECxu)(xu,此协方差阵为对称正定阵,则经过正交分解克表示为
xTCUΛU,其中12,,,[]ndiagΛ,12,,,nuuuU为对应特征值的特征向量组成的变换阵,且满足1TUU。变换阵TU为旋转矩阵,再此变换阵下x变换为TxuyU,在新的正交基空间中,相应的协方差阵12[,,,]xndiagxUCUC。通过略去对应于若干较小特征值的特征向量来给y降维然后进行处理。通常情况下特征值幅度差别很大,忽略一些较小的值并不会引起大的误差。
对经过K-L变换后的特征向量按最小错误率bayes决策和BP神经网络方法进行分类。
二、实验步骤
(1)计算样本向量的均值Eμx和协方差阵()TxECxu)(xu
5.8433 3.0573 3.7580 1.1993μ,0.68570.04241.27430.51630.04240.189980.32970.12161.27430.32973.11631.29560.51630.12161.29560.5810xC(2)计算协方差阵xC的特征值和特征向量,则
4.2282 , 0.24267 , 0.07821 , 0.023835[]diagΛ
-0.3614 -0.6566 0.5820 0.3155 0.0845 -0.7302 -0.5979 -0.3197 -0.8567 0.1734 -0.0762 -0.4798 -0.3583 0.0755 -0.5458 0.7537U
从上面的计算可以看到协方差阵特征值0.023835和0.07821相对于0.24267和4.2282很小,并经计算个特征值对误差影响所占比重分别为模式识别实验报告 西安交通大学 高海南
2 92.462%、5.3066%、1.7103%和0.52122%,因此可以去掉k=1~2个最小的特征值,得到新的变换阵12,,,newnkuuuU。
(3)将样本变换为TnewxuyU。
(4)按照最小错误率bayes决策方法分类。
(5)用BP神经网络方法进行分类。
三、实验结果及分析
1. 最小错误率bayes决策分类
(1) 将最小的一个特征值0.023835对应的特征向量去掉,则新的变换矩阵为
-0.3614 -0.6566 0.5820
0.0845 -0.7302 -0.5979
-0.8567 0.1734 -0.0762
-0.3583 0.0755 -0.5458TnewU
经变换后的向量在新的3维空间如图1所示:
图1-1 样本经K-L变换后分布图
变换后的各类样本分别用前30个样本进行训练,用剩下的20个样本进行测试,结果如下:
1) 取第一类样本的后20个数据按1、2分类,t1=20,t2=0,分类正确;取第二类样本的后20个数据按1、2分类,t1=0,t2=20,分类正确。
2) 取第一类样本的后20个数据按1、3分类,t1=20,t3=0,分类正确;取第三类样本的后20个数据按1、3分类,t1=0,t3=20,分类正确。
3) 取第二类样本的后20个数据按2、3分类,t2=19,t3=1,2中一样模式识别实验报告 西安交通大学 高海南
3 本错分到3中;取第三类样本的后20个数据按2、3分类,t2=0,t3=20,分类正确。
(2) 将最小的两个特征值0.023835和0.07821对应的特征向量去掉,则新的变换矩阵为
-0.3614 -0.6566
0.0845 -0.7302
-0.8567 0.1734
-0.3583 0.0755 TnewU
经变换后的向量在新的2维平面如图2所示
图1-2 样本经K-L变换后分布图
变换后的各类样本分别用前30个样本进行训练,用剩下的20个样本进行测试,结果如下:
1) 取第一类样本的后20个数据按1、2分类,t1=20,t2=0,分类正确;取第二类样本的后20个数据按1、2分类,t1=0,t2=20,分类正确。
2) 取第一类样本的后20个数据按1、3分类,t1=20,t3=0,分类正确;取第三类样本的后20个数据按1、3分类,t1=0,t3=20,分类正确。
3) 取第二类样本的后20个数据按2、3分类,t2=19,t3=1,2中一样本错分到3中;取第三类样本的后20个数据按2、3分类,t2=1,t3=19,3中一样本错分到2中。
以上结果与未经K-L变换的最小错误率bayes决策分类结果比较,结果几乎完全相同,只是在去掉最小的两个特征值对应特征向量的K-L变换时取第三类样本的后20个数据按2、3分类,3中一样本错分到2中。 模式识别实验报告 西安交通大学 高海南
4 2. BP神经网络分类
(1) 将最小的两个特征值0.023835和0.07821对应的特征向量去掉,经新的变换矩阵变换后的各类样本分别用前30个样本进行训练,用剩下的20个样本进行测试,分类结果如下:
n1=20 n2=19 n3=19,即第二和第三类各有一个样本错分到另一类中去,分类结果图如下。
图2-1 分类结果图
图2-2 误差性能曲线
(2) 将最小的一个特征值0.023835对应的特征向量去掉,经新的变换矩阵变换后的各类样本分别用前30个样本进行训练,用剩下的20个样本进行测试,分类结果如下:
n1=20 n2=19 n3=19,即第二和第三类各有一个样本错分到另一类中去,分类结果图如下。 模式识别实验报告 西安交通大学 高海南
5
图2-3 分类结果图
图2-4 误差性能曲线
以上结果与未经K-L变换的BP神经网络分类结果比较,K-L变换后结果在大多数情况下未经处理的分类结果。
通过以上两种基于K-L变换的分类方法可以看到,该变换可以将样本的显著特征抽取出来,在降低特征数据的维数减少运算量和存储量的同时,分类结果基本不受影响,甚至在某些次优分类方法(BP神经网络)下可能优于未经变换处理进行的分类。
模式识别实验报告 西安交通大学 高海南
6 附:
K-L变换的最小错误率bayes分类
clear
% 原始数据导入
iris = load('C:\MATLAB7\work\模式识别\iris.txt');
N=150;%取N=150个样本
%求第一类样本均值
for i = 1:N
for j = 1:4
w(i,j) = iris(i,j+1);
end
end
sumx = sum(w,1);
for i=1:4
meanx(1,i)=sumx(1,i)/N;
end
%求样本协方差矩阵
z(4,4) = 0;
var(4,4) = 0;
var=cov(w);
[v,latent,explained] = pcacov(var);
v=fliplr(v);%对特征向量按对应特征值从小到大排序
v(:,1:2)=[];%去掉最小特征值对应的特征向量
for i=1:150
w_k_l(i,:)=(w(i,:)-meanx)*v; %w_k_l为150*3J矩阵
end
%求第一类样本均值
M=30;
w1_k_l(:,:) = w_k_l(1:M,:);
meanx1_k_l=sum(w1_k_l,1)/M;
w2_k_l(:,:) = w_k_l(51:50+M,:);
meanx2_k_l=sum(w2_k_l,1)/M;
w3_k_l(:,:) = w_k_l(101:100+M,:);
meanx3_k_l=sum(w3_k_l,1)/M;
% %求第一类样本协方差矩阵
var1_k_l=cov(w1_k_l);
var2_k_l=cov(w2_k_l);
var3_k_l=cov(w3_k_l);
var1_k_l_inv = inv(var1_k_l);
var2_k_l_inv = inv(var2_k_l);
var3_k_l_inv = inv(var3_k_l);
var1_k_l_det = det(var1_k_l); 模式识别实验报告 西安交通大学 高海南
7 var2_k_l_det = det(var2_k_l);
var3_k_l_det = det(var3_k_l);
p1 = 0.5;p2 = 0.5;p3 = 0.5;
%取测试数据,
test(:,:) = w_k_l(81:100,:);
t1=0;t2=0;t3=0;
for i = 1:50-M
x=test(i,1);y=test(i,2);%z=test(i,3);
% g1 = (-0.5)*([x,y,z]-meanx1_k_l)*var1_k_l_inv*([x,y,z]'-meanx1_k_l') -
0.5*log(abs(var1_k_l_det));
% g2 = (-0.5)*([x,y,z]-meanx2_k_l)*var2_k_l_inv*([x,y,z]'-meanx2_k_l') -
0.5*log(abs(var2_k_l_det));
% g3 = (-0.5)*([x,y,z]-meanx3_k_l)*var3_k_l_inv*([x,y,z]'-meanx3_k_l') -
0.5*log(abs(var3_k_l_det));
g1 = (-0.5)*([x,y]-meanx1_k_l)*var1_k_l_inv*([x,y]'-meanx1_k_l') -
0.5*log(abs(var1_k_l_det));
g2 = (-0.5)*([x,y]-meanx2_k_l)*var2_k_l_inv*([x,y]'-meanx2_k_l') -
0.5*log(abs(var2_k_l_det));