个人总结:降维 PCA

PCA Principal components analysis主成分分析,在压缩消除冗余和数据噪音消除等有广泛应用。

首先复习一下特征值和特征向量

这里复习一下特征值和特征向量,理解内在的含义。

A是n阶矩阵,λ和n维非零向量x使关系式:

Ax = λx .....(1)     λ为矩阵A的特征值,x为对应特征值λ的特征向量。 也可以写成(A - λE)x = 0 .....(2)

如何理解上面两个式子?

首先要理解矩阵线性变换,即矩阵乘法:

个人总结:降维 PCA向量X通过矩阵A这个变化规则就可以变换为向量Y了。

几何变换如下图所示:

个人总结:降维 PCAX由(x1, x2)这个向量构成,Y由(a11x1 + a12x2, a21x1 + a22x2)构成。

由 Ax = λx .....(1) 可知:

个人总结:降维 PCA

确定了特征值后,向量x变换为:

个人总结:降维 PCA

引用《线性代数的几何意义》的描述:“矩阵乘法对应了一个变换,是把任意一个向量变成另一个方向或长度都大多不同的新向量。在这个变换的过程中,原向量主要发生旋转、伸缩的变化。如果矩阵对某一个向量或某些向量只发生伸缩变换,不对这些向量产生旋转的效果,那么这些向量就称为这个矩阵的特征向量,伸缩的比例就是特征值。”

显然,第一个图就是发生了旋转、伸缩,第二个图仅仅发生了伸缩。

特征值对应的特征向量就是理想中想取得的正确坐标轴,而特征值就等于数据在旋转后的坐标上对应维度的方差。

通过求出A的特征值和对应的特征向量,就能找到旋转后正确的坐标轴,这个就是特征值和特征向量的一个实际应用:“得出使数据在各个维度区分达到最大的坐标轴”。(区分大:方差大)

而在数据挖掘中,就会直接用特征值来描述对应特征向量方向上包含的信息量,而某一特征值除以所有特征值的和的值就为:该特征向量的方差贡献率。(在该维度下蕴含的信息的比例)

经过特征向量变换下的数据称为变量的主成分,当前m各主成分累计的方差贡献率达到85%以上就保留这个m个主成分的数据。实现了对数据进行降维的目的。

PCA的目的

PCA的目的:最小投影距离,最大投影方差。降维后不同维度的相关性为0;

先说最大投影方差:

个人总结:降维 PCA

个人总结:降维 PCA

将图1投影到x1,显然数据离散性最大,代表数据在所投影的维度有越高的区分度,这个区分度就是信息量。

而图2投影到x1显然信息量最小(应该投影到x2)。图3投影到x1显然未完全利用其信息量。

所以当我们想对数据进行降维的话,图1就应该保留x1这个维度,图2就应该保留x2这个维度。

图3呢?图3应该考虑新的坐标轴。

个人总结:降维 PCA

将坐标轴进行旋转就能正确降维了。而这个旋转的操作其实就是矩阵变换个人总结:降维 PCA

也就是个人总结:降维 PCA,通过矩阵A对坐标系X进行旋转。

经过一些数学推导,其实就可以得知,特征值对应的特征向量就是理想中想取得的正确坐标轴,而特征值就等于数据在旋转后的坐标上对应维度的方差(沿对应的特征向量的数据的方差)。

 而A其实即为我们想求得的那个降维特征空间,Y则是我们想要的降维后的数据。

PCA的过程:我们为什么这么做

(1)采用了去中心化,均值为0。未中心化,可能第一主成分的方向有误

个人总结:降维 PCA

这里可以看出主成分分析的目的是最小投影距离,最大投影方差。如果不中心化就达不到上述目的。

在去中心化后,由于特征的均值变为0,所以数据的协方差矩阵C可以用E(XXT)或者1/m * XXT来表示,XT为矩阵的转置。这里X每一行为一个特征。当然也可以表示为E(XTX)或者1/m * XTX,这时每一行为一个样本。

(2)标准化数据,为什么要标准化,因为等下要算特征值和特征向量,特征值对应的特征向量就是理想中想取得的正确坐标轴,而特征值就等于数据在旋转后的坐标上对应维度的方差(沿对应的特征向量的数据的方差)。而考虑这样一个例子,一个特征表示对象的长度(米为单位),而第二个特征表示对象的宽度(厘米为单位)。如果数据没有被标准化,那么最大方差及最大特征向量将隐式地由第一个特征定义。 


这里可以发现,经过中心化和标准化的数据,均值为0,方差为1,符合正态分布(高斯分布)。假设此时的数据为X,X有m个n维数据,(x(1),x(2),...,x(m))。


