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

本文深入浅出地解析了PCA(主成分分析)的数学原理,通过一个简单的二维数据集示例,逐步展示了如何通过计算特征值和特征向量实现数据降维。PCA是一种常用的数据分析方法,特别适用于高维数据的预处理,能够有效地减少数据的复杂度,提高后续机器学习模型的效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

例子

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

在这里插入图片描述
为了更方便的理解, 我们这样解释这个图片。 我们有一个数据集, 这个集合中包含了三个点,而这三个点均依赖于 x 和 y。现在这些点都在一个二维的平面上, 在数学上,这句话的意思指的是, 存在一组基, 我们记为 v1v_1v1v2v_2v2, 这三个点的坐标可以用 这组基的线性组合来表示。 例如,
v1=(1,0)v2=(0,1)x1=(1,1)=1×v1+1×v2x2=(2,2)=2×v1+2×v2x3=(3,3)=3×v1+3×v2v_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_2v1=(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=12(1,1)u = \frac{1}{\sqrt{2}}\big( 1,1 \big)u=21(1,1)
那么,我们将会有如下结果:
x1=2ux2=22ux3=32ux_1 = \sqrt{2} u\\ x_2 = 2\sqrt{2} u \\ x_3 = 3\sqrt{2} ux1=2ux2=22ux3=32u
现在我们只需要一个基,就完整的表示了这三个点。

PCA

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

例子

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

  1. 这三个点的坐标是给定的,分别是(1,1)(1,1)(1,1), (2,2)(2,2)(2,2)(3,3)(3,3)(3,3), 我们这里将其表示成一个3×23 \times 23×2的矩阵, 我们同是写出它的转置ATA^TAT
    A=[112233]           AT=[123123]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. 分别计算 AATAA^TAATATAA^TAATA
    AAT=[246481261218]       ATA=[14141414] 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。(这里我直接计算了AATAA^TAAT 的特征值,因为这两个矩阵的非零特征值都是一样的,之后会做进一步解释。)
  4. 分别算出他们的特征向量,并写成矩阵形式。
    对于AATAA^TAAT,其特征向量组成的矩阵为:
    U=[114102140131400]U = \begin{bmatrix} \frac{1}{\sqrt{14}} & 1 & 0 \\ \frac{2}{\sqrt{14}} & 0& 1 \\ \frac{3}{\sqrt{14}} & 0& 0 \end{bmatrix}U=141142143100010
    对于ATAA^TAATA,其特征向量组成的矩阵为:
    V=[121212−12]V = \begin{bmatrix} \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}} & - \frac{1}{\sqrt{2}}\end{bmatrix}V=[21212121]
  5. 我们得到了原矩阵A分解:
    A=UΣVA = U \Sigma VA=UΣV
    其中:
    Σ=[2800000]\Sigma = \begin{bmatrix} \sqrt{28} & 0 \\ 0& 0 \\ 0 &0\end{bmatrix}Σ=2800000
    这里可以自己验算下。
  6. 我们计算 UΣU\SigmaUΣ,得到:
    UΣ=[20220320]U\Sigma = \begin{bmatrix} \sqrt{2}& 0\\ 2\sqrt{2} & 0 \\ 3\sqrt{2} & 0 \end{bmatrix}UΣ=22232000
  7. 由此,我们得到了之前的结果, 这三个点可以只用一个基向量表示, 即矩阵V的第一列。 在这种表示下, 其坐标为UΣU\SigmaUΣ

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

几何解释

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值