最近看了PCA主成分分析,其中KL变化是其中的一种方法

具体的原理我转载了以下文章

http://blog.csdn.net/kingskyleader/article/details/7734710

先贴一记代码

clear all;
close all;
N=500;
for i=1:Nx1(1,i)=-2+0.8*randn(1);x1(2,i)=-1+0.9*randn(1);x1(3,i)= 2+0.7*randn(1);x1(4,i)=-1+1.5*randn(1);x1(5,i)=-1+1.4*randn(1);x1(6,i)=-2+1.1*randn(1);
end;
for i=1:Nx2(1,i)= 1+0.9*randn(1);x2(2,i)=-2+0.7*randn(1);x2(3,i)=-2+0.8*randn(1);x2(4,i)= 1+1.2*randn(1);x2(5,i)=-1+1.1*randn(1);x2(6,i)=-1+1.0*randn(1);
end;
for i=1:Nx3(1,i)=-2+0.7*randn(1);x3(2,i)= 2+0.8*randn(1);x3(3,i)=-1+0.9*randn(1);x3(4,i)=-1+1.3*randn(1);x3(5,i)= 1+1.2*randn(1);x3(6,i)= 1+1.3*randn(1);
end;x1=x1';
x2=x2';
x3=x3';
X=[x1;x2;x3];%%计算原始向量的均值矩阵
mean_X=mean(X);
sizex=size(X);
num= sizex(1,2);
for i=1:sizex(1,1)
mean_XMatrix(i,:)=mean_X;
end%%做PCA主成分分析
[COEFF,SCORE,latent,tsquare] = princomp(X);%%降维 提取出两维的特征向量
X_temp=X-mean_XMatrix;
COEFF=COEFF(:,1:2);
Y=X_temp*COEFF;%绘制降维后的特征向量分布
y1_new=Y(1:500,:);
y2_new=Y(501:1000,:);
y3_new=Y(1001:1500,:);
figureplot(y1_new(:,1),y1_new(:,2),'*',y2_new(:,1),y2_new(:,2),'o',y3_new(:,1),y3_new(:,2),'x');
title('特征选择');%%恢复重建原始信号
X_decrease=Y*COEFF'+mean_XMatrix;%%对降维后的信号进行主成分分析,计算与原始信号的误差
[COEFF2,SCORE2,latent2,tsquare2] = princomp(X_decrease);errfeature=latent-latent2;
error=X-X_decrease;

以上代码实现的是将一个6维的特征向量降到两维后显示

好了,下面介绍原理

一.K-L变换

K-L变换是Karhunen-Loeve变换的简称,是一种特殊的正交变换。它是建立在统计特性基础上的一种变换,有的文献也称其为霍特林(Hotelling)变换,因为他在1933年最先给出将离散信号变换成一串不相关系数的方法。
K-L变换的突出优点是它能去相关性,而且是均方误差(Mean Square Error,MSE)意义下的最佳变换。

下面就简单的介绍一下K-L变换了。

设,随机向量X ∈Rn(n阶列向量),它的均值向量为mX,则其协方差矩阵可以表示为

Cx= E{(X-mx)*(X-mx)T}                           (2.1)

Cx是一个n*n阶的实对称阵。

K-L变换定义了一正交变换A ∈Rn*n,将X ∈Rn的向量映射到用Y ∈Rn代表的向量,并且使Y向量中各分量间不相关:
Y = A*(X-mx)                                            (2.2)

因为Y的各分量间不相关,则其协方差矩阵Cy为对角阵,即

Cy = diag(λ12,...,λn)

(CSDN的编辑器不知道怎么打矩阵,diag这个符号忘了的同学自己百度吧)

而矩阵A总是可以找到的,因为对于实对称阵,总能找到一个正交阵A,使得ACxAT的运算结果为对称阵。K-L变换中,将A的每一行取为Cx的特征向量,并且将这些特征向量按对应的特征值大小进行降序排序,使最大特征值对应的特征向量在A的第一行,而最小特征值对应的特征向量在A的最后一行。而Cy是Cx对角化后的结果,所以两个矩阵的特征值是一致的(λ12,...,λn)。

