KPCA非线性降维原理推导

从上一篇文章我们学习了PCA降维,但是PCA降维是线性降维,很多情况下的效果并不好,这时候就需要将算法扩展为非线性降维,得到了KPCA,核PCA降维

KPCA非线性降维

PCA能应用的范围是有限的,有的数据集使用线性降维没用,这时候就需要使用非线性降维。

PCA应用范围有限

在上面中间的例子中,无论怎么降维都不能得到很好的结果,因为并不是所有数据的维度都是线性关系,可以看到第二张图中第二个维度与第一个维度是平方关系。

与SVM中的思想一样,我们考虑将数据投影到高维空间 ϕ \phi ϕ,然后进行线性降维,那么在空间 ϕ ( x ) \phi(x) ϕ(x)中的线性降维就等价于在空间 x x x中的非线性降维。

在PCA中,我们的计算过程中只用到了数据的内积 K = X T X K=X^TX K=XTX,因此使用核函数在让数据在高维空间中进行线性降维成为了可能。事实上非线性降维就是通过核函数在高维空间中线性降维,因此叫Kernel PCA(KPCA)。

下面我们考虑在高维空间中的PCA。

假设数据映射到高维空间后表示为 Z ∈ R D m × N Z\in\mathbb{R}^{D_m\times N} ZRDm×N z i = ϕ ( x i ) z_i=\phi(x_i) zi=ϕ(xi),在高维空间中的问题也就转化成了 Z Z T w d = λ w d ZZ^Tw_d=\lambda w_d ZZTwd=λwd,其中的 w d w_d wd是高维空间特征 Z Z Z用来降维的一个主成分,这个主成分很容易求,但是求出来并不能直接用,因为这个主成分是对数据 ϕ ( x ) \phi(x) ϕ(x)进行降维用的,而我们并不知道 ϕ \phi ϕ是什么函数,要寻找别的能让我们用上核函数的办法。

我们对原始问题进行转换:
w d = 1 λ Z Z T w d = 1 λ ∑ i = 1 N z i z i T w d = ∑ i = 1 N z i ⋅ ( 1 λ z i T w d ) \begin{aligned} w_d&={1\over \lambda}ZZ^Tw_d\\ &={1\over \lambda}\sum_{i=1}^Nz_iz_i^Tw_d\\ &={\sum_{i=1}^Nz_i\cdot ({1\over \lambda}z_i^Tw_d)}\\ \end{aligned} wd=λ1ZZTwd=λ1i=1NziziTwd=i=1Nzi(λ1ziTwd)
上面的式子表明投影/主成分的方向 w d w_d wd是样本 z i z_i zi的线性组合(虽然没什么用,但就想说一下)。 w d w_d wd是可以求出来的,是个确切存在的向量,那么我们令 α i , d = 1 λ z i T w d \alpha_{i,d}={1\over \lambda}z_i^Tw_d αi,d=λ1ziTwd,那么能变成:
w d = ∑ i = 1 N z i ⋅ α i , d = Z α d w_d=\sum_{i=1}^Nz_i\cdot \alpha_{i,d}=Z\alpha_d wd=i=1Nziαi,d=Zαd
其中 Z = ( z 1 , z 2 , ⋯   , z N ) Z=(z_1,z_2,\cdots,z_N) Z=(z1,z2,,zN) α d = ( α 1 , d , α 2 , d , ⋯   , α N , d ) \alpha_d=(\alpha_{1,d},\alpha_{2,d},\cdots,\alpha_{N,d}) αd=(α1,d,α2,d,,αN,d)

α d \alpha_d αd是不能直接算出来的,因为计算公式里包含了 Z Z Z,也就是高维空间中的数据。先不用管 α \alpha α是什么东西,现在只要知道,如果知道了 α d \alpha_d αd,我们就能通过 Z α d Z\alpha_d Zαd表示出 w d w_d wd,然后就能通过这个 w d w_d wd求出高维空间数据 Z Z Z降维后的坐标,具体怎么求下面慢慢讲。我们下一步所要做的事情就是通过转化,求出这个 α d \alpha_d αd,然后进一步表示出 w d w_d wd

