【笔记】PCA——主成分分析:推导与问题

发布时间 2023-03-22 21:16:21作者: GhostCai

PCA:主成分分析

主要思想

假设有m个n维数据,我希望只保留k维,尽可能减少信息损失,也就是(m,n)到(m,k)的过程

比如一个实际应用场景,我有一堆w latent code,也就是(n,512)的数据

通过PCA可以得到(n,2)的数据,这就是n个二维点,可以画在平面上

推导

我们希望在n维空间里找到一个k维的超平面,目标是每个点到超平面的距离最近

首先对m个n维数据做中心化,也就是减去平均值,之后的数据就满足

\[\sum_{i=1}^{m} x^{(i)} = 0 \]

假设经过投影的新坐标系由\(\{w_1,w_2,\cdots,w_n\}\)这n个标准正交基构成(两两正交,模长为1)

我们希望将这n个坐标基删去一些,只留k个

那么每个点在新坐标系里的投影就是

\[z^{(i)} = (z_1^{(i)},z_2^{(i)},\cdots,z_n^{(i)}) ^T \]

其中每个分量就是

\[z_{j}^{(i)} = w_{j}^{T} x^{(i)} \]

那么如果要从这个投影恢复原始数据,可以表示为

\[\hat x^{(i)} = \sum_{j=1}^{k} z_{j}^{(i)} w_{j} \]

矩阵表示就是

\[\hat x^{(i)} = Wz^{(i)} \]

我们希望恢复出来的损失尽量小,那就是要最小化这个函数

\[\sum_{i=1}^{m} ||x^{(i)} - \hat x^{(i)}||_2^2 \]

也就是

\[\sum_{i=1}^{m}|| Wz^{(i)} - x^{(i)}||_2^2 \]

首先展开平方

\[\sum_{i} (Wz^{(i)})^T(Wz^{(i)}) - 2 \sum_{i} (Wz^{(i)})^{T}x^{(i)} + \sum_{i} (x^{(i)})^Tx^{(u)} \]

转置放进去

\[\sum_{i} (z^{(i)})^TW^TWz^{(i)} - 2 \sum_{i} (z^{(i)})^TW^Tx^{(i)} + \sum_{i} (x^{(i)})^Tx^{(u)} \]

由于\(W^TW=I\),也就化简为

\[\sum_{i} (z^{(i)})^Tz^{(i)} - 2 \sum_{i} (z^{(i)})^TW^Tx^{(i)} + \sum_{i} (x^{(i)})^Tx^{(u)} \]

由于\(z^{(i)} = W^T x^{(i)}\),可以进一步写为

\[\sum_{i} (z^{(i)})^Tz^{(i)} - 2 \sum_{i} (z^{(i)})^Tz^{(i)} + \sum_{i} (x^{(i)})^Tx^{(u)} \]

合并一下

\[- \sum_{i} (z^{(i)})^Tz^{(i)} + \sum_{i} (x^{(i)})^Tx^{(u)} \]

后面的部分是常数,所以只需要最小化

\[- \sum_{i} (z^{(i)})^Tz^{(i)} \]

写成矩阵形式就是

\[\arg \min -tr(W^TXX^TW) \]

其中限制是\(W^TW = I\)

显然最小值由\(XX^T\)最大的k个特征值对应的特征向量组成

那么这就是我们需要的新坐标轴了

重要问题

PCA出来的轴天然正交,这是好的一点

PCA要求数据满足高斯分布,否则结果会旋转、拉伸,这是不好的一点

如果在W Space做,得到的latent code模长不对,这个问题仍需进一步探索