【数学】主成分分析(PCA)的详细深度推导过程

Based on Deep Learning (2017, MIT) book.

本文基于Deep Learning (2017, MIT),推导过程补全了所涉及的知识及书中推导过程中跳跃和省略的部分。
blog

1 概述

现代数据集,如网络索引、高分辨率图像、气象学、实验测量等,通常包含高维特征,高纬度的数据可能不清晰、冗余,甚至具有误导性。数据可视化和解释变量之间的关系很困难,而使用这种高维数据训练的神经网络模型往往容易出现过拟合(维度诅咒)。
主成分分析(PCA)是一种简单而强大的无监督机器学习技术,用于数据降维。它旨在从大型变量集中提取一个较小的数据集,同时尽可能保留原始信息和特征(有损压缩)。PCA有助于识别数据集中最显著和有意义的特征,使数据易于可视化。应用场景包括:统计学、去噪和为机器学习算法预处理数据。

  • 主成分是什么?
    主成分是构建为原始变量的线性组合的新变量。这些新变量是不相关的,并且包含原始数据中大部分的信息。

2 背景数学知识

这些知识对下一节的推导很重要。

  • 正交向量和矩阵:
    • 如果两个向量垂直,则它们是正交的。即两个向量的点积为零。
    • 正交矩阵是一个方阵,其行和列是相互正交的单位向量;每两行和两列的点积为零,每一行和每一列的大小为1。
    • 如果AT=A1AAT=ATA=I,则A是正交矩阵。
    • 在机器人学中,旋转矩阵通常是一个3×3的正交矩阵,在空间变换中它会旋转向量的方向但保持原始向量的大小。
  • 矩阵、向量乘法规则:
    • (AB)T=BTAT,两个矩阵的乘积的转置。
    • aTb=bTa,两个结果都是标量,标量的转置是相同的。
    • (A+B)C=AC+BC,乘法是可分配的。
    • ABBA,乘法一般不满足交换律。
    • A(BC)=(AB)C,乘法满足结合律。
  • 对称矩阵:
    • A=ATA是对称矩阵。
    • XTX是对称矩阵,因为(XTX)T=XTX
  • 向量导数规则(B是常量矩阵):
    • d(xTB)/dx=B
    • d(xTx)/dx=2x
    • d(xTBx)/dx=2Bx
  • 矩阵迹规则:
    • Tr(A)=Tr(AT)
    • Tr(AB)=Tr(BA)
    • Tr(A)=iλi,其中λA的特征值。
    • 迹在循环移位下不变:Tr(ABCD)=Tr(BCDA)=Tr(CDAB)=Tr(DABC)
  • 向量和矩阵范数:
    • 向量的L2范数,也称为欧几里得范数:||x||2=i|xi|2
    • 通常使用平方的L2范数来衡量向量的大小,可以计算为xTx
    • Frobenius范数用于衡量矩阵的大小:||A||F=i,jAi,j2
    • Frobenius范数是所有矩阵元素的绝对平方和的平方根。
    • Frobenius范数是矩阵版本的欧几里得范数。
  • 特征值分解和特征值:
    • 方阵A的特征向量是一个非零向量v,使得A的乘法仅改变v的比例:Av=λvλ是特征值,v是特征向量。
    • 假设矩阵An个线性无关的特征向量v(i),我们可以将所有特征向量连接起来形成一个矩阵V=[v(1),,v(n)],并通过连接所有特征值λ=[λ1,,λn]T形成一个向量,那么A特征分解A=Vdiag(λ)V1
    • 每个实对称矩阵都可以分解为A=QΛQT,其中Q是由A的特征向量组成的正交矩阵,Λ(读作'lambda')是一个对角矩阵。
  • 拉格朗日乘数法:
    • 拉格朗日乘数法是一种在方程约束下寻找函数局部最大值和最小值的策略。
    • 一般形式:L(x,λ)=f(x)+λg(x)λ称为拉格朗日乘子。

3 详细PCA推导

需求描述

我们有m个点的输入数据,表示为x(1),...,x(m)Rn的实数集中。因此,每个点x(i)是一个列向量,具有n维特征。

需要对输入数据进行有损压缩,将这些点编码以表示它们的较低维度版本。换句话说,我们想要找到编码向量c(i)Rl(l<n)来表示每个输入点x(i)。我们的目标是找到产生输入的编码向量的编码函数f(x)=c,以及相应的重构(解码)函数xg(f(x)),根据编码向量c计算原始输入。

解码的g(f(x))是一组新的点(变量),因此它与原始x是近似的。存储c(i)和解码函数比存储x(i)更节省空间,因为c(i)的维度较低。

解码矩阵

我们选择使用矩阵D作为解码矩阵,将编码向量c(i)映射回Rn,因此g(c)=Dc,其中DRn×l。为了简化编码问题,PCA将D的列约束为彼此正交。

衡量重构的表现

在继续之前,我们需要弄清楚如何生成最优的编码点c,我们可以测量输入点x与其重构g(c)之间的距离,使用L2范数(或欧几里得范数):c=argminc||xg(c)||2。由于L2范数是非负的,并且平方操作是单调递增的,所以我们可以转而使用平方的L2范数:

c=argminc||xg(c)||22

向量的L2范数是其分量的平方和,它等于向量与自身的点积,例如||x||2=|xi|2=xTx,因此平方的L2范数可以写成以下形式:

||xg(c)||22=(xg(c))T(xg(c))

由分配率:

