协方差及PCA降维计算

PCA(Principal Component Analysis,主成分分析),PCA是一种无监督算法,也就是我们不需要标签也能对数据做降维,这就使得其应用范围更加广泛了。那么PCA的核心思想是什么呢?这里我们提到了方差,咱们可以想象一下,如果一群人都堆叠在一起,我们想区分他们是不是比较困难,但是如果这群人站在马路两侧,我们就可以很清晰的判断出来应该这是两伙人。所以基于方差我们可以做的就是让方差来去判断咱们数据的拥挤程度,在这里我们认为方差大的应该辨识度更高一些,因为分的比较开(一条马路给隔开啦)。

降维致力于解决三类问题。 
1. 降维可以缓解维度灾难问题; 
2. 降维可以在压缩数据的同时让信息损失最小化; 
3. 理解几百个维度的数据结构很困难,两三个维度的数据通过可视化更容易理解。 


就像我们图上面的,我说有一个向量(3,2),但是为什么这个向量是这样的表示呢?因为它在我们的做标系中,如果我把坐标系换了,它就不是(3,2)了。作为基,首先的一个前提就是要相互垂直,或者说内积为0,因为X和Y它们表达的分别是两种指标,我们不希望它们之间内部存在任何联系,所以必须让他们内积为0,这样就是各自独立的啦!

所谓的降维就是要把我们的数据投影到最合适的基中

方差,协方差和协方差矩阵

方差(Variance)是度量一组数据的分散程度。方差是各个样本与样本均值的差的平方和的均值: 

协方差(Covariance)是度量两个变量的变动的同步程度,也就是度量两个变量线性相关性程度。如果两个变量的协方差为0,则统计学上认为二者线性无关。注意两个无关的变量并非完全独立,只是没有线性相关性而已。计算公式如下: 

如果协方差大于0表示一个变量增大是另一个变量也会增大,即正相关,协方差小于0表示一个变量增大是另一个变量会减小,即负相关。 

对于二维数据降维到一维数据,按照上面的方法找到方差值最大就行。但是对于高维数据来说,仅此一个条件并不能完全决定。三维数据降维到二维时,首先我们希望找到一个方向使得投影后方差最大,这样就完成了第一个方向的选择,继而我们选择第二个投影方向。

如果我们还是单纯只选择方差最大的方向,很明显,这个方向与第一个方向应该是“几乎重合在一起”,显然这样的维度是没有用的,因此,应该有其他约束条件。从直观上说,让两个字段尽可能表示更多的原始信息,我们是不希望它们之间存在(线性)相关性的,因为相关性意味着两个字段不是完全独立,必然存在重复表示的信息。数学上协方差表示两组数据的相关性:

假设有一个矩阵:

然后我们用X乘以X的转置,并乘上系数1/m:

这个矩阵对角线上的两个元素分别是两个字段的方差,而其它元素是a和b的协方差。两者被统一到了一个矩阵的。根据矩阵相乘的运算法则,这个结论很容易被推广到一般情况:
设我们有m个n维数据记录,将其按列排成n乘m的矩阵X,设C=1mXXT,则C是一个对称矩阵,其对角线分别个各个字段的方差,而第i行j列和j行i列元素相同,表示i和j两个字段的协方差。

PCA算法步骤:

设有m条n维数据。
1)将原始数据按列组成n行m列矩阵X
2)将X的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值
3)求出协方差矩阵 
4)求出协方差矩阵的特征值及对应的特征向量
5)将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P
6)Y=PX即为降维到k维后的数据

实例:

                                                                         

对其进行0均值化处理:

                                                                         

求协方差矩阵:

                                                         

求解后特征值为:

                                                                                   


特征值和特征向量的求法是这样的:假设A

根据前面的公式AA乘以特征向量,必然等于特征值乘以特征向量。我们建立特征方程求解:

从特征方程可以看出,矩阵与单位矩阵和特征值乘积的矩阵行列式为0,即:

矩阵的两个特征值都等于-1。现在再用特征值来解特征向量。 把λ=−1带入:

得到:

所以:


对特征值分解后按照特征值大小排序,取前多少个。通过特征值排列 ,我们可以得到数据在这些特征向量上的分布和多样性。

其对应的特征向量分别是:

                                                                                   

其中对应的特征向量分别是一个通解,c1和c2可取任意实数。那么标准化后的特征向量为:

                                                                                         

因此我们的矩阵P是:

                                                                                       

可以验证协方差矩阵C的对角化:

                                                               

最后我们用P的第一行乘以数据矩阵,就得到了降维后的表示:

                                               

猜你喜欢

转载自blog.csdn.net/qq_41598072/article/details/85009130