机器学习(十二)——主成分分析(PCA)

12.主成分分析(PCA)

PCA主要是去除相关联特征中的噪声,从而使得关联特征数量转化为同一平面(直线),从而达到降纬的目的。也就是寻找数据变更主轴。

应用:

  • 可视化
  • 压缩数据
  • 提高机器学习速度
  • 减少过拟合
  • 异常检测
  • 距离计算

例如我们有一个关于飞行员水平数据集,其中一个特征代表飞行员对飞行的热情,另一个特征代表飞行员飞行水平。这两个特征很可能是线性相关的,但是由于数据中存在噪声的影响导致这两个特征的关联性看起来不强。如下图所示。
机器学习(十二)——主成分分析(PCA)
u1u_1方向代表数据的主方向,在u2u_2方向代表数据的噪声。我们需要的就是将数据映射到主方向u1u_1上,这样便将二维数据转化为一维上的数据,从而达到了降维的目的。

在运行PCA之前我们还需要对数据进行一些处理:如下所示:

  1. μ=1mi=1mx(i)\mu=\frac 1m\sum_{i=1}^m x^{(i)}
  2. 将每个 x(i)x^{(i)} 替换成 x(i)μx^{(i)} - \mu
  3. σj2=1mi(xj(i))2\sigma_j^2=\frac 1m\sum_{i} (x_j^{(i)})^2
  4. 将每个 xj(i)x_j^{(i)} 替换成 xj(i)/σjx_j^{(i)}/\sigma_j.

(12)(1-2)步把数据的平均值清零,然后可以省略掉所有有零均值的数据(例如,对应语音或者其他声学信号的时间序列)。第(34)(3-4)步将每个坐标缩放,使之具有单位方差,这确保了不同的属性都在同样的“尺度”上来进行处理。例如,如果 x1x_1 是汽车的最大速度(以 mph 为单位,精确到十位),然后 x2x_2 是汽车的座位数量(取值一般在 2-4),这样这个重新正则化就把不同的属性进行了缩放,然后这些不同属性就更具有对比性。如果我们事先已经知道不同的属性在同一尺度上,就可以省略第(34)(3-4)步。例如,如果每个数据点表示灰度图像中的每个数据点,而每个 xj(i)x_j^{(i)} 就从 {0,1,...,255}\{0, 1, . . . , 255\} 中取值,对应的也就是在图像 ii 中像素 jj 位置的灰度值。

下面我们开始寻找方向u1u_1,我们如何去寻找呢?在信息论中,信号和噪声的方差是不同的,噪声的方差偏小,信号之间的方差偏大。所以我们应该尽可能的去保证数据在投影之后的方差尽可能的大,从而保证了信息的完整性。我们知道:

假设样本为向量xx,方向单位向量为uu,两向量之间的夹角为θ\theta,所以将xx投影到uu上的向量uu'ucosθu\cdot cos\theta,则uu'的模长为u=xu|u'|=x\cdot u.由于之前样本数据都减去了均值,所以投影后的均值依旧为0。于是我们可以得出方差为:
1mi=1m(x(i)Tu)2=1mi=1muTx(i)x(i)Tu=uT(1mi=1mx(i)x(i)T)u \begin{aligned} \frac 1m\sum_{i=1}^m (x^{(i)T}u)^2 &= \frac 1m\sum_{i=1}^m u^Tx^{(i)}x^{(i)T}u \\ &= u^T(\frac 1m\sum_{i=1}^m x^{(i)}x^{(i)T})u \end{aligned}
也就是我们要将以上的式子最大化。需要注意的是:需要满足约束u2=1||u||_2 = 1等价于uTu=1u^T u = 1.所以这是一个规划问题,我们可以用拉个朗日乘数法求解这个最大值。

同时如果我们将上式子写作如下形式:uTΣu=λu^T \Sigma u=\lambda,因为uTu=1u^T u = 1 ,所以转化为Σu=λu\Sigma u = \lambda u(两边同乘uTu^T).也就是说向量 uuΣ\Sigma 的特征向量,特征值为 λ\lambda

如果假设求出的特征向量(单位向量、正交基)是u1,...,uku_1, . . ., u_k,则x(i)x^{(i)}可映射为:
y(i)=[u1Tx(i)u2Tx(i)ukTx(i)]Rk y^{(i)}=\begin{bmatrix} u_1^T x^{(i)}\\ u_2^T x^{(i)}\\ \vdots\\ u_k^T x^{(i)} \end{bmatrix} \in R^k
因此,x(i)Rnx^{(i)} \in R^n,向量 y(i)y^{(i)}就是对 x(i)x^{(i)} 的近似表示。

SVD(奇异值分解)

通过上面的说明我们可以知道,Σ=1mi=1mx(i)x(i)T\Sigma=\frac 1m\sum_{i=1}^m x^{(i)}x^{(i)T},所以我们不妨改写为:

首先令XX:
X=[x(1)Tx(2)Tx(m)T] X=\begin{bmatrix} —&{x^{(1)}}^T&—\\ —&{x^{(2)}}^T&—\\ &\vdots&\\ —&{x^{(m)}}^T&—\\ \end{bmatrix}
Σ\Sigma:
Σ=[x(1)x(2)x(m)][x(1)Tx(2)Tx(m)T]=XTX \Sigma=\begin{bmatrix} |&|&&|\\ x^{(1)}&x^{(2)}&\cdots&x^{(m)}\\ |&|&&| \end{bmatrix} \begin{bmatrix} —&{x^{(1)}}^T&—\\ —&{x^{(2)}}^T&—\\ &\vdots&\\ —&{x^{(m)}}^T&—\\ \end{bmatrix}=X^TX

SVD

假设有矩阵XRm×nX \in \mathbb R^{m\times n}(mm是样本数,nn是特征数),则矩阵可以写成
X=UΣVT X=UΣV^T
其中URm×m,ΣRm×n,VRm×nU \in \mathbb R^{m\times m}, Σ\in \mathbb R^{m\times n} ,V\in \mathbb R^{m\times n}(注意这里的ΣΣ和上面的不相关)。U和V都是正交基方阵,即满足UTU=I,VTV=IU^TU=I,V^TV=I,ΣΣ是除了主对角线上的元素以外全为0,主对角线上的每个元素都称为奇异值。

我们可以发现:
XTX=VΣTUTUΣVT=VΣ2VT X^TX=VΣ^TU^TUΣV^T=VΣ^2V^T
可以看出XTXX^TX的特征向量组成矩阵VV,同理XXTXX^T的特征向量组成了矩阵UU

一般我们将右侧VV的特征向量称为右奇异向量,左侧UU的特征向量称为左奇异向量。

我们可以得到:
(ATA)vi=λivi(AAT)ui=λiui (A^TA)v_i=λ_iv_i\\ (AA^T)u_i=λ_iu_i
所以可以推出:
A=UΣVTAV=UΣVTVAV=UΣAvi=σiui \begin{aligned} A&=UΣV^T\\ AV&=UΣV^TV\\ AV&=UΣ\\ Av_i&=σ_iu_i \end{aligned}
得到σiui=Aviσ_iu_i=Av_i之后便可求出σiσ_i(等式的左右都是成比例的列向量)

由于
XTX=VΣ2VT X^TX=VΣ^2V^T
所以可以知道
σi=λi σ_i=\sqrt{λ_i}
所以我们可以通过求奇异值的方法来求PCA中矩阵的特征,降低计算量。

小结:

概率估计算法 非概率算法
子空间 因子分析法 PCA降维
数据在团块中 混合高斯 K-means