这样就可以通过矩阵A实现由随机向量X到随机向量Y的K-L变换了,而由

X = ATY +mx                                          (2.3)

就可以实现Y反变换到X。
若选择的最大k个特征值对应的k个特征向量,组成k×n的转换矩阵A,则变换后Y降为k维的,则由Y对X的恢复公式如下:

X‘ = AKY +mx                                          (2.4)

这时候Cy = diag(λ12,...,λk),X与X’之间的均方误差可以由下式表达:

λk+1+.λk+2...+λn                                       (2.5)                            (没有公式编辑器啊)

上面我们提到了对于特征值λ是从大到小排序的,那么这时候通过式子2.5可以表明通过选择k个具有最大特征值的特征向量来降低误差。因此,从可以将向量X和它的近似X‘之间的均方误差降至最小这方面来说,K-L变换是最佳变换。

二.PCA,主成分分析

在二十世纪九十年代初,Kirby和Sirovich开始讨论利用PCA技术进行人脸图像的最优表示问题。并且由M.Turk和A.Pentland将此技术用于人脸识别中,并称为特征脸方法。M.Turk和A.Pentland将m×n的人脸图像,重新排列为m *n维的列向量。则所有的训练图像经此变换后得到一组列向量:{ xi },xi∈Rm*n,其中N代表训练样本集中图像的个数。将图像看成一随机列向量,并通过训练样本对其均值向量和协方差矩阵进行估计。

