个人总结:降维 PCA
PCA Principal components analysis主成分分析,在压缩消除冗余和数据噪音消除等有广泛应用。
首先复习一下特征值和特征向量
这里复习一下特征值和特征向量,理解内在的含义。
A是n阶矩阵,λ和n维非零向量x使关系式:
Ax = λx .....(1) λ为矩阵A的特征值,x为对应特征值λ的特征向量。 也可以写成(A - λE)x = 0 .....(2)
如何理解上面两个式子?
首先要理解矩阵线性变换,即矩阵乘法:
向量X通过矩阵A这个变化规则就可以变换为向量Y了。
几何变换如下图所示:
X由(x1, x2)这个向量构成,Y由(a11x1 + a12x2, a21x1 + a22x2)构成。
由 Ax = λx .....(1) 可知:
确定了特征值后,向量x变换为:
引用《线性代数的几何意义》的描述:“矩阵乘法对应了一个变换,是把任意一个向量变成另一个方向或长度都大多不同的新向量。在这个变换的过程中,原向量主要发生旋转、伸缩的变化。如果矩阵对某一个向量或某些向量只发生伸缩变换,不对这些向量产生旋转的效果,那么这些向量就称为这个矩阵的特征向量,伸缩的比例就是特征值。”
显然,第一个图就是发生了旋转、伸缩,第二个图仅仅发生了伸缩。
特征值对应的特征向量就是理想中想取得的正确坐标轴,而特征值就等于数据在旋转后的坐标上对应维度的方差。
通过求出A的特征值和对应的特征向量,就能找到旋转后正确的坐标轴,这个就是特征值和特征向量的一个实际应用:“得出使数据在各个维度区分达到最大的坐标轴”。(区分大:方差大)
而在数据挖掘中,就会直接用特征值来描述对应特征向量方向上包含的信息量,而某一特征值除以所有特征值的和的值就为:该特征向量的方差贡献率。(在该维度下蕴含的信息的比例)
经过特征向量变换下的数据称为变量的主成分,当前m各主成分累计的方差贡献率达到85%以上就保留这个m个主成分的数据。实现了对数据进行降维的目的。
PCA的目的
PCA的目的:最小投影距离,最大投影方差。降维后不同维度的相关性为0;
先说最大投影方差:
将图1投影到x1,显然数据离散性最大,代表数据在所投影的维度有越高的区分度,这个区分度就是信息量。
而图2投影到x1显然信息量最小(应该投影到x2)。图3投影到x1显然未完全利用其信息量。
所以当我们想对数据进行降维的话,图1就应该保留x1这个维度,图2就应该保留x2这个维度。
图3呢?图3应该考虑新的坐标轴。
将坐标轴进行旋转就能正确降维了。而这个旋转的操作其实就是矩阵变换
也就是,通过矩阵A对坐标系X进行旋转。
经过一些数学推导,其实就可以得知,特征值对应的特征向量就是理想中想取得的正确坐标轴,而特征值就等于数据在旋转后的坐标上对应维度的方差(沿对应的特征向量的数据的方差)。
而A其实即为我们想求得的那个降维特征空间,Y则是我们想要的降维后的数据。
PCA的过程:我们为什么这么做
(1)采用了去中心化,均值为0。未中心化,可能第一主成分的方向有误
这里可以看出主成分分析的目的是最小投影距离,最大投影方差。如果不中心化就达不到上述目的。
在去中心化后,由于特征的均值变为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'], 为,显然w为标准正交基。
在新的坐标系的投影为Z = WTX,其中Z为 {z1, z2, ... z_n'}。
由刚刚的叙述,我们的目标函数可以写成:
这是因为Z = WTX, 而Z的协方差矩阵为 1/m * E(ZZT),而1/m在损失函数作为一个常数可以忽略不计。
结合目标函数与条件,通过拉格朗日函数可以得到:
对W进行求导:
显然这时可以两边同时再乘以一个常数1/m,我们的左边就有了原始数据的协方差矩阵,但是有没有1/m,其实是对最后的结果没有影响的。
−λ是由特征值构成的对角阵,且特征值在对角线上,其余位置为0。很显然,W为标准正交基,我们假如把特征值以及对应的W的那一列拿出来和XXT相乘,不就是一个求特征值和特征向量的过程吗。而W的维度为n' x n',显然我们就是求前n'个最大的特征值以及对应的特征向量(同时也可以设定一个阈值,当前n’个特征向量达到总和的多少占比时,一般是85%,就提取,这样可能在尽可能减少信息量损失的情况下更多地降低维度)。这n'个特征向量组成的矩阵W即为我们需要的矩阵。通过将原始数据矩阵与该矩阵进行矩阵乘法,便可以将n维的数据降到n'维。
(4)刚刚说了需求是前n’个最大的特征值以及对应的特征向量。于是就很容易想到对协方差矩阵进行SVD分解,或者也可以说特征值分解,选取最大的几个特征值(或者设置阈值来选最大的几个特征值),对应的特征向量进行标准化(使其成为标准正交基)后组成特征矩阵,这些特征向量都是正交的。
复习一下SVD分解(奇异值分解):来自*
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的变种,包括上述提到的KPCA。
PCA的主要优点有:
(1)仅通过方差衡量信息量,不受数据集以外因素影响。
(2)各主成分之间正交,消除可能出现的低秩、或者原始数据成分间相关的可能。
(3)计算方法简单,易于实现。
主要缺点:
(1)降维后各个特征维度的含义具有一定的模糊性,数据的可解释性没有原始样本的特征强。(可解释性变弱)
(2)方差小的非主成分可能含有对样本差异的重要信息(可能丢失强力特征),因降维丢弃后可能对后续处理有影响。