上面的矩阵表示有点难想,不清楚的可以拿纸画一画,不清楚到底为什么这个干可以先跳过看后面,看完再慢慢理解。

我们将上述等式带入原等式:
Z Z T w d = λ w d Z Z T ( Z α d ) = λ Z α d Z − 1 Z Z T ( Z α d ) = λ Z − 1 Z α d Z T Z α d = λ α d \begin{aligned} ZZ^Tw_d&=\lambda w_d\\ ZZ^T(Z\alpha_d)&=\lambda Z\alpha_d\\ Z^{-1}ZZ^T(Z\alpha_d)&=\lambda Z^{-1}Z\alpha_d\\ Z^TZ\alpha_d&=\lambda \alpha_d \end{aligned} ZZTwdZZT(Zαd)Z1ZZT(Zαd)ZTZαd=λwd=λZαd=λZ1Zαd=λαd
经过上述变换,我们发现 α d \alpha_d αd实际上就是 Z T Z Z^TZ ZTZ的特征向量,跟PCA的主成分很像,但PCA主成分是 Z Z T ZZ^T ZZT的特征向量,这里转置了一下,二者没有一点关系。

通过求解 Z T Z Z^TZ ZTZ的特征向量,我们就能求出 α d \alpha_d αd了。 Z T Z Z^TZ ZTZ我们是可以求的,它实际上就是高维数据空间中的所有数据的内积,虽然我们不能知道高维空间数据点长什么样,但我们有核函数,能直接获得高维空间中的点的内积,那么给定一个核函数 K ( x 1 , x 2 ) K(x_1,x_2) K(x1,x2),我们可以得到 ( Z T Z ) i j = K ( x i , x j ) (Z^TZ)_{ij}=K(x_i,x_j) (ZTZ)ij=K(xi,xj)。到此,我们求出了 α d \alpha_d αd

