机器学习笔记6 PCA以及SVD背后的数学原理

例子

在这篇文章中,我们将会侧重于了解PCA(主成分分析)背后的数学原理。由于涉及到一些线性代数的知识,我决定先从最简单的一个例子说起。 我们先看下面这一张图:

在这里插入图片描述
为了更方便的理解, 我们这样解释这个图片。 我们有一个数据集, 这个集合中包含了三个点,而这三个点均依赖于 x 和 y。现在这些点都在一个二维的平面上, 在数学上,这句话的意思指的是, 存在一组基, 我们记为 v 1 v_1 v1 v 2 v_2 v2, 这三个点的坐标可以用 这组基的线性组合来表示。 例如,
v 1 = ( 1 , 0 ) v 2 = ( 0 , 1 ) x 1 = ( 1 , 1 ) = 1 × v 1 + 1 × v 2 x 2 = ( 2 , 2 ) = 2 × v 1 + 2 × v 2 x 3 = ( 3 , 3 ) = 3 × v 1 + 3 × v 2 v_1 = (1,0)\\ v_2 = (0,1)\\ x_1 = (1,1) = 1 \times v_1 + 1 \times v_2\\ x_2 = (2,2) = 2 \times v_1 + 2 \times v_2\\ x_3 = (3,3) = 3 \times v_1 + 3 \times v_2 v1=(1,0)v2=(0,1)x1=(1,1)=1×v1+1×v2x2=(2,2)=2×v1+2×v2x3=(3,3)=3×v1+3×v2
这里我们使用了两个基向量。
但是,我们很直观地看出,这三个点实际上都分布在同一条直线上面, 这意味着,我们仅仅需要一个基向量便可以表示出这三个点。例如,我们使用如下基向量:
u = 1 2 ( 1 , 1 ) u = \frac{1}{\sqrt{2}}\big( 1,1 \big) u=2 1(1,1)
那么,我们将会有如下结果:
x 1 = 2 u x 2 = 2 2 u x 3 = 3 2 u x_1 = \sqrt{2} u\\ x_2 = 2\sqrt{2} u \\ x_3 = 3\sqrt{2} u x1=2 ux2=22 ux3=32 u
现在我们只需要一个基,就完整的表示了这三个点。

PCA

这个例子实际上就是一个简单的PCA, 重点在于,我们将维度往下降了1。 在实际的问题中,我们往往有很多的数据,例如房价数据,这些数据可能有十万个,而每个数据只依赖于二十个因素, 那么我们就理解成,我们把这十万个点放到了一个二十一维的空间中。 但问题是:我们真的需要这二十一个维度么?
那么PCA将有可能帮助我们把维度降下来,每降一个维度,所带来的计算速度增益是非常可观的。

例子

我们回到例子中, 因为这个例子很简单,我们已经知道了答案。但数学上是怎么算出来的呢? 我们现在就开始计算这个例子。(在这个小节中,我们不去计较其背后的数学原理,就是单纯的计算。)

  1. 这三个点的坐标是给定的,分别是 ( 1 , 1 ) (1,1) (1,1), ( 2 , 2 ) (2,2) (2,2) ( 3 , 3 ) (3,3) (3,3), 我们这里将其表示成一个 3 × 2 3 \times 2 3×2的矩阵, 我们同是写出它的转置 A T A^T AT
    A = [ 1 1 2 2 3 3 ]             A T = [ 1 2 3 1 2 3 ] A = \begin{bmatrix} 1& 1 \\ 2& 2 \\ 3 &3\end{bmatrix} ~~~~~~~~~~~ A^T = \begin{bmatrix} 1& 2 & 3 \\ 1& 2 & 3 \end{bmatrix} A=123123           AT=[112233]
  2. 分别计算 A A T AA^T AAT A T A A^TA ATA
    A A T = [ 2 4 6 4 8 12 6 12 18 ]         A T A = [ 14 14 14 14 ] AA^T = \begin{bmatrix} 2& 4&6 \\ 4& 8 & 12 \\ 6 &12&18\end{bmatrix} ~~~~~~~ A^TA = \begin{bmatrix} 14& 14 \\ 14& 14\end{bmatrix} AAT=246481261218       ATA=[14141414]
  3. 分别计算他们的特征值: λ 1 = 28 \lambda_1 = 28 λ1=28, λ 2 = λ 3 = 0 \lambda_2 = \lambda_3 = 0 λ2=λ3=0。(这里我直接计算了 A A T AA^T AAT 的特征值,因为这两个矩阵的非零特征值都是一样的,之后会做进一步解释。)
  4. 分别算出他们的特征向量,并写成矩阵形式。
    对于 A A T AA^T AAT,其特征向量组成的矩阵为:
    U = [ 1 14 1 0 2 14 0 1 3 14 0 0 ] U = \begin{bmatrix} \frac{1}{\sqrt{14}} & 1 & 0 \\ \frac{2}{\sqrt{14}} & 0& 1 \\ \frac{3}{\sqrt{14}} & 0& 0 \end{bmatrix} U=14 114 214 3100010
    对于 A T A A^TA ATA,其特征向量组成的矩阵为:
    V = [ 1 2 1 2 1 2 − 1 2 ] V = \begin{bmatrix} \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}} & - \frac{1}{\sqrt{2}}\end{bmatrix} V=[2 12 12 12 1]
  5. 我们得到了原矩阵A分解:
    A = U Σ V A = U \Sigma V A=UΣV
    其中:
    Σ = [ 28 0 0 0 0 0 ] \Sigma = \begin{bmatrix} \sqrt{28} & 0 \\ 0& 0 \\ 0 &0\end{bmatrix} Σ=28 00000
    这里可以自己验算下。
  6. 我们计算 U Σ U\Sigma UΣ,得到:
    U Σ = [ 2 0 2 2 0 3 2 0 ] U\Sigma = \begin{bmatrix} \sqrt{2}& 0\\ 2\sqrt{2} & 0 \\ 3\sqrt{2} & 0 \end{bmatrix} UΣ=2 22 32 000
  7. 由此,我们得到了之前的结果, 这三个点可以只用一个基向量表示, 即矩阵V的第一列。 在这种表示下, 其坐标为 U Σ U\Sigma UΣ

