Principal Component Analysis
很久以前的笔记
介绍
PCA is a widely used dimensionality reduction technique that projects high-dimensional data into a lower-dimensional space, while retaining as much of the data’s variance as possible.
My understanding is that the constraint on variance in PCA is intended to allow us to distinguish each point as effectively as possible in the new lower-dimensional space.
算法
有个$m$维的随机变量$X$,有$n$个数据,那么$X$是个$m\times n $的矩阵。现在要把维度从$m$降到$k$,让这些样本点在降低后的维度上和原来的点一一对应,且点之间尽可能远离
- 把数据中心化:把这$n$个数据算个均值,然后每个数据都减去均值(这一步的目的是快速地算协方差矩阵)
- 算协方差矩阵:中心化后的数据矩阵,自己乘自己,就是协方差矩阵,$\frac{1}{n-1}XX^\intercal$或者$\frac{1}{n}XX^\intercal$
- 这一步是为了求协方差矩阵的特征向量,除以$n$或者$n-1$不影响求特征向量
- 按理说是除以$n-1$,因为是求的样本方差,除以这个是无偏估计(根据Bessel’s correction,求方差时用到了均值,所以得少一个自由度)
- 而且均值是0了,也没有用到均值,所以可以除以$n$
- 求协方差矩阵的特征值和特征向量
- 把特征值最大的那$k$个特征向量最为新的空间的基坐标,然后把原空间投影上去
例子
Generated by ChatGPT 3.5
PCA(主成分分析)的计算步骤如下,我将为你提供一个简化的例子和详细的计算过程:
假设我们有以下二维数据集:
数据点 | x | y |
---|---|---|
A | 1 | 2 |
B | 2 | 3 |
C | 3 | 4 |
D | 4 | 5 |
E | 5 | 6 |
步骤 1:数据中心化 计算每个维度的均值并从每个数据点中减去均值。
\[\mathrm{Mean}(x) = \frac{1 + 2 + 3 + 4 + 5}{5} = 3\] \[\mathrm{Mean}(y) = \frac{2 + 3 + 4 + 5 + 6}{5} = 4\]数据点 | x - Mean(x) | y - Mean(y) |
---|---|---|
A | -2 | -2 |
B | -1 | -1 |
C | 0 | 0 |
D | 1 | 1 |
E | 2 | 2 |
步骤 2:计算协方差矩阵 计算数据的协方差矩阵。协方差矩阵的元素$(i, j)$表示第 $i$ 维和第 $j$ 维之间的协方差。
\[\mathrm{Covariance}(x, x) = \frac{\sum{(x - \mathrm{Mean}(x))^2}}{n-1} = 2.5\] \[\mathrm{Covariance}(y, y) = \frac{\sum{(y - \mathrm{Mean}(y))^2}}{n-1} = 2.5\] \[\mathrm{Covariance}(x, y) = \frac{\sum{(x - \mathrm{Mean}(x))(y - \mathrm{Mean}(y))}}{n-1} = 2.5\]协方差矩阵:
\[\begin{bmatrix} \mathrm{Cov}(x, x) & \mathrm{Cov}(x, y) \\ \mathrm{Cov}(y, x) & \mathrm{Cov}(y, y) \\ \end{bmatrix} = \begin{bmatrix} 2.5 & 2.5 \\ 2.5 & 2.5 \\ \end{bmatrix}\]步骤 3:计算特征向量和特征值 对协方差矩阵进行特征分解,得到特征向量和特征值。
特征方程 $\mathrm{det}(\mathrm{Covariance} - \lambda I) = 0$
特征值:$\lambda_1 = 5$, $\lambda_2 = 0$
对于 $\lambda_1 = 5$,解方程 $\mathrm{Covariance} - \lambda_1 I = 0$,得到特征向量 $v_1 = \begin{bmatrix} 1 \ 1 \end{bmatrix}$。
对于 $\lambda_2 = 0$,解方程 $\mathrm{Covariance} - \lambda_2 I = 0$,得到特征向量 $v_2 = \begin{bmatrix} -1 \ 1 \end{bmatrix}$。
步骤 4:选择主成分 选择特征值最大的特征向量作为主成分。
在这个例子中,选择 $v_1 = \begin{bmatrix} 1 \ 1 \end{bmatrix}$ 作为主成分,因为它对应的特征值 $\lambda_1 = 5$ 最大。
步骤 5:投影 将数据点投影到主成分上。
投影 A: $[1, 2]\cdot [1, 1]^T=3$
投影 B: $[2, 3]\cdot [1, 1]^T = 5$
投影 C: $[3, 4] \cdot [1, 1]^T = 7$
投影 D: $[4, 5] \cdot [1, 1]^T = 9$
投影 E: $[5, 6] \cdot [1, 1]^T = 11$
这样,我们得到了在主成分方向上的投影值,它们可以用于表示降维后的数据。在实际应用中,通常会选择多个主成分来保留更多的数据方差。
我的理解
之所以是求协方差矩阵并让其对角化,把使其对角化的那个正交矩阵拿来对原来的维度进行变化,是因为形式刚刚好一致
首先目的是两个
- 一个是找到新的一组线性无关的维度(从旧的维度作变换得来)
- 要找到个正交单位矩阵$P$,对原来的空间作变化,也就是$P$乘在原来空间的左边
- 不改变原空间的大小(模长和内积),只旋转,所以要找正交单位矩阵
- 一个是这个新的维度要能描述最大的数据之间的方差,保持点之间的距离够大,好区分
数据中心化之后,$\frac{1}{n} XX^\intercal$就是协方差矩阵,因为均值是0
\[\text{Cov}(X, Y) = \frac{\sum_{i=1}^{n} (x_i \cdot y_i)}{n-1} = \frac{\sum_{i=1}^{n} (x_i \cdot y_i)}{n}\]求协方差矩阵的目的是,对角线上是自己的方差,其他是两个的相关性,那么要变换的维度上尽可能无关那是最好的
所以要让协方差对角化,$PX(PX)^\intercal$=新的对角矩阵,可以看成是P对X变换后的新向量的协方差矩阵,那么P就是刚好我要的这个正交单位矩阵了,因为它让X变换后的协方差矩阵是对角的
同时对角化完后又是从大到小排的,大的表示特征向量贡献大的,更多得描述了这个矩阵,那么留$P$前面$k$行就可以降到$k$维了
参考:
主成分分析PCA算法:为什么去均值以后的高维矩阵乘以其协方差矩阵的特征向量矩阵就是“投影”? - 郝熊升的回答 - 知乎