(3)算协方差矩阵。这里把n维特征两两求协方差,刚刚已经说过,去中心化后,此时的协方差矩阵为E(XXT)或者1/m * XXT。为什么要算协方差矩阵呢?这时就要想起我们之前的目的:在降维后的每一维度上,方差最大。而方差最大,则容易想到的就是协方差矩阵,因为协方差矩阵的对角线上的值正好就是的方差。原始数据的协方差矩阵X[nxn]对角线,对应的就是原始数据的方差;降维后的数据的协方差矩阵X' [n'xn'],对应的就是降维后的数据的方差。而我们的目的,则是使方差最大,这就又想到了另一个概念,迹,因为迹不就是对角线上所有元素之和吗,而协方差矩阵的迹,不就是方差之和吗。这样我们构建损失函数,不就是argmax(协方差矩阵X’的迹) 吗。

推导一下:

首先设新的坐标系为W [n' x n'], 为个人总结:降维 PCA,显然w为标准正交基。个人总结:降维 PCA

在新的坐标系的投影为Z = WTX,其中Z为 {z1, z2, ... z_n'}。

由刚刚的叙述,我们的目标函数可以写成:

个人总结:降维 PCA

这是因为Z = WTX, 而Z的协方差矩阵为 1/m * E(ZZT),而1/m在损失函数作为一个常数可以忽略不计。

结合目标函数与条件,通过拉格朗日函数可以得到:

个人总结:降维 PCA

对W进行求导:

个人总结:降维 PCA

显然这时可以两边同时再乘以一个常数1/m,我们的左边就有了原始数据的协方差矩阵,但是有没有1/m,其实是对最后的结果没有影响的。

−λ是由特征值构成的对角阵,且特征值在对角线上,其余位置为0。很显然,W为标准正交基,我们假如把特征值以及对应的W的那一列拿出来和XXT相乘,不就是一个求特征值和特征向量的过程吗。而W的维度为n' x n',显然我们就是求前n'个最大的特征值以及对应的特征向量(同时也可以设定一个阈值,当前n’个特征向量达到总和的多少占比时,一般是85%,就提取,这样可能在尽可能减少信息量损失的情况下更多地降低维度)。这n'个特征向量组成的矩阵W即为我们需要的矩阵。通过将原始数据矩阵与该矩阵进行矩阵乘法,便可以将n维的数据降到n'维。

(4)刚刚说了需求是前n’个最大的特征值以及对应的特征向量。于是就很容易想到对协方差矩阵进行SVD分解,或者也可以说特征值分解,选取最大的几个特征值(或者设置阈值来选最大的几个特征值),对应的特征向量进行标准化(使其成为标准正交基)后组成特征矩阵,这些特征向量都是正交的。

复习一下SVD分解(奇异值分解):来自*

个人总结:降维 PCA

个人总结:降维 PCA

MMT就是一个 m x m阶的矩阵,这个矩阵的所有特征向量组成的矩阵就是U。这里面每个特征向量就是左奇异向量。

所以MTM就是一个 n x n阶的矩阵,这个矩阵的所有特征向量组成的矩阵就是V。这里面每个特征向量就是右奇异向量。

而我们要找的,也就是MTM的特征向量。

 所以通过SVD分解就能求出我们需要的对应的特征值,以及需要的特征空间,而实际上在sklearn中PCA背后的算法就是用的SVD,而不是暴力特征分解。

核主成分分析KernelizedPCA介绍

有时我们的数据并不是可以投影到线性超平面的,这时候就不能直接进行PCA降维,这里就需要用到支持向量机一样的核函数的思想,先把数据从n维映射到线性可分的高维N>n,然后再从N维降维到一个低维度n',这里的维度之间满足n' < n < N。

通过映射φ将n维映射到N维。

对于n维空间的特征分解:

个人总结:降维 PCA

映射为:

个人总结:降维 PCA

通常φ不是显式的,计算的时候通过核函数完成。

其中核函数有

个人总结:降维 PCA

更多的细节就不进行深入阐述了,感兴趣的读者可以自行百度。

PCA总结

为了克服PCA的一些缺点,也衍生出了很多PCA的变种,包括上述提到的KPCA。

PCA的主要优点有:

(1)仅通过方差衡量信息量,不受数据集以外因素影响。

(2)各主成分之间正交,消除可能出现的低秩、或者原始数据成分间相关的可能。

(3)计算方法简单,易于实现。

主要缺点:

(1)降维后各个特征维度的含义具有一定的模糊性,数据的可解释性没有原始样本的特征强。(可解释性变弱)

(2)方差小的非主成分可能含有对样本差异的重要信息(可能丢失强力特征),因降维丢弃后可能对后续处理有影响。