主成分分析(PCA,Principle Component Analysis)

PCA 算法公式推导

最近一直在B站上看一个UP主的机器学习白板推导,感觉很有益处,因为之前看过的各种博客似乎都一直强调对EM算法的感性认识,缺少了很多的推导过程。我想,要完全理性地了解这个算法,还是要一步一步地通过推导。

主要参考资料:白板推导视频
台大李宏毅机器学习课程

简述

PCA是一个无监督的降维算法。它要做的事情其实很简单,就是在空间中找多个正交的维度,使得空间中的数据落在这些维度上后尽可能保留最原始的信息。它所遵从的原则是“最大投影方差”和“最小平方误差”(也可以成为最小重构代价)。

在真正认识到PCA后,我甚至觉得它根本算不上什么高深的东西,仅仅就是线性代数上很基础的东西,放到机器学习的课程里,突然就变得高大上了(笑)。

如视频主所说,学习PCA要把握一个中心,两个基本点:
一个中心是指 原始特征空间的重构,从有关向无关(垂直)重构。
两个基本点是指 最大投影方差和最小重构代价这两个求解思路。

用最大投影方差来求PCA

为什么最大投影方差能够保留最多的信息其实一目了然。它还有一个作用是可以忽略掉最后所求向量的法线方向上的误差。所以在机器学习中,预处理加上降维不仅可以加快训练速度,而且很大可能反而使得最终准确率增加。

设空间中的数据为 x 1 , x 2 ⋯ x n x_1,x_2\cdots x_n x1,x2xn,注意数据点本身是一个多维的变量(或者成为向量)。
第一步是求出数据中心点 x ˉ \bar{x} xˉ,再每个数据减去中心点。

第二步是找出一个方向,使得在这个方向上投影的方差最大。在这一步中因为我们要求的仅仅是一个方向,所以可以设这个方向是一个单位向量 u u u。即满足
∣ ∣ u ∣ ∣ = u T u = 1 ||u||=u^Tu=1 u=uTu=1

在这个方向上的投影为 ( x i − x ˉ ) ⋅ u (x_i-\bar{x})\cdot u (xixˉ)u
J = 1 n ∑ i = 1 n ( ( x i − x ˉ ) ⋅ u ) 2 = 1 n ∑ i = 1 n u T ( x i − x ˉ ) T ( x i − x ˉ ) u = ∑ i = 1 n u T S u \begin{aligned} J&=\frac{1}{n}\sum_{i=1}^n((x_i-\bar{x})\cdot u)^2 \\ &=\frac{1}{n}\sum_{i=1}^n u^T(x_i-\bar{x})^T(x_i-\bar{x})u \\ &=\sum_{i=1}^n u^TSu \end{aligned} J=n1i=1n((xixˉ)u)2=n1i=1nuT(xixˉ)T(xixˉ)u=i=1nuTSu

其中S表示 1 n ( x i − x ˉ ) T ( x i − x ˉ ) \frac{1}{n}(x_i-\bar{x})^T(x_i-\bar{x}) n1(xixˉ)T(xixˉ)

于是PCA求解成为了一个优化问题:
object funtion: u = arg max ⁡ u u T S u u=\argmax_{u} u^TSu u=uargmaxuTSu
subject to: u T u = 1 u^Tu=1 uTu=1

这个约束问题很简单,直接用拉格朗日乘数法就可以解得。
S u = λ u Su=\lambda u Su=λu

所以所要寻找的第一主成分方向就是 u u u,即是S的特征向量(eigenvector),其中的 λ \lambda λ即是S的最大的特征值(eigenvalue)。

找到第一主成分后可以类似地找到第二主成分,也就是第二大的特征值对应的特征向量……

用最小重构代价

这个要略显复杂一点
J = 1 n ∑ i = 1 n ∥ x i − x ^ i ∥ 2 = 1 n ∑ i = 1 n ∥ ∑ k = 1 n ( x i T w k ) u k ∥ 2 = 1 n ∑ i = 1 n ∑ k = 1 p ( x i T u k ) 2 = ∑ i = 1 n 1 n ∑ k = 1 1 ( ( x i − x ˉ ) T u k ) 2 = ∑ k = 1 k ∑ i = 1 n 1 n ( ( x i − x ) T u k ) 2 = ∑ k = 1 n u k ⊤ ⋅ S ⋅ u k \begin{aligned} J &=\frac{1}{n} \sum_{i=1}^{n}\left\|x_{i}-\hat{x}_{i}\right\|^{2} \\ &=\frac{1}{n} \sum_{i=1}^{n}\left\|\sum_{k=1}^{n}\left(x_{i}^{T} w_{k}\right) u_{k}\right\|^{2} \\ &=\frac{1}{n} \sum_{i=1}^{n} \sum_{k=1}^{p}\left(x_{i}^{T} u_{k}\right)^{2} \\ &=\sum_{i=1}^{n} \frac{1}{n} \sum_{k=1}^{1}\left(\left(x_{i}-\bar{x}\right)^{T} u_{k}\right)^{2} \\ &=\sum_{k=1}^{k} \sum_{i=1}^{n} \frac{1}{n}\left(\left(x_{i}-x\right)^{T} u_{k}\right)^{2} \\ &=\sum_{k=1}^{n} u_{k}^{\top} \cdot S \cdot u_{k} \end{aligned} J=n1i=1nxix^i2=n1i=1nk=1n(xiTwk)uk2=n1i=1nk=1p(xiTuk)2=i=1nn1k=11((xixˉ)Tuk)2=k=1ki=1nn1((xix)Tuk)2=k=1nukSuk

最后可以得到相同的结果。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值