您好,欢迎访问三七文档
主成份(PrincipalComponentAnalysis)分析是降维(DimensionReduction)的重要手段。每一个主成分都是数据在某一个方向上的投影,在不同的方向上这些数据方差Variance的大小由其特征值(eigenvalue)决定。一般我们会选取最大的几个特征值所在的特征向量(eigenvector),这些方向上的信息丰富,一般认为包含了更多我们所感兴趣的信息。当然,这里面有较强的假设:(1)特征根的大小决定了我们感兴趣信息的多少。即小特征根往往代表了噪声,但实际上,向小一点的特征根方向投影也有可能包括我们感兴趣的数据;(2)特征向量的方向是互相正交(orthogonal)的,这种正交性使得PCA容易受到Outlier的影响,例如在【1】中提到的例子(3)难于解释结果。例如在建立线性回归模型(LinearRegressionModel)分析因变量(response)和第一个主成份的关系时,我们得到的回归系数(Coefficiency)不是某一个自变量(covariate)的贡献,而是对所有自变量的某个线性组合(LinearCombination)的贡献。在KernelPCA分析之中,我们同样需要这些假设,但不同的地方是我们认为原有数据有更高的维数,我们可以在更高维的空间(HilbertSpace)中做PCA分析(即在更高维空间里,把原始数据向不同的方向投影)。这样做的优点有:对于在通常线性空间难于线性分类的数据点,我们有可能再更高维度上找到合适的高维线性分类平面。我们第二部分的例子就说明了这一点。本文写作的动机是因为作者没有找到一篇好的文章(看了wikipedia和若干google结果后)深层次介绍PCA和KernelPCA之间的联系,以及如何以公式形式来解释如何利用KernelPCA来做投影,特别有些图片的例子只是展示了结果和一些公式,这里面具体的过程并没有涉及。希望这篇文章能做出较好的解答。1.KernelPrincipalComponentAnalysis的矩阵基础我们从解决这几个问题入手:传统的PCA如何做?在高维空间里的PCA应该如何做?如何用KernelTrick在高维空间做PCA?如何在主成分方向上投影?如何Centering高维空间的数据?1.1传统的PCA如何做?让我先定义如下变量:X=[x1,x2,…,xN]是一个d×N矩阵,代表输入的数据有N个,每个sample的维数是d。我们做降维,就是想用k维的数据来表示原始的d维数据(k≤d)。当我们使用centered的数据(即∑ixi=0)时,可定义协方差矩阵C为:C=1NxixTi=1NXXT做特征值分解,我们可以得到:CU=UΛ⇒C=UΛUT=∑aλauauTa注意这里的C,U,Λ的维数都是d×d,且U=[u1,u2,…,ud],Λ=diag(λ1,λ2,…,λd)。当我们做降维时,可以利用前k个特征向量Uk=[u1,u2,…,uk]。则将一个d维的xi向k维的主成分的方向投影后的yi=UTkxi(这里的每一个ui都是d维的,代表是一个投影方向,且uTiui=1,表示这是一个旋转变量)1.2在高维空间里的PCA应该如何做?高维空间中,我们定义一个映射Φ:Xd→F,这里F表示Hilbert泛函空间。现在我们的输入数据是Φ(xi),i=1,2,…n,他们的维数可以说是无穷维的(泛函空间)。在这个新的空间中,假设协方差矩阵同样是centered,我们的协方差矩阵为:C¯=1NΦ(xi)Φ(xi)T=1NΦ(X)Φ(X)T这里有一个陷阱,我跳进去过:在对Kerneltrick一知半解的时候,我们常常从形式上认为C¯可以用Ki,j=K(xi,xj)来代替,因此对K=(Kij)做特征值分解,然后得到K=UΛUT,并且对原有数据降维的时候,定义Yi=UTkXi。但这个错误的方法有两个问题:一是我们不知道矩阵C¯的维数;二是UTkXi从形式上看不出是从高维空间的Φ(Xi)投影,并且当有新的数据时,我们无法从理论上理解UTkXnew是从高维空间的投影。如果应用这种错误的方法,我们有可能得到看起来差不多正确的结果,但本质上这是错误的。正确的方法是通过Kerneltrick将PCA投影的过程通过内积的形式表达出来,详细见1.31.3如何用KernelTrick在高维空间做PCA?在1.1节中,通过PCA,我们得到了U矩阵。这里将介绍如何仅利用内积的概念来计算传统的PCA。首先我们证明U可以由x1,x2,…,xN展开(span):Cua=λauaua=1λaCu=1λa(∑ixixTi)u=1λa∑ixi(xTiu)=1λa∑i(xTiu)xi=∑ixTiuλaxi=∑iαaixi这里定义αai=xTiuλa。因为xTiu是一个标量(scala),所以αai也是一个标量,因此ui是可以由xi张成。进而我们显示PCA投影可以用内积运算表示,例如我们把xi向任意一个主成分分量ua进行投影,得到的是uTaxi,也就是xTiua。作者猜测写成这种形式是为了能抽出xTixj=xi,xj的内积形式。xTiCuaxTi1N∑jxjxTj∑kαakxk∑jαak∑k(xTixj)(xTjxk)=λaxTiua=λaxTi∑kαakxk=Nλa∑kαak(xTixk)当我们定义Kij=xTixj时,上式可以写为K2α=NλaKαa(这里αa定义为[αa1,αa2,…,αaN]T.)进一步,我们得到解为:Kα=λ~aαwithλ~a=NλaK矩阵包含特征值λ~和αa,我们可以通过α可以计算得到ua,注意特征值分解时Eigendecomposition,αa只代表一个方向,它的长度一般为1,但在此处不为1。这里计算出αa的长度(下面将要用到):因为ua的长度是1,我们有:1=uTaua=(∑iαaixi)T(∑jαajxj)=∑i∑jαaiαajxTixTj=(αa)TKαa=(αa)T(Nλaαa)=Nλa(αaTαa)⇒∥αa∥=1/Nλa−−−−√=1/λ~a−−√在上面的分析过程中,我们只使用了内积。因此当我们把Kij=xTixj推广为Kij=Φ(xi),Φ(xj=Φ(xi)TΦ(xj)时,上面的分析结果并不会改变。1.4如何在主成分方向上投影?投影时,只需要使用U矩阵,假设我们得到的新数据为t,那么t在ua方向的投影是:uTat=∑iαaixTit=∑iαai(xTit)对于高维空间的数据Φ(xi),Φ(t),我们可以用Kerneltrick,用K(xi,t)来带入上式:uTat=∑iαaiK(xi,t)1.5如何Centering高维空间的数据?在我们的分析中,协方差矩阵的定义需要centereddata。在高维空间中,显式的将Φ(xi)居中并不简单,因为我们并不知道Φ的显示表达。但从上面两节可以看出,所有的计算只和K矩阵有关。具体计算如下:令Φi=Φ(xi),居中ΦCi=Φi–1N∑kΦkKCij=ΦCiΦCj=(Φi–1N∑kΦk)T(Φj–1N∑lΦl)=ΦTiΦj–1N∑lΦTiΦl–1N∑kΦTkΦj+1N2∑k∑lΦTkΦl=Kij–1N∑lKil–1N∑kKkj+1N2∑k∑lKkl不难看出,KC=K–1NK–K1N+1NK1N其中1N为N×N的矩阵,其中每一个元素都是1/N对于新的数据,我们同样可以K(xi,t)C=ΦCiΦCt=(Φi–1N∑kΦk)T(Φt–1N∑lΦl)=ΦTiΦt–1N∑lΦTiΦl–1N∑kΦTkΦt+1N2∑k∑lΦTkΦl=K(xi,t)–1N∑lKil–1N∑kK(xk,t)+1N2∑k∑lKkl2.演示(Rcode)首先我们应该注意输入数据的格式,一般在统计中,我们要求X矩阵是N×d的,但在我们的推导中,X矩阵是d×N。这与统计上的概念并不矛盾:在前面的定义下协方差矩阵为XTX,而在后面的定义中是XXT。另外这里的协方差矩阵是样本(Sample)的协方差矩阵,我们的认为大写的X代表矩阵,而不是代表一个随机变量。另外,在下面的结果中,Gaussian核函数(kernelfunction)的标准差(sd)为2。在其他取值条件下,所得到的图像是不同的。KPCA图片:R源代码(SourceCode):链接到完整的代码KernelPCAKernelPCA部分代码:1234567891011121314151617181920#KernelPCA#PolynomialKernel#k(x,y)=t(x)%*%y+1k1=function(x,y){(x[1]*y[1]+x[2]*y[2]+1)^2}K=matrix(0,ncol=N_total,nrow=N_total)for(iin1:N_total){for(jin1:N_total){K[i,j]=k1(X[i,],X[j,])}}ones=1/N_total*matrix(1,N_total,N_total)K_norm=K-ones%*%K-K%*%ones+ones%*%K%*%onesres=eigen(K_norm)V=res$vectorsD=diag(res$values)rank=0for(iin1:N_total){if(D[i,i]1e-6){break}V[,i]=V[,i]/sqrt(D[i,i])2122232425rank=rank+1}Y=K_norm%*%V[,1:rank]plot(Y[,1],Y[,2],col=rainbow(3)[label],main=KernelPCA(Poly),xlab=Firstcomponent,ylab=Secondcomponent)3.主要参考资料【1】ATutorialonPrincipalComponentAnalysis,JonathonShlens,Shlens03【2】Wikipedia:【3】OriginalKPCAPaper:Kernelprincipalcomponentanalysis,BernhardSchölkopf,AlexanderSmolaandKlaus-RobertMüller【4】MaxWellings’sclassesnotesformachinelearningKernelPrincipalComponentAnalaysis~welling/classnotes/papers_class/Kernel-PCA.pdfNorelatedposts.
本文标题:KPCA原理及演示
链接地址:https://www.777doc.com/doc-4662640 .html