一些线性代数知识点#
我们可以把 PCA 想象成一个寻找最佳观察角度的过程。
TIP想象给一个长条形的橄榄球拍照:
主要思想是寻找到数据的主轴方向:方差最大的方向,由主轴构成一个新的坐标系(维数可以比原维数低),然后数据由原坐标系向新的坐标系投影。
方差 (Variance)#
在统计学中,方差衡量的是一组数据的离散程度。数学公式: Var(X)=n−11∑i=1n(xi−xˉ)2
⽆偏还是有偏⽆所谓,因为特征值/奇异值⼤⼩关系不变
方差越大,代表数据在这个方向上“铺得越开”。在降维时,我们最怕把原本分得很开的点压到一起(丢失区分度)。PCA 的第一目标就是寻找方差最大的方向,因为那里保留了最原始、最丰富的信息。
协方差 (Covariance)#
方差看一个维度,协方差看两个维度之间的“互动”。
如果 X 变大时 Y 也变大,协方差为正;反之为负;如果不相关,则接近 0。
PCA 中的直觉: 如果身高和体重的协方差很高,说明它们携带了大量重复信息。
协方差矩阵 (Covariance Matrix) 是一个表,记录了所有维度两两之间的相关性。PCA 的任务就是通过这个矩阵,找出哪些维度是冗余的,并把它们合并成互不相关的“新轴”。
Σ=n1XTX 是数据的协方差矩阵。
-
协方差矩阵 Σ 是一个 d×d 的实对称矩阵
-
对角线元素 Σii:第 i 个维度的方差。
-
非对角线元素 Σij:维度 i 与维度 j 的相关性。
TIPPCA 的本质就是通过线性变换,将 Σ 变成对角矩阵(消除维度间的相关性),并取对角线上最大的值(保留最大方差)。
特征值与特征向量#
对于协方差矩阵 Σ:
Σv=λv特征向量 v (Direction): 当协方差矩阵作用于向量 v 时,它只伸缩,不旋转。这意味着 v 指向的是数据分布中最自然、最核心的轴线。
在 PCA 中,这些向量就是我们寻找的“主成分方向”。特征值 λ (Magnitude): 它代表了数据在对应的特征向量方向上的离散程度(即方差的大小)。λ 越大,说明这个方向越重要。
数学推导#
假设我们有 n 个样本 x1,x2,…,xn,每个样本有 d 维特征,组成数据矩阵 X∈Rn×d(已进行中心化处理,即每一列均值为 0)。
核心目标:投影后方差最大化#
我们的目标是找到一个单位投影方向向量 w (∥w∥=1),使得投影后的数据方差最大。
对于每个样本 xi,投影后的坐标为:zi=xiTw
投影后的方差为:
Var(Z)=n1i=1∑n(xiTw)2=n1(wTXTXw)=wTΣw拉格朗日乘子法求解#
我们要最大化 f(w)=wTΣw,约束条件为 wTw=1。引入拉格朗日乘子 λ:
L(w,λ)=wTΣw+λ(1−wTw)对 w 求导并令其为 0:
∂w∂L=2Σw−2λw=0从而得到:
Σw=λw结果正是特征值分解的定义式:
Var(Z)=wT(Σw)=wT(λw)=λ∥w∥2=λ为了降维,只需将特征值从大到小排序,取前 k 个特征向量构成投影矩阵即可(等价于对协方差矩阵做特征值分解(EVD),或对数据矩阵做奇异值分解(SVD),后者数值稳定性更好)。
算法流程 (The Pipeline)#
-
预处理:数据中心化 , 减去均值 X←X−μ。
-
算矩阵:计算协方差矩阵(有的地方叫散度矩阵) Σ=n1XTX。
-
求特征:求解 Σ 的特征值 λj 和对应的特征向量 vj。
-
选主成分:将 λj 从大到小排列,取前 k 个对应的特征向量构成投影矩阵:(依据累计方差贡献率/方差解释率)
W=[v1,v2,…,vk]。
-
训练和识别时,对于每个样本 x(对于批量的矩阵,只需要把x换成矩阵即可),将其投影到新空间:
- 投影: z=WTx
- 重构(可选): x^=Wz
算法的评价策略:方差解释率#
原始数据的协方差矩阵 Σ,维度为 d×d。总方差就是该矩阵主对角线元素之和,也就是协方差矩阵的 迹 (Trace):
tr(Σ)=i=1∑dσii2其中 σii2 是 Σ 的对角线元素。是原始坐标系中第 i 个维度的方差。
结合线代中迹的两个性质:
-
迹等于特征值之和:tr(Σ)=∑i=1dλi,其中 λi 是 Σ 的特征值。
i=1∑dλi=数据总方差=tr(Σ)
-
相似变换不改变迹:PCA 的核心步骤是对协方差矩阵 Σ 进行特征值分解(相似变换),得到一个对角矩阵 Λ,其中对角线元素就是特征值 λi。
tr(Σ)=tr(Λ)=i=1∑dλi
数据的总能量(总方差)在旋转坐标轴的过程中并没有消失,只是被重新分配了。
第 i 个主成分的方差解释率:
Ratioi=∑j=1dλjλi累计方差解释率:如果保留前 k 个主成分,那么:
Cumulative_Ratio=∑j=1dλj∑i=1kλi通常以此设置一个阈值(比如 95%),来决定保留多少个主成分。
它是如何评价维数的?#
方差解释率是降维时的决策准则(决定砍掉多少维)
例如处理一个 10 维的数据,算完 PCA 后,发现各维度的解释率如下:
-
PC1: 75%
-
PC2: 15%
-
PC3: 5%…
其余 7 维加起来才 5%
发现光是前两个轴(PC1 + PC2)就解释了 90% 的方差。这意味着如果把数据从 10 维压缩到 2 维,只损失了 10% 的“次要细节”,但换来了计算速度的大幅提升和数据的可视化(2D 图表谁都能看懂)。
两个用途:选择与去噪#
-
确定 k 值:不需要盲目猜测降到几维,而是设定一个阈值(比如 95%),然后让程序自动选择能达到这个比例的最少维数。
-
去噪:最后那几个方差解释率极低的维度,通常被认为是噪声。砍掉它们不仅是降维,更是提纯。