机器学习:降维算法-核主成分分析KPCA算法原理推导

说真的,刚开始接触机器学习,一看到带“核”字的算法就头疼(-…-),没高人指引,总觉得理解起来费劲,也不确定理解的对不对。可能是因为这个“核”有点抽象,没有具体形式(形式不确定),操作很风骚。当然到现在也不敢说自己有多理解,只能扯扯目前所理解到的核主成分分析KPCA。

PCA是简单的线性降维的方法,KPCA则是其非线性的扩展,可以挖掘到数据集中的非线性信息

KPCA的主要过程是:

  1. 首先将原始数据非线性映射到高维空间;
  2. 再把第1步中的数据从高维空间投影降维到需要的维数d'

可以看出,KPCA只是比PCA多了一步映射到高维空间的操作,降维的操作是一样的。所以,KPCA最终投影到的超平面也应满足PCA中的最近重构性或最大可分性。于是KPCA最终的投影向量w_{j}也应满足PCA中的等式(参见:机器学习:降维算法-主成分分析PCA算法两种角度的推导):

ZZ^{T}w_{j} = \lambda_{j}w_{j}.

即:

(\sum_{i=1}^{m}z_{i}z_{i}^{T})w_{j} = \lambda_{j}w_{j}.

其中z_{i}是样本点x_{i}映射到的高维空间中的像。进一步得:

\begin{align*} w_{j} &= \frac{1}{\lambda_{j}}(\sum_{i=1}^{m}z_{i}z_{i}^{T})w_{j}\\ &= \sum_{i=1}^{m}z_{i}\frac{z_{i}^{T}w_{j}}{\lambda_{j}}\\ &= \sum_{i=1}^{m}z_{i}\alpha _{i}^{j} \end{align*}.

其中\alpha _{i}^{j} = \frac{z_{i}^{T}w_{j}}{\lambda_{j}}\alpha _{i}的第j个分量。

假设z_{i}是由原始空间的样本x_{i}通过映射\phi产生,即z_{i} = \phi (x_{i}),i=1,2,...,m.若映射已知,那么容易求到z_{i}和投影向量w_{j},问题就解决了。但通常情况下,是不知道\phi的具体形式的(后面会发现,我们不用知道\phi的具体形式一样能求解!)。不管怎样,先表达出\phi这种映射关系:

(\sum_{i=1}^{m}z_{i}z_{i}^{T})w_{j} = \lambda_{j}w_{j}写成:

(\sum_{i=1}^{m}\phi (x_{i})\phi (x_{i})^{T})w_{j} = \lambda_{j}w_{j}................................................................(1)

w_{j} = \sum_{i=1}^{m}z_{i}\alpha _{i}^{j}写成:

w_{j} = \sum_{i=1}^{m}\phi (x_{i})\alpha _{i}^{j}..................................................................................(2)

将(2)式代入(1)式得:

(\sum_{i=1}^{m}\phi (x_{i})\phi (x_{i})^{T})\sum_{i=1}^{m}\phi (x_{i})\alpha _{i}^{j} = \lambda_{j}\sum_{i=1}^{m}\phi (x_{i})\alpha _{i}^{j}................................(3)

记:

\Phi = \{\phi (x_{1}),\phi (x_{2}),...,\phi (x_{m})\},

\alpha ^{j} = (\alpha _{1}^{j},\alpha _{2}^{j},...,\alpha _{m}^{j})^{T}.

\Phi\alpha ^{j}代入(3)式得:

\Phi \Phi ^{T}\Phi \alpha ^{j} = \lambda_{j}\Phi\alpha ^{j}................................................................................(4)

关键的地方到了,接下来引入核函数:

\kappa (x_{i},x_{j}) = \phi (x_{i})^{T}\phi (x_{j}).

核函数本质上也就是个函数,跟y=kx没啥区别,特殊之处在于,它的计算结果表达了变量x_{i},x_{j}在高维空间的内积\phi (x_{i})^{T}\phi (x_{i})值。就是说,本来是在高维空间(甚至无限维空间)计算的内积\phi (x_{i})^{T}\phi (x_{i}),可以在原始较低维的空间通过核函数\kappa (*,*)计算得到。

有常见的几种核函数,到底选用哪种核函数,可能需要去尝试,看哪种核函数产生的效果好(比如在KPCA中,就是看哪种核函数带来的降维效果更好)。

之所以引入核函数,可以认为有两方面原因:

  1. 映射关系\phi未知;
  2. 映射到的高维空间维数可能非常高(甚至无限维),在高维空间计算\phi (x_{i})^{T}\phi (x_{i})开销太大,十分困难。

核函数对应的核矩阵为:

K = \begin{bmatrix} \kappa (x_{1},x_{1})& . & . & \kappa (x_{1},x_{m})\\ . & . & . & .\\ . & . & . & .\\ \kappa (x_{m},x_{1}) & . & . & \kappa (x_{m},x_{m}) \end{bmatrix} = \Phi ^{T}\Phi.

(4)式两边左乘\Phi ^{T}得:

\Phi ^{T}\Phi \Phi ^{T}\Phi \alpha ^{j} = \lambda_{j}\Phi ^{T}\Phi\alpha ^{j}

把核矩阵K代入上式,可得:

K^{2}\alpha ^{j} = \lambda_{j}K\alpha ^{j}

两边去掉K,得:

K\alpha ^{j} = \lambda_{j}\alpha ^{j}.

(这里还是没搞清楚,为什么能直接去掉K,理论上K是可逆矩阵时才能直接消去。但核函数确定的核矩阵只要求是半正定的,半正定矩阵又不一定是可逆的。这里去掉K的依据是什么?望博友指点。)

可以看到,通过核函数的这一波操作,原始空间到高维空间的映射变得无形了,最终得到的式子并没有看到映射\phi的影子,这就是“核”操作的风骚之处。我们不知道映射\phi的具体形式,我们也不用知道它的形式。

显然,上式是特征分解问题,取K的最大的d'个特征值对应的特征向量即可。

对于新样本x,其投影后第j(j = 1,2,...,d')维坐标为:

\begin{align*} x'_{j} &=w_{j}^{T}\phi (x) \\ &=\sum_{i=1}^{m}\alpha _{i}^{j}\phi (x_{i})^{T} \phi (x)\\ &= \sum_{i=1}^{m}\alpha _{i}^{j}\kappa (x_{i},x) \end{align*}.

可以看到,KPCA需要对所有样本求和,计算开销还是挺大的。

参考资料:周志华《机器学习》

参考博文:核主成分分析(Kernel Principal Component Analysis, KPCA)的公式推导过程

相关博文:机器学习:降维算法-主成分分析PCA算法两种角度的推导

猜你喜欢

转载自blog.csdn.net/weixin_35732969/article/details/81569562