当前位置: 首页 > news >正文

【降维】PCA

PCA

文章目录

  • PCA
    • 1. 算法介绍
    • 2. 公式及原理
    • 3. 伪代码

1. 算法介绍

  • 背景与目标
    主成分分析(PCA)最早由 Karl Pearson 在1901年提出,是一种无监督的线性降维方法。它的核心目标是:

    在保留数据总方差(信息量)尽可能多的前提下,将高维数据投影到低维空间。

  • 应用场景

    • 降维与可视化:将高维样本映射到2D/3D以便可视化
    • 去噪:去除小方差方向上的噪声
    • 特征压缩:在训练机器学习模型前减少输入维度,提升效率
    • 数据预处理:常用作后续分类、聚类等算法的输入
  • 核心思路

    1. 数据中心化(Zero-mean)——去除均值后,保证后续方差统计不受偏移影响;
    2. 协方差矩阵SVD分解——捕捉变量之间的线性相关结构;
    3. 特征向量(主成分方向)对应最大方差方向;
    4. 投影——将原始数据投影到前 k k k 个主成分,完成降维。

2. 公式及原理

2.1 方差最大化视角

  • 寻找一个单位向量 w \mathbf{w} w,使得投影后的一维变量 y i = w ⊤ x i y_i = \mathbf{w}^\top \mathbf{x}_i yi=wxi 具有最大方差:

    max ⁡ ∥ w ∥ = 1 V a r ( y ) = max ⁡ ∥ w ∥ = 1 1 n ∑ i = 1 n ( w ⊤ x i − y ‾ ) 2 = max ⁡ ∥ w ∥ = 1 w ⊤ C w \max_{\|\mathbf{w}\|=1} \quad \mathrm{Var}(y) = \max_{\|\mathbf{w}\|=1} \frac{1}{n}\sum_{i=1}^n (\mathbf{w}^\top \mathbf{x}_i - \overline{y})^2 = \max_{\|\mathbf{w}\|=1} \mathbf{w}^\top \mathbf{C}\,\mathbf{w} w=1maxVar(y)=w=1maxn1i=1n(wxiy)2=w=1maxwCw

    其中 C \mathbf{C} C 是样本协方差矩阵。

  • 引入拉格朗日乘子 λ \lambda λ,解

    L ( w , λ ) = w ⊤ C w − λ ( w ⊤ w − 1 ) , \mathcal{L}(\mathbf{w},\lambda) = \mathbf{w}^\top \mathbf{C}\,\mathbf{w} - \lambda(\mathbf{w}^\top \mathbf{w}-1), L(w,λ)=wCwλ(ww1),

    w \mathbf{w} w 求导并令梯度为零,得到

    C w = λ w , \mathbf{C}\,\mathbf{w} = \lambda\,\mathbf{w}, Cw=λw,

    即标准的特征值问题。最大方差对应最大特征值 λ 1 \lambda_1 λ1 及其特征向量 v 1 \mathbf{v}_1 v1

2.2 协方差矩阵构造

  1. 原始数据矩阵 X \mathbf{X} X n × d n\times d n×d,每行一个样本。

  2. 样本均值:

    μ = 1 n ∑ i = 1 n x i ( d -维向量 ) \boldsymbol{\mu} = \frac{1}{n}\sum_{i=1}^n \mathbf{x}_i \quad (d\text{-维向量}) μ=n1i=1nxi(d-维向量)

  3. 中心化数据:

    X c = X − 1 μ ⊤ \mathbf{X}_{\mathrm{c}} = \mathbf{X} - \mathbf{1}\,\boldsymbol{\mu}^\top Xc=X1μ

  4. 协方差矩阵:

    C = 1 n − 1 X c ⊤ X c ( d × d ) \mathbf{C} = \frac{1}{n-1}\,\mathbf{X}_{\mathrm{c}}^\top\,\mathbf{X}_{\mathrm{c}} \quad (d\times d) C=n11XcXc(d×d)

