PCA就是找出数据中最主要的方面,用数据中最重要的方面来代替原始数据。假如我们的数据集是n维的,共有m个数据(x1,x2,...,xm),我们将这m个数据从n维降到r维,希望这m个r维的数据集尽可能的代表原始数据集。
我们知道从n维降到r维肯定会有损失,但是希望损失尽可能的小,那么如何让这r维的数据尽可能表示原来的数据呢?首先来看最简单的情况,即将二维数据降到一维,也就是n=2,r=1。数据如下图所示,我们希望找到某一个维度方向,它可以代表这两个维度的数据。图中列了两个向量,也就是u1和u2,那么哪个向量可以更好的代表原始数据集呢?
直观上看u1比u2更好,为什么呢?可以有两种解释,第一种解释是样本点在这个直线上的投影尽可能的分开,第二种解释是样本点到这个直线的距离足够近。假如我们把r从1维推广到任意维,则我们希望降维的标准为样本点在这个超平面上的投影尽可能分开,或者说样本点到这个超平面的距离足够近。基于上面的两种标准,我们可以得到PCA的两种等价推导。
一般来说,想要获得原始数据的表示空间,最简单的方式是对原始数据进行线性变换(基变换),即Y=PX。其中Y是样本在新空间的表达,P是基向量,X是原始样本。我们可知选择不同的基能够对一组数据给出不同的表示,同时当基的数量少于原始样本本身的维数时,则可以达到降维的效果,矩阵表示如下
那么考虑,如何选择一个方向或者基才是最优的呢? 观察上图,我们将所有的点分别向两条直线做投影,基于前面PCA最大可分的思想,我们要找的方向是降维后损失最小,可以理解为投影后的数据尽可能的分开。那么这种分散程度可以用数学上的方差进行表示,方差越大数据越分散,方差公式如下所示
对数据进行中心化后得到
现在我们知道以下几点
基于上面提到的几点,我们来探讨如何寻找计算方案。从上面可以得到,二维降到一维可以使用方差最大,来选出能使基变换后数据分散最大的方向(基),但如果遇到高维的变换,怎么办呢?
针对高维情况,数学上采用协方差来表示
我们来看看原数据协方差矩阵和通过基变换后的协方差矩阵之间的关系。设原数据协方差矩阵为C,P是一组基按行组成的矩阵,设Y=PX,则Y为X对P做基变换后的数据。设Y的协方差矩阵为D,我们来推导一下D和C的关系
可以看出,我们的目标是寻找能够让原始协方差矩阵对角化的P。换句话说,优化目标变成了寻找一个矩阵P,满足PCP^T是一个对角矩阵。并且对角元素按照从大到小依次排列,那么P的前k行就是要寻找的基,用P的前k行组成的矩阵乘以X就使得X从n维降到了r维。
我们希望投影后的方差最大化,于是优化目标为
其中tr表示矩阵的迹,利用拉格朗日函数可以得到
对P进行求导,整理得到
可以发现,和第二节基于最大投影方差的优化目标完全一样。只是上述计算的是加负号的最小化,现在计算的是无负号最大化。然后利用拉格朗日函数可以得到
对P求导有
在上面的PCA算法中,我们假设存在一个线性的超平面,可以让我们对数据进行投影。但是有些时候,数据不是线性的,不能直接进行PCA降维。这里便需要利用和支持向量机一样的核函数思想,先把数据集从n维映射到线性可分的高维N,其中N>n,然后再从N维降维到一个低维度r,这里维度之间满足r
使用核函数的主成分分析称为核主成分分析(Kernelized PCA, KPCA)。假设高维空间的数据由n维空间的数据通过映射ϕ产生。则对于n维空间的特征分解
映射为
通过在高维空间进行协方差的特征值分解,然后用和PCA一样的方法进行降维。一般来说,映射ϕ不用显式的计算,而是在需要计算的时候通过核函数完成。由于KPCA需要核函数的运算,因此它的计算量要比PCA大很多。
作为一个非监督学习的降维方法,PCA只需要特征值分解,就可以对数据进行压缩,去噪。因此在实际场景应用很广泛。为了克服PCA的一些缺点,出现了很多PCA的变种,比如解决非线性降维的KPCA,还有解决内存限制的增量PCA方法Incremental PCA,以及解决稀疏数据降维的PCA方法Sparse PCA等。
你看到的这篇文章来自于公众号「谓之小一」,欢迎关注我阅读更多文章。