在维度灾难、冗余,这些在数据处理中常见的场景,不得不需要我们进一步处理,为了得到更精简更有价值的信息,我们所用的的各种方法的统称就是降维。
降维有两种方式:
(1)特征抽取:我觉得叫做特征映射更合适。因为它的思想即把高维空间的数据映射到低维空间。比如马上要提到的PCA即为一种特征映射的方法。还有基于神经网络的降维等。
(2)特征选择:
PCA Principal components analysis主成分分析,在压缩消除冗余和数据噪音消除等有广泛应用。
这里复习一下特征值和特征向量,理解内在的含义。
A是n阶矩阵,λ和n维非零向量x使关系式:
Ax = λx .....(1) λ为矩阵A的特征值,x为对应特征值λ的特征向量。 也可以写成(A - λE)x = 0 .....(2)
如何理解上面两个式子?
首先要理解矩阵线性变换,即矩阵乘法:
几何变换如下图所示:
X由(x1, x2)这个向量构成,Y由(a11x1 + a12x2, a21x1 + a22x2)构成。
由 Ax = λx .....(1) 可知:
确定了特征值后,向量x变换为:
引用《线性代数的几何意义》的描述:“矩阵乘法对应了一个变换,是把任意一个向量变成另一个方向或长度都大多不同的新向量。在这个变换的过程中,原向量主要发生旋转、伸缩的变化。如果矩阵对某一个向量或某些向量只发生伸缩变换,不对这些向量产生旋转的效果,那么这些向量就称为这个矩阵的特征向量,伸缩的比例就是特征值。”
显然,第一个图就是发生了旋转、伸缩,第二个图仅仅发生了伸缩。
特征值对应的特征向量就是理想中想取得的正确坐标轴,而特征值就等于数据在旋转后的坐标上对应维度的方差。
通过求出A的特征值和对应的特征向量,就能找到旋转后正确的坐标轴,这个就是特征值和特征向量的一个实际应用:“得出使数据在各个维度区分达到最大的坐标轴”。(区分大:方差大)
而在数据挖掘中,就会直接用特征值来描述对应特征向量方向上包含的信息量,而某一特征值除以所有特征值的和的值就为:该特征向量的方差贡献率。(在该维度下蕴含的信息的比例)
经过特征向量变换下的数据称为变量的主成分,当前m各主成分累计的方差贡献率达到85%以上就保留这个m个主成分的数据。实现了对数据进行降维的目的。
PCA的目的:最小投影距离,最大投影方差。降维后不同维度的相关性为0;
先说最大投影方差:
将图1投影到x1,显然数据离散性最大,代表数据在所投影的维度有越高的区分度,这个区分度就是信息量。
而图2投影到x1显然信息量最小(应该投影到x2)。图3投影到x1显然未完全利用其信息量。
所以当我们想对数据进行降维的话,图1就应该保留x1这个维度,图2就应该保留x2这个维度。
图3呢?图3应该考虑新的坐标轴。
将坐标轴进行旋转就能正确降维了。而这个旋转的操作其实就是矩阵变换
经过一些数学推导,其实就可以得知,特征值对应的特征向量就是理想中想取得的正确坐标轴,而特征值就等于数据在旋转后的坐标上对应维度的方差(沿对应的特征向量的数据的方差)。
而A其实即为我们想求得的那个降维特征空间,Y则是我们想要的降维后的数据。
(1)采用了中心化,均值为0。未中心化,可能第一主成分的方向有误
这里可以看出主成分分析的目的是最小投影距离,最大投影方差。如果不中心化就达不到上述目的。
在中心化后,由于特征的均值变为0,所以数据的协方差矩阵C可以用E(XXT)或者1/m * XXT来表示,XT为矩阵的转置。这里X每一行为一个特征。当然也可以表示为E(XTX)或者1/m * XTX,这时每一行为一个样本。
(2)标准化数据,为什么要标准化,因为等下要算特征值和特征向量,特征值对应的特征向量就是理想中想取得的正确坐标轴,而特征值就等于数据在变换后的坐标上对应维度的方差(沿对应的特征向量的数据的方差)。
我们可以验证一下:
这里X作为原始空间的数据,有五条,每条数据有两个特征。
X_cov是X的协方差矩阵(这里算协方差,numpy采用除以m-1,是样本方差,在实际生活中比除以m的总体方差应用更多,但在这里不管除以多少都无伤大雅)。
X_con eig是协方差矩阵的特征值,里面还有特征向量(标准正交基),至于为什么强调标准正交基,后续会解释。
change zone是将原始空间的数据经过特征空间变换(将原始数据乘以特征空间)后得到的数据。
X change cov是变换后的数据的协方差矩阵,我们已经可以发现变换后数据的方差(对角线上的值)与特征值相等。
如果我们不将特征向量标准化呢?
这里使用了测试的特征向量(1,-1)和(1,1)。可以发现最后变换域的方差和之前的特征值是一个倍数关系!但是这仍然可以证明,选用更大特征值的特征向量进行降维,可以使变换后的数据保持方差更大。
而考虑这样一个例子,一个特征表示对象的长度(米为单位),而第二个特征表示对象的宽度(厘米为单位)。如果数据没有被标准化,那么最大方差及最大特征向量将隐式地由第一个特征定义。
这里可以发现,经过中心化和标准化的数据,均值为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'}。
向量在ω上的投影坐标可以表示为
易知中心化后,投影之后的均值为0,即
投影之后的方差可以表示为
结合目标函数与条件,用代替协方差矩阵,通过拉格朗日函数可以得到:
对ω进行求导:
此时求出来方差D(x)为
−λ是由特征值构成的对角阵,且特征值在对角线上,其余位置为0。很显然,W为标准正交基,我们假如把特征值以及对应的W的那一列拿出来和相乘,不就是一个求特征值和特征向量的过程吗。而W的维度为n' x n',显然我们就是求前n'个最大的特征值以及对应的特征向量(同时也可以设定一个阈值,当前n’个特征向量达到总和的多少占比时,一般是85%,就提取,这样可能在尽可能减少信息量损失的情况下更多地降低维度)。这n'个特征向量组成的矩阵W即为我们需要的矩阵。通过将原始数据矩阵与该矩阵进行矩阵乘法,便可以将n维的数据降到n'维。也就是说,一条n维的数据{1xn},假设选了前m个特征向量,通过乘以特征矩阵{nxm},就变成了m维的数据{1xm},我们就达到了降维的目的。
(4)刚刚说了需求是前n’个最大的特征值以及对应的特征向量。于是就很容易想到对协方差矩阵进行SVD分解,或者也可以说特征值分解,选取最大的几个特征值(或者设置阈值来选最大的几个特征值),对应的特征向量进行标准化(使其成为标准正交基)后组成特征矩阵,这些特征向量都是正交的。
复习一下SVD分解(奇异值分解):来自维基百科
MMT就是一个 m x m阶的矩阵,这个矩阵的所有特征向量组成的矩阵就是U。这里面每个特征向量就是左奇异向量。
所以MTM就是一个 n x n阶的矩阵,这个矩阵的所有特征向量组成的矩阵就是V。这里面每个特征向量就是右奇异向量。
而我们要找的,也就是MTM的特征向量。
所以通过SVD分解就能求出我们需要的对应的特征值,以及需要的特征空间,而实际上在sklearn中PCA背后的算法就是用的SVD,而不是暴力特征分解。
定义降维后的空间信息占比为
通过最小投影距离其实是和线性回归的原理类似。
我们希望投影后到d维超平面,最小化所有点到投影点的距离平方之和。
为原始点经过变换到新的特征空间的点。数据集每个点到投影点的距离为
表示在超平面D上的投影点(投影向量),该超平面由d个标准正交基构成,于是投影向量可以表示为
其中损失函数可以展开
第一项的是一个常数,将之前表示的代入上式第二三项,注意和表示投影长度,都是常数
因此损失函数可以写为
这其实就已经和上面用最大方差理论等价了,再使用同样的步骤就可以求得最终的投影空间,最佳投影方向就是最大特征值所对应的特征向量。
有时我们的数据并不是可以投影到线性超平面的,这时候就不能直接进行PCA降维,这里就需要用到支持向量机一样的核函数的思想,先把数据从n维映射到线性可分的高维N>n,然后再从N维降维到一个低维度n',这里的维度之间满足n' < n < N。
通过映射φ将n维映射到N维。
对于n维空间的特征分解:
映射为:
通常φ不是显式的,计算的时候通过核函数完成。
其中核函数有
更多的细节就不进行深入阐述了,感兴趣的读者可以自行百度。
为了克服PCA的一些缺点,也衍生出了很多PCA的变种,包括上述提到的KPCA。
PCA的主要优点有:
(1)仅通过方差衡量信息量,不受数据集以外因素影响。
(2)各主成分之间正交,消除可能出现的低秩、或者原始数据成分间相关的可能。
(3)计算方法简单,易于实现。
主要缺点:
(1)降维后各个特征维度的含义具有一定的模糊性,数据的可解释性没有原始样本的特征强。(可解释性变弱)
(2)方差小的非主成分可能含有对样本差异的重要信息(可能丢失强力特征),因降维丢弃后可能对后续处理有影响。