zoukankan      html  css  js  c++  java
  • Jordan Lecture Note-10: Kernel Principal Components Analysis (KPCA).

    Kernel Principal Components Analysis

        PCA实际上就是对原坐标进行正交变换,使得变换后的坐标之间相互无关,并且尽可能保留多的信息。但PCA所做的是线性变换,对于某些数据可能需要通过非线性变换,比如在二维空间下对如下数据进行处理。如果还是采用最初的PCA,则得到的主成分是$z_1,z_2$,而这里的$z_1,z_2$都包含了大量的信息,故无法去掉任何一个坐标,也就达不到降维的目的。而此时如果采用极坐标变换(属于非线性变换),我们就可以尽用一条坐标包含大量的信息(每一数据点都可以用不同的角度来表示)。

        故而我们引入Kernel PCA,将原空间通过映射,投影到特征空间(Feature Spaces),然后在进行正交变换。假设有$m$个已作平均值为0处理的数据$x_k,k=1,2,cdots,m$,$x_kinmathbb{R}^N,sum_{k=1}^mx_k=0$。PCA的协方差矩阵为$mathbf{C}=frac{1}{m}sum_{j=1}^mx_jx_j^prime$,于是我们要解决的是特征值方程:

    egin{equation}mathbf{C}v=lambda vlabel{equ:tezhengFun}end{equation}

    将$mathbf{C}=frac{1}{m}sum_{j=1}^mx_jx_j^prime$代入式子 ef{equ:tezhengFun}得:

    $$mathbf{C}v=frac{1}{m}sum_{j=1}^mx_jx_j^prime v=frac{1}{m}sum_{j=1}^mlangle x_j,v angle x_j=lambda vLongrightarrow v=frac{1}{mlambda}sum_{j=1}^mlangle x_j,v angle x_j riangleq sum_{j=1}^malpha_j x_j$$

    即$v$总可以用$x_j$线性表示。同时将式子 ef{equ:tezhengFun}两边同时点乘$x_k$:$lambdalangle x_k,v angle=langle x_k,mathbf{C}v angle$

    我们引入非线性映射$Phi:mathbb{R}^N ightarrowmathcal{F}$,其中$mathcal{F}$表示特征空间,所以得到$Phi(x_k)$,同样我们对$Phi(x_k)$进行均值为0处理(在后面部分我们会介绍如何不通过$Phi$即可进行中心化处理),这里我们暂且假设$sum_{k=1}^mPhi(x_k)=0$,同样我们得到协方差矩阵:

    egin{equation}mathbf{ar{C}}=frac{1}{m}sum_{j=1}^mPhi(x_j)Phi(x_j)^primeend{equation}

    这里要解决的同样是特征值方程$lambda V=mathbf{ar{C}}V,lambda>0,Vinmathcal{F}/{0}$。两边同时点乘$Phi(x_k)$得:

    egin{equation}lambdalangle Phi(x_k),v angle=langlePhi(x_k),mathbf{ar{C}}V angle,forall kend{equation}

    同时也必定存在$alpha_i$使$V=sum_{i=1}^malpha_iPhi(x_i)$,故

    egin{align}lambdalanglePhi(x_k),V angle &= lambda V^primePhi(x_k) onumber\&=lambdasum_{i=1}^malpha_iPhi(x_i)^primePhi(x_i) onumber\&=lambdasum_{i=1}^malpha_ilanglePhi(x_k),Phi(x_i) angle onumber\&=langlePhi(x_k),mathbf{ar{C}}V angle onumber\&=langlePhi(x_k),frac{1}{m}sum_{j=1}^mPhi(x_j)Phi(x_j)^primesum_{i=1}^malpha_iPhi(x_i) angle onumber\&=frac{1}{m}Phi(x_k)^primesum_{j=1}^mPhi(x_j)Phi(x_j)^primesum_{i=1}^malpha_iPhi(x_i) onumber\&=frac{1}{m}Phi(x_k)^primesum_{j=1}^m[langlePhi(x_j),sum_{i=1}^malpha_iPhi(x_i) anglePhi(x_j)]label{equ:1}\&=frac{1}{m}Phi(x_k)^primesum_{j=1}^m[sum_{i=1}^malpha_ilanglePhi(x_j),Phi(x_i) anglePhi(x_j)] onumber\&=frac{1}{m}Phi(x_k)^primesum_{j=1}^msum_{i=1}^m[alpha_ilanglePhi(x_j),Phi(x_i anglePhi(x_j))] onumber\&=frac{1}{m}sum_{i=1}^msum_{j=1}^m[alpha_iPhi(x_k)^primelanglePhi(x_j),Phi(x_i) anglePhi(x_j)] onumber\&=frac{1}{m}sum_{i=1}^msum_{j=1}^m[alpha_ilanglePhi(x_k),Phi(x_j) anglelanglePhi(x_j),Phi(x_i) angle]end{align}

    $$mlambdasum_{i=1}^malpha_ilangle Phi(x_k),Phi(x_i) angle=sum_{i=1}^msum_{j=1}^m[alpha_ilanglePhi(x_k),Phi(x_j) anglelanglePhi(x_i),Phi(x_j) angle]$$

    对所有$k=1,2,cdots,m$都成立,其中等式 ef{equ:1}成立是因为$(xx^prime)v=langle x,v angle x$。现在我们将其写成矩阵形式。对左边式子:

    egin{equation}mlambda[K_{k1},K_{k2},cdots,K_{km}]left[egin{array}&alpha_1\vdots\alpha_mend{array} ight]end{equation}

    再将其按$k$排成列:

    egin{equation}mlambdaleft[egin{array}&K_{11}&K_{12}&cdots&K_{1m}\K_{21}&K_{22}&cdots&K_{2m}\vdots&vdots&ddots&vdots\K_{m1}&K_{m2}&cdots&K_{mm}end{array} ight]left[egin{array}&alpha_1\vdots\alpha_mend{array} ight]=mlambdamathbf{K}alphaend{equation}

    对右边有:

    egin{equation}[sum_jK_{kj}K_{1j},sum_jK_{kj}K_{2j},cdots,sum_jK_{kj}K_{mj}]left[egin{array}&alpha_1\alpha_2\vdots\alpha_mend{array} ight]=[K_{1cdot}^prime K_{kcdot},cdots,K_{mcdot}^prime K_{kcdot}]left[egin{array}&alpha_1\vdots\alpha_mend{array} ight]=mathbf{K}K_{kcdot}alphaend{equation}

    再将其按$k$排成列:

    egin{equation}left[egin{array}&mathbf{K}K_{1cdot}\mathbf{K}K_{2cdot}\vdots\mathbf{K}K_{mcdot}end{array} ight]alpha=mathbf{K}mathbf{K}alpha=mathbf{K}^2alphaend{equation}

    于是我们得到$mlambdamathbf{K}alpha=mathbf{K}^2alphaLongrightarrow mlambdaalpha=mathbf{K}alpha$,其中$mlambda$是矩阵$mathbf{K}$的特征值,$alpha$为矩阵$mathbf{K}$的特征向量。注意这里的$mathbf{K}$是半正定的,因为对于任意$xinmathcal{F}$有:

    egin{align*}x^primemathbf{K}x&=x^prime[Phi(x_1),cdots,Phi(x_m)]^prime[Phi(x_1),cdots,Phi(x_m)]x\&=|(Phi(x_1),cdots,Phi(x_m))x|^2geq 0end{align*}

    所以$mathbf{K}$的特征值都是非负的。由于$mathbf{ar{C}}=frac{1}{m}mathbf{K}$,故$mathbf{ar{C}}$的特征值也都是非负的且其值为$lambda$。设$lambda_mgeqlambda_{m-1}geqcdotsgeqlambda_pgeqcdotsgeqlambda_1$,$lambda_p$为第一个非0特征值。

        由于$V^{(k)}=sum_{i=1}^malpha_i^{(k)}Phi(x_i)$,我们对$alpha^p,cdot,alpha^m$进行正交化,并使$alpha^kcdotalpha^k=frac{1}{mlambda}$,故而可得:

    $$V^{(k)}cdot V^{(k)}=sum_{i,j=1}^malpha_i^kalpha_j^klanglePhi(x_i),Phi(x_j) angle=sum_{i,j=1}^malpha_i^kalpha_j^kK_{ij}=langlealpha^k,mathbf{K}alpha^k angle=mlambdalanglealpha^k,alpha^k angle=1$$

    $$forall k eq ar{k},V^{(k)}cdot V^{(ar{k})}=mlambdalangle alpha^k,alpha^{ar{k}} angle=0$$

    所以我们得到主成分为$V^m,V^{m-1},cdots,V^p$。对数据进行如下投影即可得到新变量的第$k$个元素$langle V^k,Phi(x) angle=sum_{i=1}^malpha_i^klanglePhi(x_i),Phi(x) angle=sum_{i=1}^malpha_i^kK(x_i,x)$。我们称$V^k$为映射$Phi$的第$k$个非线性主成分。

    总结,KPCA的步骤:

    1. 选取合适的和函数,计算矩阵$mathbf{K}$。
    2. 计算其特征值对应的特征向量$alpha_i$,并将其正交化,且使$alpha_kcdotalpha_k=frac{1}{mlambda}$,$mlambda$为矩阵$mathbf{K}$的特征值。
    3. 根据$langle V^k,Phi(x) angle=sum_{i=1}^malpha_i^kK(x_i,x)$计算其相应的主成分$k=p,cdots,m$。

    附录:对$Phi(x_k)$进行均值为0化。

    $$hat{Phi(x_k)}=Phi(x_k)-frac{1}{m}sum_{i=1}^mPhi(x_i)$$

    egin{align*}hat{K_{ij}}&=hat{Phi(x_i)}^primehat{Phi(x_j)}=[Phi(x_i)-frac{1}{m}sum_{k=1}^mPhi(x_k)]^prime[Phi(x_j)-frac{1}{m}sum_{k=1}^mPhi(x_k)]\&=Phi(x_i)^primePhi(x_j)-frac{1}{m}sum_{k=1}^mPhi(x_k)^Phi(x_j)-frac{1}{m}sum_{k=1}^mPhi(x_k)^primePhi(x_i)+\&quadfrac{1}{m^2}sum_{k=1}^mPhi(x_k)^primesum_{k=1}^mPhi(x_k)\&=K_{ij}-K_{cdot j}^prime-frac{1}{m}K_{cdot i}^primemathbf{1}-frac{1}{m}K_{cdot i}^primemathbf{1}+frac{1}{m^2}mathbf{1}^primemathbf{K}mathbf{1}end{align*}

    其中$mathbf{1}=(1,1,cdots,1)^prime$。写成矩阵的形式为:

    $$mathbf{hat{K}}=mathbf{K}-frac{1}{m}mathbf{I}_mmathbf{K}-frac{1}{m}mathbf{K}mathbf{I}_m+frac{1}{m^2}mathbf{I}_mmathbf{K}mathbf{I}_m$$

    其中$mathbf{I}_m$为$m imes m$的全1矩阵。

  • 相关阅读:
    python读取.mat文件
    numpy.random.randint
    python小括号( )与中括号 [ ]
    cv2
    python matplotlib.pyplot画矩形图 以及plt.gca()
    python matplotlib.pyplot对图像进行绘制
    项目中遇到的问题
    菜鸟学习Spring——60s学会Spring与Hibernate的集成
    菜鸟nginx源代码剖析数据结构篇(九) 内存池ngx_pool_t
    c 语言函数可变參数的处理
  • 原文地址:https://www.cnblogs.com/boostable/p/kernel_principal_components_analysis.html
Copyright © 2011-2022 走看看