由此我们完整的计算了一次PCA的过程。 这个算法叫做SVD, 即奇异值分解。

几何解释

PCA 本质上是一种降维的过程, 我们通过对原坐标轴系统进行旋转, 如果数据集可以做降维,则这些数据会分布在一个低维的平面上,而我们就可以利用这个平面的基来表示我们的数据。
在之前的例子中,我们本质上是将整个xy坐标顺时针旋转了45度。

数学解释
  1. 在这一步中,我们的点是在一个标准的直角坐标系中,其坐标表示就是点的坐标。
  2. 这里我们需要介绍几个数学定理。
  • 定理1: 若A 是一个 m × n m \times n m×n的矩阵,则 A A T AA^T AAT 会是一个实对称的 m × m m \times m m×m矩阵。 同理, A T A A^TA ATA 会是一个实对称的 n × n n \times n n×n矩阵。
    这里的证明就是简单地一句话, 略过。
  • 定理2:若A是一个 实对称的 m × m m \times m m×m矩阵, 则A 可以对角化。
    这个定理会是整个PCA的核心,对角化这三个字包含了以下事实:
    我们将会得到 m个特征值(重数不一定为1), 由这m个特征值,我们可以得到m个线性无关的特征向量, 便可以对角化这个矩阵。
    这个定理的证明 也不是很难。 我在这里给出一个较简单的证明:
    根据Jordan分解定理,我们假设 A 无法被对角化,即存在一个特征值 λ \lambda λ,存在一个不为0的向量v, 我们有:
    ( A − λ I ) v ≠ 0 ( A − λ I ) 2 v = 0 (A - \lambda I)v \neq 0\\ (A - \lambda I)^2v = 0 (AλI)v̸=0(AλI)2v=0
    由于A 是一个实对称矩阵, 我们得到:
    ( A − λ I ) 2 v = ( A − λ I ) ( A − λ I ) v = ( A − λ I ) T ( A − λ I ) v = 0 (A - \lambda I)^2v = (A - \lambda I) (A - \lambda I) v = (A - \lambda I) ^T(A - \lambda I) v = 0 (AλI)2v=(AλI)(AλI)v=(AλI)T(AλI)v=0
    但是:
    v T ( A − λ I ) T ( A − λ I ) v = 0 v^T (A - \lambda I) ^T(A - \lambda I) v = 0 vT(AλI)T(AλI)v=0
    意味着:
    ( A − λ I ) v = 0 (A - \lambda I) v = 0 (AλI)v=0
    与假设矛盾。 证毕。
  1. 在这一步中,我们计算了特征值, 但我其实省去了一个事实: A A T AA^T AAT A T A A^TA ATA 将会共享所有的非零特征值。这个证明也是很简单的,我们一开始的假设是 A 是一个 m × n m \times n m×n 的矩阵,这并不是一个方阵,但我们可以直接填充成一个 n × n n \times n n×n 的方阵(取决于哪一个维度更大)。 用0填充矩阵之后,并不影响我们的计算,因此这两个矩阵将会共享所有非零特征值。
  2. 剩下的步骤都仅仅是单纯的计算了。
实际应用

至此,我们介绍了整个PCA 的背景知识。 在实际的应用中,我们需要设置一个阈值, 例如 σ = 0.1 \sigma = 0.1 σ=0.1。 当非零特征值小于这个阈值的时候,触发PCA机制,进行降维。
例如我们用之前的例子, 将x2 替换为 (1.9, 2.1), 这时,这三个点并不会处在一条直线上,但是我们可以近似地使用PCA。 因为在这个时候,特征值为:28.006 以及 0.0143, 其中一个特征值远小于我们的阈值, 则我们将其替换成0, 则维度下降1,。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值