现在有 \(m\) 个 \(n\) 维的数据,想把它们降到 \(k\) 维,得到一个 \(m\times k\) 的矩阵,但是不能损失数据之间的关联性和差异性。
那么不难发现这肯定是让矩阵右乘一个大小为 \(n\times k\) 的矩阵,进行一个线性空间的映射。
做法是构造一个 \(n\) 维数据的协方差矩阵(矩阵的行列表示的是数据的维度,手上的 \(m\) 个数据变成了观测点),求其特征值和特征向量,把前 \(k\) 大特征值对应的特征向量 concat 起来就得到了要被右乘的矩阵。
这么做的道理是什么?
【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\) 是容易的。