《模式识别》实验报告 K-L变换 特征提取

  • 格式:doc
  • 大小:360.50 KB
  • 文档页数:9

模式识别实验报告 西安交通大学 高海南

1 基于K-L变换的iris数据分类

一、实验原理

K-L变换是一种基于目标统计特性的最佳正交变换。它具有一些优良的性质:即变换后产生的新的分量正交或者不相关;以部分新的分量表示原矢量均方误差最小;变换后的矢量更趋确定,能量更集中。这一方法的目的是寻找任意统计分布的数据集合之主要分量的子集。

设n维矢量12,,,Tnxxxx,其均值矢量Eμx,协方差阵()TxECxu)(xu,此协方差阵为对称正定阵,则经过正交分解克表示为

xTCUΛU,其中12,,,[]ndiagΛ,12,,,nuuuU为对应特征值的特征向量组成的变换阵,且满足1TUU。变换阵TU为旋转矩阵,再此变换阵下x变换为TxuyU,在新的正交基空间中,相应的协方差阵12[,,,]xndiagxUCUC。通过略去对应于若干较小特征值的特征向量来给y降维然后进行处理。通常情况下特征值幅度差别很大,忽略一些较小的值并不会引起大的误差。

对经过K-L变换后的特征向量按最小错误率bayes决策和BP神经网络方法进行分类。

二、实验步骤

(1)计算样本向量的均值Eμx和协方差阵()TxECxu)(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.5810xC(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.7537U

从上面的计算可以看到协方差阵特征值0.023835和0.07821相对于0.24267和4.2282很小,并经计算个特征值对误差影响所占比重分别为模式识别实验报告 西安交通大学 高海南

2 92.462%、5.3066%、1.7103%和0.52122%,因此可以去掉k=1~2个最小的特征值,得到新的变换阵12,,,newnkuuuU。

(3)将样本变换为TnewxuyU。

(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.5458TnewU

经变换后的向量在新的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 TnewU

经变换后的向量在新的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));