PCA算法是什么
一种降维压缩算法,通过对表示数据的矩阵的eigenvector的重要性的排序,将不要的维度剔除的算法。
问题构建
- 我们有一组数据集 D = { x ( 1 ) , x ( 2 ) . . . . x ( N ) } ⊂ R D D = \{x^{(1)},x^{(2)}....x^{(N)}\} \subset \mathbb{R}^D D={x(1),x(2)....x(N)}⊂RD
- 设置 μ \mu μ 为这组数据的均值,i.e μ = 1 N ∑ i = 1 N x ( i ) \mu = \frac{1}{N}\sum_{i=1}^{N} x^{(i)} μ=N1∑i=1Nx(i)
- 目标:找到一个K维的subspace(子空间) S ⊂ R D \mathcal{S} \subset \mathbb{R}^{D} S⊂RD,使得 x n − μ x^{n}-\mu xn−μ, 即 x n x^n xn与 μ \mu μ的差,可以被很好的被其到S这个子空间的projection表示出来 。
数学公式
- 使 { u k } k = 1 K \{u_k\}^K_{k=1} {uk}k=1K 做为子空间S的orthonormal basis。注意这里每一个u只需要互相垂直就行了,不一定是(1,0,0,0,0),(0,0,0,0,1)这种。有几维,就有几列,行数为D的维度N。
- 我们尝试对新的
x
^
\hat{x}
x^进行估计:
x ^ = μ + P r o j S ( x − μ ) \hat{x} = \mu + Proj_S(x-\mu) x^=μ+ProjS(x−μ)
= μ + ∑ k K z k u k =\mu+\sum_k^K z_{k}u_{k} =μ+k∑Kzkuk
这里, zk是x和其均值 μ \mu μ的差值投射到subspace S中的样子
z k = u k T ( x − μ ) z_k = u^{T}_{k}(x-\mu) zk=ukT(x−μ)
同时,也就是说,我们又通过U*Z对其进行了又一次运算,使这个差值回到D维
x
^
=
μ
+
U
∗
Z
\hat{x} = \mu + U*Z
x^=μ+U∗Z
注意原本
x
=
μ
+
(
x
−
μ
)
x = \mu + (x-\mu)
x=μ+(x−μ)
我们需要找到一个U,使得
U
∗
Z
−
(
x
−
μ
)
U*Z - (x - \mu)
U∗Z−(x−μ)的值最小,即argmin操作,那么我们就可以将x-u在K维中表示出来,并在需要时通过U的运算,使之回到D维。
图片来自 csc411 university of toronto
- 如果这个U∗Z−(x−μ)的值很小,那么我们就可以在D维上对其进行模拟了,使得模型运算的空间和时间复杂度降低。
- PCA是一种Representation learning的方法,可以用于整个数据集降到一个更容易操作和可视化的维度。
如何学习子空间
- 目标: 找到一个D*K的矩阵,每一列的vector之间都互相垂直
- 选择标准:
- 使得 reconstruction error最小
- 使得code vector z的 方差最大,求法是在每一维上求variance
-
这两个标准是都可以得到我们想要的结果,本质是相同的,以下是证明:
-
我们想要证明:
1 N ∑ i = 1 N ∣ ∣ x i − x ^ i ∣ ∣ = c o n s t − 1 N ∑ i N ∣ ∣ z i ∣ ∣ 2 \frac{1}{N}\sum_{i=1}^N\ ||x^i - \hat{x}^{i}|| = const - \frac{1}{N} \sum_i^N ||z^i||^2 N1i=1∑N ∣∣xi−x^i∣∣=const−N1i∑N∣∣zi∣∣2 -
因为U是一个basis,每一列互相垂直且 ||U|| = 1, 因此
∣ ∣ x ^ − μ ∣ ∣ = ∣ ∣ U z i ∣ ∣ = ∣ ∣ z i ∣ ∣ ||\hat{x}-\mu|| = ||Uz^i|| = ||z^i|| ∣∣x^−μ∣∣=∣∣Uzi∣∣=∣∣zi∣∣
-
根据勾股定理,我们得到下图。因此,两个标准是等同的。
- 协方差公式
我们知道协方差矩阵是 symmetric以及positive semidefinite
- 最好的subspace是被k个最好的 eigenvector作为basis的。
- 其多维的推导是一个很复杂的过程,只做一维K=1的推导, u是某一维度的单位向量
- 我们得到
其中 a = Q T u a = Q^Tu a=QTu
最后我们尝试