2.3 特征分解与降维

  • C \mathbf{C} C 做特征值分解:

    C = V Λ V ⊤ , Λ = d i a g ( λ 1 , … , λ d ) , λ 1 ≥ λ 2 ≥ ⋯ ≥ λ d . \mathbf{C} = \mathbf{V}\,\boldsymbol{\Lambda}\,\mathbf{V}^\top, \quad \boldsymbol{\Lambda} = \mathrm{diag}(\lambda_1,\dots,\lambda_d), \quad \lambda_1 \ge \lambda_2 \ge \dots \ge \lambda_d. C=VΛV,Λ=diag(λ1,,λd),λ1λ2λd.

  • 取前 k k k 个特征向量组成矩阵
    V k = [ v 1 , … , v k ] \mathbf{V}_k = [\mathbf{v}_1,\dots,\mathbf{v}_k] Vk=[v1,,vk](维度 d × k d\times k d×k)。

  • 投影得到低维表示:

    Z = X c V k ( n × k ) \mathbf{Z} = \mathbf{X}_{\mathrm{c}}\,\mathbf{V}_k \quad (n\times k) Z=XcVk(n×k)

2.4 SVD 视角(可选)

  • 对中心化矩阵 X c \mathbf{X}_{\mathrm{c}} Xc 做奇异值分解:

    X c = U Σ V ⊤ , \mathbf{X}_{\mathrm{c}} = \mathbf{U}\,\boldsymbol{\Sigma}\,\mathbf{V}^\top, Xc=UΣV,

    C = 1 n − 1 V Σ 2 V ⊤ \mathbf{C} = \frac{1}{n-1}\,\mathbf{V}\,\boldsymbol{\Sigma}^2\,\mathbf{V}^\top C=n11VΣ2V,奇异值平方与特征值对应, V \mathbf{V} V 的前 k k k 列即主成分方向。


3. 伪代码

# 输入
#   X: 原始数据矩阵,形状 (n, d)
#   k: 降维后目标维度(k ≤ d)
# 输出
#   Z: 降维后数据,形状 (n, k)
#   V_k: 主成分方向矩阵,形状 (d, k)function PCA(X, k):# 1) 计算样本均值μ ← (1/n) * sum_rows(X)             # μ: (d,)# 2) 数据中心化X_c ← X − repeat_row_vector(μ, n)  # X_c: (n, d)# 3) 计算协方差矩阵C ← (1/(n−1)) * X_cᵀ × X_c         # C: (d, d)# 4) 特征值分解(Λ, V) ← eigendecompose(C)         # Λ: (d,), V: (d, d)#    Λ 按从大到小排序,V 列向量对应特征向量# 5) 取前 k 个特征向量V_k ← V[:, 0:k]                    # V_k: (d, k)# 6) 数据投影Z ← X_c × V_k                      # Z: (n, k)return Z, V_k
  • 时间复杂度

    • 协方差矩阵构造: O ( n d 2 ) O(nd^2) O(nd2)
    • 特征分解: O ( d 3 ) O(d^3) O(d3)(当 d d d 很大时可用 SVD + 随机投影等近似方法加速)
  • 内存注意

    • d ≫ n d\gg n dn,更倾向于直接对 X c X_c Xc 做 SVD,以节省构造 d × d d\times d d×d 矩阵的内存。

相关文章:

  • Captiks无线惯性动捕及步态分析系统:高频采样+400g超宽动态量程,赋能医疗康复、竞技体育、工业检测三大领域,运动轨迹零盲区追踪!”
  • 如何利用Redis实现延迟队列?
  • Windows系统部署MongoDB数据库图文教程
  • String的一些固定程序函数
  • Cadence Allegro安装教程及指导
  • vector(c++)
  • img.dims() <= 2 in function ‘cv::matchTemplate报错
  • OpenAI新发布Codex的全面解析
  • OpenCV 光流估计:从原理到实战
  • JS逆向-某易云音乐下载器
  • OpenCL C++ 常见属性与函数
  • VASP+机器学习快速收敛AIMD
  • 慢速降落字母html
  • 微机电子拉伸试验机
  • 内容安全:使用开源框架Caffe实现上传图片进行敏感内容识别
  • 环形缓冲区 ring buffer 概述
  • 自定义库模块增加自定义许可操作详细方法
  • 通义千问-langchain使用构建(三)
  • 毛泽东(井冈山)词三篇
  • Buildroot 移植MiniGUI: 编写简单示例(基于君正X2000)
  • 15年全免费,内蒙古准格尔旗实现幼儿园到高中0学费
  • 从良渚到三星堆:一江水串起了5000年的文明对话
  • 上海市第二十届青少年科技节启动:为期半年,推出百余项活动
  • 国际金价下跌,中概股多数上涨,穆迪下调美国主权信用评级
  • 张巍任中共河南省委副书记
  • 一图读懂丨创新创业人才最高补贴500万元!临港新片区发布创客新政“十二条”