1.背景介绍
一般情况下,在数据挖掘和机器学习等数据分析领域中,数据都被表示为向量。众所周知,很多机器学习算法的复杂度和数据的维数有着密切关系,甚至与数据维数呈指数级别关联。然而实际机器学习中处理的数据可达成千上万甚至几十万维,在这种情况下,算法的资源消耗是不可接受的,因此我们必须对数据进行降维。PCA(Principal Component Analysis),即所谓的主成分分析,是一种常用的数据分析方法。PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维。
2.PCA的数学原理
考虑M个N维数据向量构成的数据矩阵 ,即
为N维列向量,如何将N维的数据向量将为K(K<N)维呢?由线性代数的知识可得,即找到一个线性变换矩阵W,满足
,W为N*K的变换矩阵,Z是M个K维列向量构成的新的数据矩阵,即降维后的数据。不难看出,其几何意义就是将M个N维数据投影到某个K维的超平面上。对于每个
来说,满足
,是第i个原始N维向量与K个基向量分别做内积而得到的K维数据向量,即
是原始数据向量
在新坐标系
中的坐标向量。既然是坐标系,我们希望他是一个标准正交坐标系,即满足
,显然,新空间中的向量是原始空间中向量的线性组合。为了使投影后的数据能最大程度地表达原始的N维数据,应满足以下条件:
1.每个投影点应尽可能地分散;
2.每个投影点应满足彼此线性无关;
首先考虑第一个条件,我们希望投影点尽可能地分散,而这种分散程度,可以采用方差来表述,即:
为了使分散程度最大,即优化目标是最大化方差。
考虑第二个条件,投影点彼此线性无关,而这种相关性,我们可以采用协方差来表述,即:
为了满足线性无关性,即应满足协方差为0。
为了方便讨论,我们将向量中心化,即向量的每个分量减去其均值,得到的新的向量满足均值为0,上述方差与协方差变成如下形式:
即方差变为向量x与向量自身的内积,协方差变为向量x与向量y之间的内积,考虑协方差矩阵C,即 ,
,
。
设原始数据矩阵X(这里的X表示若干个N维向量组成的数据矩阵)对应的协方差矩阵为C,而W是一组基按行组成的变换矩阵,设 ,则Z为
为基做变换后的数据,即降维后的数据,设Z的协方差矩阵为D,我们推导D与C的关系:
从而可得,我们现在的目标就是找到一个矩阵W,使得 是一个对角矩阵(因为对角矩阵恰好满足非对角线元素为0的条件),即所谓的相似对角化;并且我们将对角元素按从大到小依次排列,那么W的前K行就是我们要寻找的变换矩阵,用W的前K行组成的矩阵乘以X就能使得X从N维降到K维。
显然,矩阵C是一个对称矩阵,并且矩阵C我们可以通过原始数据矩阵X计算得到,一个N行N列的实对称矩阵一定可以找到N个单位正交的特征向量,我们将其按列组成矩阵 ,则由矩阵对角化理论可得:
,
,到这里,我们已经找到了需要的矩阵W=
,如果设W按照
中特征值的从大到小
,将对应的特征向量从上到下排列,则用W的前K行组成的矩阵
乘上原始数据矩阵X,就得到了我们需要的降维后的数据矩阵Z。
若基于 来重构
,可采用以下式子来重构:(
为重构后的值,相当于估计值)
对于中心化后的数据,还需加上原始数据向量的均值,即:
降维的维数通常由用户事先指定,为了保证重构的可靠性,我们通常还会设置一个重构阈值,即选取使得以下式子成立的最小K值:
其中t为阈值,范围在0到1之间,例如t可取0.95。
3.总结
根据上面对PCA的数学原理的解释,我们可以了解到一些PCA的能力和限制。PCA本质上是将方差最大的方向作为主要特征,并且在各个正交方向上将数据“离相关”,也就是让它们在不同正交方向上没有相关性。PCA仅需保留W与样本的均值向量即可通过简单的向量运算将样本投影到低维空间中。显然,低维空间与高维空间必有不同,因为对应于最小的N-K个特征值对应的特征向量被舍弃了,这是降维导致的结果,但舍弃这部分信息往往是必要的,一方面,舍弃这部分信息之后能使样本的采样密度增大,这正是降维的重要作用之一;另一方面,当数据受到噪声影响时,最小的特征值对应的特征向量往往与噪声相关,将它们舍弃能在一定程度上起到去除噪声的作用
PCA可以很好的解除数据的线性相关性,但是对于高阶相关性就没有办法了,对于存在高阶相关性的数据,可以考虑Kernel PCA,通过Kernel函数将非线性相关转为线性相关,关于这点就不展开讨论了。另外,PCA假设数据各主特征是分布在正交方向上,如果在非正交方向上存在几个方差较大的方向,PCA的效果就大打折扣了。最后需要说明的是,PCA是一种无参数技术,所以PCA便于通用实现,但是本身也无法进行个性化的优化。