=(xTg(c)T)(xg(c))=xTxxTg(c)g(c)Tx+g(c)Tg(c)

由于xTg(c)g(c)Tx是标量,标量等于其转置,(g(c)Tx)T=xTg(c),所以:

=xTx2xTg(c)+g(c)Tg(c)

为了找到使上述函数最小化的c,第一项可以省略,因为它不依赖于c,所以:

c=argminc2xTg(c)+g(c)Tg(c)

然后用g(c)的定义Dc进行替换:

=argminc2xTDc+cTDTDc

由于D的正交性和单位范数约束:

c=argminc2xTDc+cTIlc

=argminc2xTDc+cTc

目标函数

现在目标函数是2xTDc+cTc,我们需要找到c来最小化目标函数。使用向量微积分,并令其导数等于0:

c(2xTDc+cTc)=0

根据向量导数规则:

2DTx+2c=0c=DTx

找到编码矩阵 D

所以编码器函数是 f(x)=DTx。因此我们可以定义 PCA 重构操作为 r(x)=g(f(x))=D(DTx)=DDTx

因此编码矩阵 D 也被重构过程使用。我们需要找到最优的 D 来最小化重构误差,即输入和重构之间所有维度特征的距离。这里使用 Frobenius 范数(矩阵范数)定义目标函数:

D=argminDi,j(xj(i)r(xi)j)2,DTD=Il

从考虑 l=1 的情况开始(这也是第一个主成分),D 是一个单一向量 d,并使用平方 L2 范数形式:

d=argmindi||(x(i)r(xi))||22,||d||2=1

=argmindi||(x(i)ddTx(i))||22,||d||2=1

dTx(i) 是一个标量:

=argmindi||(x(i)dTx(i)d)||22,||d||2=1

标量等于其自身的转置:

d=argmindi||(x(i)x(i)Tdd)||22,||d||2=1

使用矩阵形式表示

XRm×n 表示所有描述点的向量堆叠,即 {x(1)T,x(2)T,,x(i)T,,x(m)T},使得 Xi,:=x(i)T

X=[x(1)Tx(2)Tx(m)T]Xd=[x(1)Tdx(2)Tdx(m)Td]

XddT=[x(1)TddTx(2)TddTx(m)TddT]

XXddT=[x(1)Tx(1)TddTx(2)Tx(2)TddTx(m)Tx(m)TddT]

矩阵中的一行的转置:

(x(i)Tx(i)TddT)T=x(i)ddTx(i)

由于 dTx(i) 是标量:

=x(i)dTx(i)d=x(i)x(i)Tdd

所以我们知道 X 的第 i 行的 L2 范数与原始形式相同,因此我们可以使用矩阵重写问题,并省略求和符号:

d=argmind||XXddT||F2,dTd=1

利用矩阵迹规则简化 Frobenius 范数部分如下:

argmind||XXddT||F2

=argmindTr((XXddT)T(XXddT))

=argmindTr(XTXddT)Tr(ddTXTX)+Tr(ddTXTXddT)

=argmind2Tr(XTXddT)+Tr(XTXddTddT)

由于 dTd=1

=argmind2Tr(XTXddT)+Tr(XTXddT)

=argmindTr(XTXddT)

=argmaxdTr(XTXddT)

由于迹是循环置换不变的,将方程重写为:

d=argmaxdTr(dTXTXd),dTd=1

由于 dTXTXd 是实数,因此迹符号可以省略:

d=argmaxddTXTXd,dTd=1

寻找最优的 d

现在的问题是找到最优的 d 来最大化 dTXTXd,并且有约束条件 dTd=1

使用拉格朗日乘子法来将问题描述为关于 d 的形式:

L(d,λ)=dTXTXd+λ(dTd1)

d 求导数(向量导数规则):

dL(d,λ)=2XTXd+2λd

令导数等于0,d 将是最优的:

2XTXd+2λd=0

XTXd=λd

XTXd=λd,(λ=λ)

这个方程是典型的矩阵特征值分解形式,d 是矩阵 XTX 的特征向量,λ 是对应的特征值。

利用上述结果,让我们重新审视原方程:

d=argmaxddTXTXd,dTd=1

=argmaxddTλd

=argmaxdλdTd

=argmaxdλ

现在问题已经变的非常清楚了,XTX 的最大特征值会最大化原方程的结果,因此最优的 d 是矩阵 XTX 对应最大特征值的特征向量。

这个推导是针对 l=1 的情况,只包含第一个主成分。当 l>1 时,D=[d1,d2,],第一个主成分 d1 是矩阵 XTX 对应最大特征值的特征向量,第二个主成分 d2 是对应第二大特征值的特征向量,以此类推。


4 总结

我们有一个数据集,包含 m 个点,记为 x(1),...,x(m)
XRm×n 为将所有这些点堆叠而成的矩阵:[x(1)T,x(2)T,,x(i)T,,x(m)T]

主成分分析(PCA)编码函数表示为 f(x)=DTx,重构函数表示为 xg(c)=Dc,其中 D=[d1,d2,] 的列是 XTX 的特征向量,特征向量对应的特征值大小为降序排列。DTx即是降维度之后的数据。

posted @   MengWoods  阅读(1246)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 为DeepSeek添加本地知识库
· 精选4款基于.NET开源、功能强大的通讯调试工具
· DeepSeek智能编程
· [翻译] 为什么 Tracebit 用 C# 开发
· 腾讯ima接入deepseek-r1,借用别人脑子用用成真了~
点击右上角即可分享
微信分享提示