前言
上一章节说明的基础PCA主成分分析的基本原理,这种PCA主要适用于线性关系的数据点,在原理里包含的矩阵乘法实际上也是线性操作。数据中矩阵乘一个向量就是对矩阵的列的线性组合。如果我们遇到数据不是线性的情况下怎么办呢?
1.1 关于Kernel PCA
如上图所示的 一批点,如果给他做线性PCA时无法区分开红色和绿色的点,也就达不到聚类的效果,所以在解决非线性相关的数据时,我们应该用升维的方法 。比方说将上图里的数据点,我们将其放置于一个平面上,再从三维空间的角度将平面折叠起来成一个圆锥的话,就可以很好的将红点和绿点区分开来。这时候做一个普通的PCA就可以进行聚类了。
于是我们引出了kernel PCA的概念,他的步骤就是将原来n₀维度的数据给提升成n₁,得到一个函数ɸ,将中心值变为0,计算其矩阵H的相关矩阵,加上波浪线之后和原来的矩阵区分开,下一步解他们的特征值和特征向量,下面就引申出来两个问题:
- 如何去选择升维函数ɸ?
- 如果避免升维过高而产生的过高算力,以节省运算资源。
由此我们得到了kernel PCA的方法。证明如下:
将Hz=λz代入,得到结论:
得到如下的式子,通过Kα = λα替换进去,代表αr应该有一个1/λr的长度,得到一个仍然含有ɸ的式子,我们最终目标是要去掉ɸ,在后续的变换中,将所有的ɸ都变换为核函数k,只需要定义一个核函数k即可。之前我们假设了高维空间的中心点为0,需要进行一个Normalization。
最后将所有的变换回到核函数上去:
这里有很多核函数形式,还包括高斯和拉普拉斯分布等,通常会通过数据实验来评估使用效果。
1.2 用法总结
将所有的数据点投影到主向量上去,由此得到投影后的系数yr。
1.3 Kernel PCA实例
图一为三个不同数据点组成的圆,我们选取一个简单的二次多项式的核函数,就可以计算出不同的主成分,将原来的数据投影到主向量上面,x轴为第一个主向量,y轴为第一个主向量。就已经可以将数据明显区分开来。
再使用高斯核函数来验证一下:
横轴为第一个主成分,竖轴为第二个主成分,此时已经可以区分开不同数据点这就是高维空间以及核PCA的用法。
总结
从PCA引入到kernel PCA,主要是通过使用核函数来对数据进行升维来达成聚类效果。而核PCA的中心思想就是将高维空间的运算转换成低维空间的核函数。