PCA是一种经典的降维方法,采用组合特征的方法来进行降维。
PCA方法的目的是寻找在最小均方意义下最能够代表原始数据的投影方法。
假设有 n n n个 d d d维的样本 x 1 , x 2 , . . . x n x_1, x_2,...x_n x1,x2,...xn,考虑用一个 d d d维向量 x 0 x_0 x0,代表这 n n n个样本,
使其与各个样本的平方距离之和最小。即
min { ∑ k = 1 n ∣ ∣ x 0 − x k ∣ ∣ 2 } \min\{\sum\limits_{k=1}^n||x_0-x_k||^2\} min{k=1∑n∣∣x0−xk∣∣2}
可以很容易的知道 x 0 x_0 x0向量是样本的均值
样本均值是样本数据的零维表达,但是不能反映样本之间的不同。我们考虑将
全部样本向通过样本均值的向量的一条直线作投影。即用 m ⃗ + a k e ⃗ \vec{m} + a_k \vec e m+ake表示 x k x_k xk
m ⃗ , e ⃗ \vec m , \vec e m,e分别为样本均值和通过样本均值的单位向量
为了尽量减小 m ⃗ + a k e ⃗ \vec{m} +a_k \vec e m+ake 和 x ⃗ k \vec x_k xk 之间的误差。我们必须最小化平方差之后,即
J 1 ( a 1 , . . . , a n , e ⃗ ) = ∑ k = 1 n ∣ ∣ ( m ⃗ + a k e ⃗ ) − x k ⃗ ∣ ∣ J_1(a_1,...,a_n,\vec e) = \sum\limits_{k=1}^{n}||(\vec m+a_k \vec e)-\vec {x_k}|| J1(a1,...,an,e)=k=1∑n∣∣(m+ake)−xk∣∣
m i n J 1 ( a 1 , . . . , a n , e ⃗ ) minJ_1(a_1,...,a_n,\vec e) minJ1(a1,...,an,e)
通过计算得出 a k = e ⃗ t ( x k ⃗ − m ⃗ ) a_k=\vec{e}^t(\vec{x_k}-\vec m) ak=et(xk−m),即只需要把向量 x k ⃗ \vec{x_k} xk向通过样本均值的直线 e ⃗ \vec e e作
垂直投影就能够得到最小方差结果
那么如何找到直线 e ⃗ \vec e e的最优方向
首先介绍散布矩阵 S ⃗ = ∑ k = 1 n ( x k ⃗ − m ⃗ ) ( x k ⃗ − m ⃗ ) t \vec S = \sum\limits_{k=1}^n(\vec{x_k}-\vec m)(\vec{x_k}-\vec m)^t S=k=1∑n(xk−m)(xk−m)t
这是协方差矩阵的 n − 1 n-1 n−1倍
把 a k = e ⃗ t ( x k ⃗ − m ⃗ ) a_k=\vec{e}^t(\vec{x_k}-\vec m) ak=et(xk−m)带入 J 1 ( a 1 , . . . , a n , e ⃗ ) J_1(a_1,...,a_n,\vec {e}) J1(a1,...,an,e)得到
J 1 ( e ⃗ ) = ∑ k = 1 n a k 2 − 2 ∑ k = 1 n a k 2 + ∑ k = 1 n ∣ ∣ x k ⃗ − m ⃗ ∣ ∣ 2 = − ∑ k = 1 n e ⃗ t ( x k ⃗ − m ⃗ ) ( x k ⃗ − m ⃗ ) t e ⃗ + ∑ k = 1 n ∣ ∣ x k ⃗ − m ⃗ ∣ ∣ 2 = − e ⃗ S ⃗ e ⃗ + ∑ k = 1 n ∣ ∣ x k ⃗ − m ⃗ ∣ ∣ J_1(\vec e)=\sum\limits_{k=1}^{n}a_k^2-2\sum\limits_{k=1}^{n}a_k^2+\sum\limits_{k=1}^n||\vec{x_k}-\vec m||^2 \\ = -\sum\limits_{k=1}^{n}\vec e^t(\vec {x_k} - \vec m)(\vec {x_k} - \vec m)^t\vec e+\sum\limits_{k=1}^{n}||\vec{x_k}-\vec m||^2 \\ = -\vec e \vec S\vec e+\sum\limits_{k=1}^{n}||\vec {x_k}-\vec m|| J1(e)=k=1∑nak2−2k=1∑nak2+k=1∑n∣∣xk−m∣∣2=−k=1∑net(xk−m)(xk−m)te+k=1∑n∣∣xk−m∣∣2=−eSe+k=1∑n∣∣xk−m∣∣
第二项是常量,我们只要最小化第一项,即 m a x { e ⃗ S ⃗ e ⃗ } max\{\vec e \vec S\vec e\} max{eSe}
约束条件 ∣ ∣ e ⃗ ∣ ∣ ||\vec e|| ∣∣e∣∣ = 1, 拉格朗日乘子法: u = e ⃗ t S ⃗ e ⃗ − λ ( e ⃗ e ⃗ t − 1 ) u=\vec e ^t \vec S \vec e - \lambda(\vec e\vec e^t-1) u=etSe−λ(eet−1)
对 e ⃗ \vec e e求偏导,得到 ∂ u ∂ e ⃗ = 2 S ⃗ e ⃗ − 2 λ e ⃗ \frac {\partial u}{\partial \vec e}=2\vec S\vec e-2\lambda\vec e ∂e∂u=2Se−2λe
可以得到 S ⃗ e ⃗ = λ e ⃗ \vec S \vec e=\lambda\vec e Se=λe,还有就是 e ⃗ t S ⃗ e ⃗ = λ e ⃗ t e ⃗ = λ \vec e ^t \vec S \vec e = \lambda\vec e ^t\vec e=\lambda etSe=λete=λ
所以可以知道 λ \lambda λ和 e ⃗ \vec e e分别为 S ⃗ \vec S S的特征值以及特征值对应的特征向量
S ⃗ \vec S S的最大的特征值是问题的最优解
可以将其从一维空间推广到 d ′ d^{'} d′空间去。
即
x ⃗ = m ⃗ + ∑ i = 1 d ′ a i e ⃗ i J d ′ = ∑ k = 1 n ∣ ∣ ( m ⃗ + ∑ m = 1 d ′ a k i e ⃗ i ) − x k ⃗ ∣ ∣ \vec x = \vec m + \sum\limits_{i=1}^{d^{'}}a_i \vec e_i \\ J_{d^{'}}=\sum_{k=1}^{n}||(\vec m+\sum\limits_{m=1}^{d'}a_{ki} \vec e_i)-\vec {x_k}|| x=m+i=1∑d′aieiJd′=k=1∑n∣∣(m+m=1∑d′akiei)−xk∣∣
在向量 e 1 ⃗ , e 2 ⃗ , . . . e d ′ ⃗ \vec {e_1}, \vec {e_2}, ... \vec{e_{d'}} e1,e2,...ed′分别为散布矩阵的 d ′ d^{'} d′个最大特征值所对应的特征向量时,取得最小值。
其中 a i a_i ai系数就是向量 x ⃗ \vec x x对应于基 e i ⃗ \vec {e_i} ei的系数,被称作主成分。
从几何上说,样本点 x 1 , x 2 , . . . x n x_1, x_2, ...x_n x1,x2,...xn在d维空间内形成了一个 d d d维的椭圆状云团,散布矩阵
的特征向量时这个云团的主轴。主成分分析通过提取云团散布最大的那些方向的方法
达到了对特征空间进行降维的目的。
到底应该选取多少个特征向量呢?即原特征空间应该降维多少维合适
选取特征值前98%,即
λ 1 + λ 2 + . . . λ d ′ ∑ k = 1 d λ k ≥ 0.98 \frac{\lambda_1+\lambda_2+...\lambda_{d'}}{\sum\limits_{k=1}^{d}\lambda_k}\geq 0.98 k=1∑dλkλ1+λ2+...λd′≥0.98