均值向量μ通过下式估计:
μ = (1/N)*((x1+x2+...+xN)                        (3.1)
协方差矩阵

ST  = E{(xi-u)*(xi-u)T}  = X'X'T               (3.2)

其中X’ = [x1-μ, x2-μ,...., xN-μ]

则将投影变换矩阵A取为ST的前k个最大特征值对应的特征向量。利用K-L变换式对原图像进行去相关并降维:

Y = AK*(X-mx)                                          (3.3)

因为S=X'X'T,而X‘为(m*n)*N矩阵,但是因为X’为N阶矩阵,所以ST的秩最大为N-1,这样只要计算出ST的特征向量就可以计算出K-L变换矩阵了。

但是因为ST是(m*n)*(m*n)阶的矩阵,所以计算它的特征向量比较复杂,这里使用了一个技巧:

XTXviivi                                                (3.4)

(XXT)(Xvi)=δi(Xvi)                                    (3.5)

根据式子3.4与3.5可以看出,只要计算出XTX的特征值和特征向量δi与vi,然后就可以计算出XXT的 特征值和特征向量δi与Xvi,而XTX为N*N阶的矩阵,计算起来比较容易,除此以外,也可以使用SVD,这里就不提了。

三.PCA流程整理

PCA的整个变换过程整理了一下,如下:

1.将mxn的训练图像重新排列为m *n维的列向量。计算均值向量,并利用均值向量将所有样本中心化。
2.利用中心化后的样本向量,根据式(3.2)计算其协方差矩阵;对其特征值分解,并将特征向量按其对应的特征值大小进行降序排列。
3.选取第2步所得的k ≤N-1个最大特征值对应的特征向量组成投影矩阵A,将每幅已中心化的训练图像(x1-μ, x2-μ,...., xN-μ),向矩阵A投影,得到每幅训练图像的降维表示为(y1-μ, y2-μ,...., yN)
4.对测试图像中心化,并投影到矩阵A,得到测试图像的降维表示。
5.选择合适的分类器,对测试图像进行分类。

关于PCA主成分分析与KL变换相关推荐

  1. pca人脸识别----kl变换

    PCA--主成分分析 通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维.可以用于特征提取.最常见的应用在人脸识别. pca并不是直接对原来的数据 ...

  2. 主成分分析(PCA)与K-L变换

    主成分分析与K-L变换 1. 主成分分析 -- 基于最大方差的描述 1.1 投影数据的方差 1.2 高维数据的降维 2. K-L变换 -- 基于最小误差的描述 2.1 内积空间中的正交变换 2.2 信 ...

  3. 模式识别(Pattern Recognition)学习笔记(三十五)-- K-L变换与PCA

    K-L变换的理论知识 K-L变换是除了PCA外的另一种常用的特征提取方法,它有很多种形式,最基本的形式跟PCA类似,它跟PCA的不同在于,PCA是一种无监督的特征变换,而K-L变换能够考虑到不同的分类 ...

  4. KL变换生成人脸特征图

    近来课程上做了一个PCA生成特征脸的小工程,刚好实验室科研做不下去了就放松下写个博客梳理下吧,由于是用了KL变换,所以撒呼呼地去找背景知识科普时翻查了些KL散度的知识点,后来发现好像和KL变换关系不大 ...

  5. 【matlab 图像处理】离散傅里叶变换离散余弦变换K-L变换小波变换

    [matlab 图像处理]离散傅里叶变换&离散余弦变换&K-L变换&小波变换 正交变换是信号处理的一种有效工具.图像信号不仅可以在空间域表示,也可以在频域表示,后者将有利于许多 ...

  6. 主成分分析(PCA)算法,K-L变换 角度

    主成分分析(PCA)是多元统计分析中用来分析数据的一种方法,它是用一种较少数 量的特征对样本进行描述以达到降低特征空间维数的方法,它的本质实际上是K-L变换.PCA方法最著名的应用应该是在人脸识别中特 ...

  7. KL变换+PCA+关系

    KL变换+PCA+关系 KL变换和KL散度的关系? In mathematical statistics, the Kullback–Leibler divergence (also called r ...

  8. PCA变换与KL变换

    PCA 方法是由 Turk 和 Pentlad 提出来的,它的基础就是 Karhunen-Loeve 变换(简称 KL变换),是一种常用的正交变换. PCA的变换矩阵是协方差矩阵,K-L变换的变换矩阵 ...

  9. PCA变换与KL变换区别

    PCA的变换矩阵是协方差矩阵,K-L变换的变换矩阵可以有很多种(二阶矩阵.协方差矩阵.总类内离散度矩阵等等).当K-L变换矩阵为协方差矩阵时,等同于PCA.

最新文章

  1. linux 中文输入法 xshall,Centos6.7下安装ibus中文输入法
  2. React 的 PureComponent Vs Component
  3. 【译】开发大型 Angular 应用的12条架构清单
  4. 协同过滤的itemCF,userCF区别适用场景
  5. STM32 进入Stop模式后电流还是很大怎么办?
  6. day21-python模块
  7. 2018-2019-2 20175223 实验三《敏捷开发与XP实践》实验报告
  8. 嵌入式常见笔试题总结(3)
  9. 解决go build报错cannot find main module; see ‘go help modules‘
  10. iec61131 3 html5,IEC61131-3{ed3.0}标准资料.doc
  11. Radware LP 增加线路接口操作
  12. Mysql数据库常用分库和分表方式
  13. oracle多条数据合并成一条_建议将北京地铁13-B线和28号线合并成一条线
  14. AIM Tech Round 5C. Rectangles 思维
  15. Json.Net 使用属性定义日期的序列化格式
  16. 太强了!GitHub中文开源项目榜单出炉,暴露了程序员的硬性需求!
  17. 利用IXCHARIOT进行网络测速
  18. linux批量解压压缩包
  19. Mac菜鸟必备小工具- Mounty 原生支持 NTFS 读写驱动应用
  20. Excel如何快速提取单元格括号内数据

热门文章

  1. 安费诺amphenol连接器_全球连接器供应商前50官网网址
  2. 刚体运动学公式_哈尔滨工业大学理论力学--第六章--刚体简单运动.ppt
  3. PR 2019 快速入门(17)
  4. 寻求公正是一种心理病
  5. python使用Neo4j图数据库——py2neo详解(1)
  6. Map、list 线程安全问题
  7. 基于saber软件的无源RC滤波器仿真
  8. 用链表实现士兵队列训练
  9. 记录一下,simulink使用导入的机械臂CAD模型
  10. 基于C+sqlite3+GTK的体育馆管理系统项目开发