协方差矩阵与PCA降维

1.方差/标准差/协方差

首先需要明确一点,以上三个结果都是针对一整个数据集而言,并非某个单独变量。

以二维数据集X={ [1,2],[3,4],[5,6],[7,8] }为例,

  先求其期望(均值)u = [1,2]+[3,4]+[5,6]+[7,8]/2= [4,5] ;

  数据集X零均值处理后X' = {[-3,-3], [-1,-1], [1,1], [3,3]}

  则其方差矩阵 ∑ = ΩXi*Xi' / 4 = [5,5; 5,5] 

方差的大小代表着数据的波动情况,方差越小,波动越小。

而对于协方差,上面的方差为一种特殊情况,即X = Y。协方差的大小体现了两个变量的相关程度,协方差越大,说明越‘正相关’,如果协方差为负数,则说明‘反相关’;协方差为零,说明两个变量不相关,但不一定独立。

还有协方差矩阵度量的是维度与维度之间的关系,而非样本与样本之间。

样本方差:https://www.zhihu.com/question/20099757

协方差:https://www.zhihu.com/question/20852004

协方差矩阵与PCA:https://wenku.baidu.com/view/ce7ee04bcc175527072208ca.html

协方差矩阵与特征值:http://blog.csdn.net/Yelbosh/article/details/52079462

PCA降维就是利用协方差矩阵最大能量方向上做投影(特征值最大,代表散度最大,即拉伸最长,投影后数据重叠程度最小,保留信息越多)

PCA的全部工作简单点说,就是对原始的空间中顺序地找一组相互正交的坐标轴,第一个轴是使得方差最大的,第二个轴是在与第一个轴正交的平面中使得方差最大的,第三个轴是在与第1、2个轴正交的平面中方差最大的,这样假设在N维空间中,我们可以找到N个这样的坐标轴,我们取前r个去近似这个空间,这样就从一个N维的空间压缩到r维的空间了,但是我们选择的r个坐标轴能够使得空间的压缩使得数据的损失最小。

PCA原理详看这里:http://blog.codinglabs.org/articles/pca-tutorial.html

先是了解矩阵点乘的物理意义,即投影。

再了解矩阵与向量的乘积 c= A·b (A为m*n维矩阵,b为n*1的向量) ,结果是一个m*1维的向量,这就是线性变换。以A矩阵中每一行的向量作为一组新的基后,向量b在这组基下的表示就成了 c,c中每一个值都是在对应基底下的投影值。

所以对于有着n个特征值的数据集X,按列存放每个数据,构成一个n*m的矩阵(m为样本个数),此时我们需要寻找一个线性变换矩阵P,使得X经P变换后,特征数从n减少到k。即Y=PX 是一个 k *m的矩阵,达到对数据X进行降维。

但是对于P的选取,需要保留最大的信息又能去除数据间的冗余。这里用C表示X的协方差矩阵C = X·X', D为Y的协方差矩阵 D =Y·Y'

这里需要了解的是协方差矩阵与特征值,cov(a,b)越大说明a/b越相关,cov(a,b) = 0表明a/b不相关。cov(a,a)代表着数据本身变化的剧烈程度,我们认为有效信息的方差大,而噪声的方差就很小。

有了方差的概念,所以数据降维就是要保证降维后得到的Y的协方差矩阵对角线上的值尽可能大,非对角线元素值尽可能为0(D是一个对角矩阵就好了)。这样就达到减少数据维数并保留绝大部分信息的目的。

现在我们从Y的协方差矩阵D着手:

D = Y·Y' = PX·(PX)' 
             = PXX'P
             = PCP'

C = P'DP

神奇的一幕出现了,我们需要的变换矩阵P就是使得C对角化的矩阵。由于C是对称矩阵...(等等后面一系列原因,可以看链接里的详细介绍,这里已经不重要了,我们要找的P已经很明显了)

对协方差矩阵做SVD分解,即可得到P矩阵,降维时,取P矩阵的前k行就是最终需要的变换矩阵了。

==============

上面的一般的PCA降维,其都默认了n<m 即样本数量大于特征维数。这里用到一个定理:秩(AB)≤min(秩(A),秩(B))

实际当中,常见还是n>>m的情况,比如25个64*64的图像块,拉成一个(4096,25)的数据矩阵,这时候X·X'是一个4096*4096的矩阵,对其进行SVD有点不现实。

这里考虑到能不能用 X'·X 来简化计算呢(25*25矩阵),看下面的推导:

X·X' = PAP'1)
X'·X = QAQ'2)

在(2)两边分别乘 X 、X' 得到

XX'·XX' = X·QAQ'·X'     将(1)代入左边得到

PAP'PAP' = PAAP = XQAQ'X'

所以P = XQ/sqrt(A)

在求特征向量的时候,需要在X'·X的特征向量的基础上在左乘X,并除以相对应特征值的开方即可。

 这里贴一个PCA在人脸数据上的应用:http://blog.csdn.net/mpbchina/article/details/7384425



原文地址:https://www.cnblogs.com/caffeaoto/p/8527466.html