zoukankan      html  css  js  c++  java
  • PCA算法

    1.正交投影

    向量$z$投影在$x$向量上的投影向量为$p$,则$z-p$垂直于$x$,有$<z-p, x> = 0$. 

    令$p=kx$, 根据内积为0,有$x^T(z-kx)=0$, 

    故得到$ k = frac{x^Tz}{x^Tx}$,$p=kx = frac{x^Tz x}{x^Tx} = frac{xx^Tz}{x^Tx}$.

    一般称$P=frac{xx^T}{x^Tx}$为投影矩阵。 

    2.拓展到高维,比如三维空间。 

    对于将三维空间中向量$x$投影到一个平面上,设平面的两个基分为$a_1,a_2$,矩阵$A=[a_1,a_2]$, 容易得到投影后的向量$p=c_1 a_1 + c_2 a_2 = A c$.

    其中$c=egin{bmatrix} c_1\ c_2 end{bmatrix}$。

    为了求投影,就是为了求$c$。容易有$<x-Ac, a1> = 0, <x-Ac,a2>=0$,有:

    $egin{bmatrix} {a_1}^T\ {a_2}^T  end{bmatrix} (x-Ac) = egin{bmatrix} 0\ 0 end{bmatrix}$,即 $A^T (x-Ac) = 0$:

    有, $A^TAc = A^Tx\ c= (A^TA)^{-1} A^T x$ 。

    故$x$ 在平面上的投影为$p = Ac = A(A^TA)^{-1} A^T x$,一般称 $P=A(A^TA)^{-1} A^T $为投影矩阵。 

    当平面的两个基$a_1,a_2$标准正交时,则有投影为$p = Ac = AA^T x$,投影矩阵为$P=  AA^T$。

    3.讲完投影,开始讲PCA算法。PCA是一种降维算法,目的是将一个高维的向量$xin R^D$用更低维的向量$hat{x} in R^M$来表示。  

    3.1假设估计的$hat{x} = sum_{j=1}^{M} eta_{jn} b_{j}$,

    其中$b_j, j= 1.,..,M$  为低维空间中的一组标准正交基.

    $J = frac{1}{N} sum_{n=1}^N |x-hat{x} | ^2 $ ,其中$N$为样本个数。 

    3.2为了寻找合适的$eta_{jn}$,使得误差$J$最小, 需要对$J$求导数。 

    $frac{partial{J}}{partial{hat{x}}} = - frac{2}{N} (x_n - hat{x_n})^T$

    $ frac{partial{J}}{ partial{eta_{jn}}} = frac{partial{J}}{partial{hat{x_n}}}  frac{partial{hat{x_n}}}{partial{eta_{jn}}}$,

    其中$frac{hat{x_n}}{partial{eta_{in}}} = b_j, j = 1, ..., M$。

    当满足$frac{J}{eta_{jn}} = 0$时,我们可以认为找到了最合适的基坐标,或者说是基稀疏,使得误差$J$最小。

    即$frac{partial{J}}{partial{eta_{jn}}} = - frac{2}{N} (x_n-hat{x_n})^T b_j $

     $=-frac{2}{N} (x_n - sum_{i=1}^M eta_{in}b_i )^T b_j $

     $=-frac{2}{N}({x_n}^T b_j - eta_{jn}) = 0$

    故我们得到$eta_{jn} = {x_n}^T b_j $,即最优的$eta_{jn}$是$x_n$在$b_j$上的投影长度。 

    3.3假设我们主成分空间的基为$b_1...b_M$,

    可以得到:

    $x_n = sum_{j=1}^{M}eta_{jn}b_j$

    $=sum_{j=1}^M {x_n}^T b_j b_j$

    $=sum_{j=1}^{M}b_j {b_j}^T x_n $

    $=(sum_{j=1}^{M})b_j {b_j}^T)x_n$

    其中$(sum_{j=1}^{M})b_j {b_j}^T)$为投影矩阵。 

    原来的数据$x_n = sum_{j=1}^{M} (b_j {b_j}^T ) x_n + sum_{j=M+1}^{D}b_j {b_j}^Tx_n$

    故有$(x_n - hat{x}) = sum_{j=M+1}^D b_j {b_j}^T x_n$

    $J= sum_{j=M+1}^{D}b_j {b_j}^Tx_n = sum_{j=M+1}{D} {b_j}^T x_n b_j$  

    重新写误差函数$J$:

    $J = frac{1}{N} sum_{n=1}^N {| x-hat{x}|} ^2 $

    $ = frac{1}{N} sum_{n=1}^N {|sum_{j=M+1}^D ({b_j}^T x_n)b_j }^2$ 

    $ = frac{1}{N} sum_{n=1}^N sum_{j=M+1}^D (b_j ^Tx_n) ^2$ 

    $ = frac{1}{N} sum_n sum_j  b_j^T x_n x_n^T b_j$ 

    $= sum_{j=M+1}{D}b_j^T(frac{1}{N} sum_{n=1}^Nx_nx_n^T ) b_j $ 

    $= sum_{j=M+1}^D b_j^T S b_j$

    其中$frac{1}{N} sum_{n=1}^Nx_nx_n^T$为数据协方差矩阵。

    3.4 我们先从二维空间来推导PCA,假设主成分空间的基向量为$b_1$,其正交补空间为$b_2$,假设基向量都是标准正交。

    $J = b_2^T S b_2, b_2^T b_2 =1$ 

    构造拉格朗日乘子:

    $L= b_2^TSb_2+lambda(1-b_2^Tb_2)$ ,对$lambda,b_2$求导数:

    $frac{partial{L}}{partial{lambda}} = 1 - b_2^Tb_2 = 0$

    $frac{partial{L}}{partial{b_2}} = 2b_2^TS - 2lambda b_2^T = 0$

    我们得到$Sb_2 = lambda b_2$,也就说,最佳正交补空间基为S矩阵的特征值$lambda$对应的特征向量。

    $J = b_2^TSb_2 = b_2^T lambda b_2 = lambda$,

    当缩小$J$即是缩小对应的特征值,也就是说主成分空间的基对应的是特征值大的特征向量。 

    故拓展到$D$维的时候,有 $J = sum_{j=M+1}^Dlambda_j, j=M+1, ...,D$

    $J = sum_{j=M+1}^Db_j^T Sb_j = sum_{j=M+1}^D lambda_j$

    4.总结

    综上所述,我们求得的主成分空间为对应于特征值大的特征向量,设

    $B = [b_1,b_2...,b_M]$为主成分空间基组成的矩阵,我们最后求得的$hat{x}$为投影于此主成分空间的投影向量。

    有$hat{x} = B B^Tx$。

    The Safest Way to Get what you Want is to Try and Deserve What you Want.
  • 相关阅读:
    Solution -「CF 1303G」Sum of Prefix Sums
    Solution -「SCOI 2016」萌萌哒
    赵栋 201771010137 《面向对象程序设计(java)》第一周学习总结
    PIC单片机的XC8
    10种软件滤波方法
    PIC单片机的定时器
    ASP.NET 缓存
    SqlServer索引的原理与应用
    SQL Server 游标
    SQL Server 开发指南
  • 原文地址:https://www.cnblogs.com/Shinered/p/10138329.html
Copyright © 2011-2022 走看看