zoukankan      html  css  js  c++  java
  • K-L变换和 主成分分析PCA

    一.K-L变换

    说PCA的话,必须先介绍一下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)

    而矩阵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本质和SVD
     
  • 相关阅读:
    使用jetty部署配置solr服务
    solr 与 MySQL(二)
    学习solr(一)
    FormData 上传文件
    node.js cannot find module 'mysql'
    select2 ajax 无法选中
    jenkins持续集成文件冲突的问题
    Inno Setup 实现每次jenkins自动构建时版本号自动+1
    jenkins 配置slave节点(win10系统)
    Jenkins+Gradle实现android开发持续集成和打包
  • 原文地址:https://www.cnblogs.com/ranjiewen/p/6239634.html
Copyright © 2011-2022 走看看