再来看之前的公式:
w d = ∑ i = 1 N z i ⋅ α i , d = Z α d w_d=\sum_{i=1}^Nz_i\cdot \alpha_{i,d}=Z\alpha_d wd=i=1Nziαi,d=Zαd
w d w_d wd我们现在也能求了, w d w_d wd是高维空间数据 Z Z Z的主成分的一个方向,也就是说给定一个 w d w_d wd,对于高维空间中的数据 z i z_i zi,我们能算出它在低维空间中的第 d d d个坐标。我们将上述公式扩展成矩阵:
( w 1 , w 2 , ⋯   , w d ) = Z ( α 1 , α 2 , ⋯   , α w ) W = Z α (w_1,w_2,\cdots,w_d)=Z(\alpha_1,\alpha_2,\cdots,\alpha_w)\\ W=Z\alpha (w1,w2,,wd)=Z(α1,α2,,αw)W=Zα
w d w_d wd能将一条高维数据映射得到一个坐标,那么这个大矩阵 W W W能映射得到低维空间中的所有坐标,也就是能直接将一条高维样本点转化成低维样本点。转换公式为:
x i l o w = W T ϕ ( x i ) x_i^{low}=W^T\phi(x_i) xilow=WTϕ(xi)
不要忘了 W W W是高维样本的变化矩阵,因此变化的对象是高维样本 ϕ ( x i ) \phi(x_i) ϕ(xi)。但我们之前说了,我们求不出这个高维样本的坐标,那列出来有什么意义呢?将 W W W表达式带进去我们就会发现神奇事情:
x i l o w = ( ( Z α ) T ϕ ( x i ) ) = α T Z T ϕ ( x i ) = α T ( Z T ϕ ( x i ) ) = α T ( ϕ ( X ) T ϕ ( x ) ) \begin{aligned} x_i^{low}&=((Z\alpha)^T\phi(x_i))\\ &=\alpha^TZ^T\phi(x_i)\\ &=\alpha^T(Z^T\phi(x_i))\\ &=\alpha^T(\phi(X)^T\phi(x)) \end{aligned} xilow=((Zα)Tϕ(xi))=αTZTϕ(xi)=αT(ZTϕ(xi))=αT(ϕ(X)Tϕ(x))
可以先算括号中的部分,其中 Z T Z^T ZT每一行表示一条高维空间的数据,因此二者相乘的结果可以用核函数表示:
α T Z T ϕ ( x ) = α T ( k ( x 1 , x ) k ( x 2 , x ) ⋮ k ( x N , x ) ) = ( ∑ i = 1 N α 1 , i k ( x 1 , x ) ∑ i = 1 N α 2 , i k ( x 2 , x ) ⋮ ∑ i = 1 N α D ′ , i k ( x N , x ) ) , k ( x i , x j ) = x i T x j \boldsymbol{\alpha}^{\mathbf{T}} \boldsymbol{Z}^{\mathbf{T}} \boldsymbol{\phi(x)}=\boldsymbol{\alpha}^{\mathbf{T}}\left(\begin{array}{c} k\left(\boldsymbol{x}_1, \boldsymbol{x}\right) \\ k\left(\boldsymbol{x}_2, \boldsymbol{x}\right) \\ \vdots \\ k\left(\boldsymbol{x}_N, \boldsymbol{x}\right) \end{array}\right)=\left(\begin{array}{c} \sum_{i=1}^N \alpha_{1, i} k\left(\boldsymbol{x}_1, \boldsymbol{x}\right) \\ \sum_{i=1}^N \alpha_{2, i} k\left(\boldsymbol{x}_2, \boldsymbol{x}\right) \\ \vdots \\ \sum_{i=1}^N \alpha_{D^{\prime}, i} k\left(\boldsymbol{x}_N, \boldsymbol{x}\right) \end{array}\right), k\left(\boldsymbol{x}_i, \boldsymbol{x}_j\right)=\boldsymbol{x}_i^{\mathrm{T}} \boldsymbol{x}_j αTZTϕ(x)=αTk(x1,x)k(x2,x)k(xN,x)=i=1Nα1,ik(x1,x)i=1Nα2,ik(x2,x)i=1NαD,ik(xN,x),k(xi,xj)=xiTxj

到此,我们就通过一个核函数 K K K,以及原始空间中的样本点,得到了将样本映射到核函数表示的高维空间然后进行线性降维的结果,也相当于对原始样本 X X X进行非线性降维的结果。

KPCA算法流程总结

  • 现将样本 X X X中心化,然后计算 k i , j = k ( x i , x j ) k_{i,j}=k(x_i,x_j) ki,j=k(xi,xj),得到中心化的 K ‾ \overline{K} K
  • K ‾ \overline{K} K做特征分解
  • 选择 D ′ D' D个最大的特征值对应的特征向量 α 1 , α 2 , ⋯   , α D ′ \alpha_1,\alpha_2,\cdots,\alpha_{D'} α1,α2,,αD α d \alpha_d αd N N N维的向量,通常对 α i \alpha_i αi归一化,模长为1)
  • 对一个新样本,可以得到其低维表示:

x i l o w = ( ∑ i = 1 N α 1 , i k ( x 1 , x ) ∑ i = 1 N α 2 , i k ( x 2 , x ) ⋮ ∑ i = 1 N α D ′ , i k ( x N , x ) ) \mathbf{x_i^{low}}=\left(\begin{array}{l} \sum_{i=1}^N \alpha_{1, i} k\left(x_1, \boldsymbol{x}\right) \\ \sum_{i=1}^N \alpha_{2, i} k\left(x_2, \boldsymbol{x}\right) \\ \vdots \\ \sum_{i=1}^N \alpha_{D^{\prime}, i} k\left(\boldsymbol{x}_N, \boldsymbol{x}\right) \end{array}\right) xilow=i=1Nα1,ik(x1,x)i=1Nα2,ik(x2,x)i=1NαD,ik(xN,x)

你可能感兴趣的:(机器学习)