【学习笔记】主成分分析
主成分分析 principle component analysis(pca)
现在有 \(m\) 个 \(n\) 维的数据,想把它们降到 \(k\) 维,得到一个 \(m\times k\) 的矩阵,但是不能损失数据之间的差异性(不能说两个不同的数据投影到了同一个点上)。这里假设数据中 \(n\) 维里面每一维的平均值都是 \(0\),否则减去再加回来,不受影响。
那么不难发现这肯定是让矩阵右乘一个大小为 \(n\times k\) 的矩阵,进行一个线性空间的映射。
做法是构造一个 \(n\) 维数据的协方差矩阵(矩阵的行列表示的是数据的维度,手上的 \(m\) 个数据变成了观测点),求其特征值和特征向量,把前 \(k\) 大特征值对应的特征向量 concat 起来就得到了要被右乘的矩阵。
这么做的道理是什么?
我们希望点之间差异明显,也就是分得很散。“分得很散”这个状态可以使用方差来刻画。换言之,我们希望使用 \(k\) 维空间内的一组基来对这些点进行变换,原来“每个数据点对应的向量” 向 “\(k\) 个基向量”分别做映射 以得到在新空间里面的数据点。
那么先求出来一个 \(k\) 维向量使得数据点映射之后方差最大。如果再求一个方差次大的向量,可以对第一个向量旋转一个非常小的量,但是这样的向量没啥意义,或者说你得到的 \(m\) 个数据点中 \(k\) 维每维度大小几乎相等。那么对于在这一个维度上离得很近的两个数据点,就很难区分出来了。
于是我们要减小基向量的相关性,这个相关性我们使用协方差进行刻画,那么尝试找 \(k\) 个向量,满足原数据映射之后维度之间相关性最小,最小就是 \(0\)。也就是向量互相垂直。问题变成了找 \(k\) 个正交向量,满足映射后方差是可选范围内最大~第 \(k\) 大的。(先满足正交基,在选择方差大的)我个人觉得肯定是可以研究其他的最优化目标的,但是做法想必就没有直接求协方差矩阵特征向量这么简单了。
图片里面的 \(\frac 1m\) 至于是不是 \(\frac{1}{m-1}\) 其实是不影响的。
所以很显然,\(w\) 是特征向量,\(\lambda\) 是特征值。找前 \(k\) 大的特征值和其对应的特征向量即可。
最后应该证明一下这些协方差矩阵的特征向量是正交的,不过这好像是实对称矩阵的性质:
-
实对称矩阵不同特征值对应的特征向量必然正交。
证明
假设 \(a_1,a_2\) 为 \(A\) 的两个不同的特征值,对应特征向量为 \(v_1,v_2\) 那么已知信息有 \(A^T=A,Av_i=a_iv_i\)
对于 \(A v_1=a_1v_1\) 同时转置得到 \(v_1^TA^T=a_1v_1^T\),同时乘 \(v_2\) 得到 \(v_1^T A v_2 = a_1 v_1^T v_2\)
同理得到 \(v_2^T A v_1 = a_2 v_2^T v_1\)
显然两个等号左边都是数字,而 \(((v_2^T A) v_1)^T = v_1^T A v_2\) 所以我们将两式相减得到 $(a_1-a_2) v_1^T v_2 = 0 $ 进而 \(v_1^T v_2 =0\),向量正交。
-
设特征向量 \(\lambda\) 重数为 \(r\),则必然存在 \(r\) 个线性无关的特征向量对应于 \(\lambda\) ,因此可以将这 \(r\)个特征向量单位正交化。
这个证明好像比较简单,我的理解是去皮。
【Appendix】
什么是协方差/协方差矩阵
协方差 co-variance: 对于两个有 \(n\) 个观测点 \(\{(X_i,Y_i)\}_{i=1}^n\) 的随机变量 \(X,Y\),\(cov(X,Y)=\frac 1{n-1}\sum_{i=1}^n (X_i-\bar X)(Y_i-\bar Y)\) 不难发现,协方差绝对值越大,表示两个向量相关性越强(对彼此的影响越大)。
为什么是 \(\frac{1}{n-1}\)?请自行百度 bessel 修正,我也不会,感性理解不了。
在 主成分分析 中,\(n\) 个维度两两协方差构成了协方差矩阵。求 cov matrix 其实蛮简单,以 \(m\times n\) 的数据矩阵为例,所有元素减去当列平均值之后得到 \(A'\)(更高大上的名字叫“零均值化”),那么 \(\frac 1{m-1} A' ^TA'\) 就是协方差矩阵
怎么求特征值和特征向量
对于一个 matrix A of size n\(\times\)n,我们希望它对一个向量 \(x\) 空间映射之后向量 \(x\) 还能保持在原方向。形式化的讲:\(Ax=\lambda x\Rightarrow (A-\lambda I_n)x=0\)
方程有非 \(0\) 解需要 \(|A-\lambda I_n|=0\) 那么可以写成关于 \(\lambda\) 的一元 \(n\) 次方程,得到的 \(\lambda_1\dots \lambda_n\) 就是矩阵特征值。既然 \(|A-\lambda I_n|=0\) 那么 \(x\) 必然不唯一,对于任一 \(\lambda_i\) 想得到一个合法的 \(x\) 是容易的。
【番外】
能不能读一遍,哪里没看懂水个评论行不行。