PCA 原理推导

server/2024/11/17 0:14:25/

针对高维数据的降维问题,PCA 的基本思路如下:首先将需要降维的数据的各个变量标准化(规范化)为均值为 0,方差为 1 的数据集,然后对标准化后的数据进行正交变换,将原来的数据转换为若干个线性无关向量表示的新数据:这些新向量表示的数据不仅要求相互线性无关,而且需要所包含的信息量最大。PCA 的一个示例如图 18-1 所示。
图 18-1 <a class=PCA 示例" />
  图 18-1 中,左图是一组由变量 x 1 x_1 x1 x 2 x_2 x2 表示的二维空间,数据分布于图中椭圆形区域内,能够看到,变量 x 1 x_1 x1 x 2 x_2 x2 存在一定的相关关系;右图是对数据进行正交变换后的数据坐标系中,向变量 y 1 y_1 y1 y 2 y_2 y2 表示。为了使得变换后的信息量最大,PCA 使用方差最大的方向作为新坐标系的第一坐标轴 y 1 y_1 y1,方差第二大的作为第二坐标轴 y 2 y_2 y2

PCA 使用方差衡量新变量的信息量大小,按照方差大小排序依次为第一主成分、第二主成分、⋯⋯,下面对 PCA 原理进行简单推导。

假设原始数据为 m 维随机变量 x = ( x 1 , x 2 , ⋯ , x m ) ⊤ x = (x_1, x_2, \cdots, x_m)^\top x=(x1,x2,,xm),其均值向量 μ = E ( x ) = ( μ 1 , μ 2 , ⋯ , μ m ) ⊤ \mu = E(x) = (\mu_1, \mu_2, \cdots, \mu_m)^\top μ=E(x)=(μ1,μ2,,μm),协方差矩阵为:

Σ = cov ⁡ ( x , x ) = E [ ( x − μ ) ( x − μ ) ⊤ ] (18-1) \Sigma = \operatorname{cov}(x, x) = E \left[ (x - \mu)(x - \mu)^\top \right] \tag{18-1} Σ=cov(x,x)=E[(xμ)(xμ)](18-1)

由 m 维随机变量 x x x 到 m 维随机变量 y = ( y 1 , y 2 , ⋯ , y m ) ⊤ y = (y_1, y_2, \cdots, y_m)^\top y=(y1,y2,,ym) 的线性变换:

y i = a i ⊤ x = a i 1 x 1 + a i 2 x 2 + ⋯ + a i m x m (18-2) y_i = a_i^\top x = a_{i1} x_1 + a_{i2} x_2 + \cdots + a_{im} x_m \tag{18-2} yi=aix=ai1x1+ai2x2++aimxm(18-2)

其中 a i ⊤ = ( a i 1 , a i 2 , ⋯ , a i m ) a_i^\top = (a_{i1}, a_{i2}, \cdots, a_{im}) ai=(ai1,ai2,,aim)

经线性变换后的随机变量 y i y_i yi 的均值、方差和协方差统计量可以表示为:

E ( y i ) = a i ⊤ μ , i = 1 , 2 , ⋯ , m (18-3) E(y_i) = a_i^\top \mu, \quad i = 1, 2, \cdots, m \tag{18-3} E(yi)=aiμ,i=1,2,,m(18-3)

var ⁡ ( y i ) = a i ⊤ Σ a i , i = 1 , 2 , ⋯ , m (18-4) \operatorname{var}(y_i) = a_i^\top \Sigma a_i, \quad i = 1, 2, \cdots, m \tag{18-4} var(yi)=aiΣai,i=1,2,,m(18-4)

cov ⁡ ( y i , y j ) = a i ⊤ Σ a j , i , j = 1 , 2 , ⋯ , m (18-5) \operatorname{cov}(y_i, y_j) = a_i^\top \Sigma a_j, \quad i, j = 1, 2, \cdots, m \tag{18-5} cov(yi,yj)=aiΣaj,i,j=1,2,,m(18-5)

当随机变量 x x x 到随机变量 y y y 的线性变换满足如下条件时,变换后的 y 1 , y 2 , ⋯ , y m y_1, y_2, \cdots, y_m y1,y2,,ym 分别为随机变量 x x x 的第一主成分、第二主成分、⋯⋯、第 m 主成分。

  1. 线性变换的系数向量 a i a_i ai 为单位向量,有 a i ⊤ a i = 1 , i = 1 , 2 , ⋯ , m a_i^\top a_i = 1, \ i = 1, 2, \cdots, m aiai=1, i=1,2,,m
  2. 线性变换后的变量 y i y_i yi y j y_j yj 线性无关,即 cov ⁡ ( y i , y j ) = 0 ( i ≠ j ) \operatorname{cov}(y_i, y_j) = 0(i \neq j) cov(yi,yj)=0(i=j)
  3. 变量 y i y_i yi 是随机变量 x x x 所有线性变换中方差最大的, y 2 y_2 y2 是与 y 1 y_1 y1 无关的所有线性变换中方差最大的。

上述三个条件给出了求解主成分的基本方法。根据优化目标和约束条件,我们可以使用拉格朗日乘子法来求解主成分。下面以第一主成分为例进行求解推导。第一主成分的优化问题的数学表达为:

max ⁡ a 1 ⊤ Σ a 1 (18-6) \max \quad a_1^\top \Sigma a_1 \tag{18-6} maxa1Σa1(18-6)

s . t . a 1 ⊤ a 1 = 1 (18-7) s.t. \quad a_1^\top a_1 = 1 \tag{18-7} s.t.a1a1=1(18-7)

定义拉格朗日目标函数如下:

L = a 1 ⊤ Σ a 1 − λ ( a 1 ⊤ a 1 − 1 ) (18-8) L = a_1^\top \Sigma a_1 - \lambda (a_1^\top a_1 - 1) \tag{18-8} L=a1Σa1λ(a1a11)(18-8)

将式 (18-8) 的拉格朗日函数对 a 1 a_1 a1 求导并令其为 0,有:

∂ L ∂ a 1 = Σ a 1 − λ a 1 = 0 (18-9) \frac{\partial L}{\partial a_1} = \Sigma a_1 - \lambda a_1 = 0 \tag{18-9} a1L=Σa1λa1=0(18-9)

根据矩阵特征值与特征向量的关系,由式 (18-9) 可知 λ \lambda λ Σ \Sigma Σ 的特征值, a 1 a_1 a1 为对应的单位特征向量。假设 a 1 a_1 a1 Σ \Sigma Σ 的最大特征值 λ 1 \lambda_1 λ1 对应的单位特征向量,那么 a 1 a_1 a1 λ 1 \lambda_1 λ1 均为上述优化问题的最优解。所以 a 1 T x a_1^Tx a1Tx 为第一主成分,其方差为对应协方差矩阵的最大特征值:

var ⁡ ( a 1 ⊤ x ) = a 1 ⊤ Σ a 1 = λ 1 (18-10) \operatorname{var}(a_1^\top x) = a_1^\top \Sigma a_1 = \lambda_1 \tag{18-10} var(a1x)=a1Σa1=λ1(18-10)

这样,第一主成分的推导就完成了。同样的方法可用来求解第 k 主成分,第 k 主成分的方差的特征值为:

var ⁡ ( a k ⊤ x ) = a k ⊤ Σ a k = λ k , k = 1 , 2 , ⋯ , m (18-11) \operatorname{var}(a_k^\top x) = a_k^\top \Sigma a_k = \lambda_k, \quad k = 1, 2, \cdots, m \tag{18-11} var(akx)=akΣak=λk,k=1,2,,m(18-11)

最后,梳理一下 PCA 的计算流程:

  1. 对 m 行 n 列的数据 X 先按照均值为 0,方差为 1 进行标准化处理;
  2. 计算标准化后的 X 的协方差矩阵 C = 1 n X X ⊤ C = \frac{1}{n} XX^\top C=n1XX
  3. 计算协方差矩阵 C C C 的特征值和对应的特征向量;
  4. 将特征向量按照对应的特征值大小排序组成矩阵,取前 k 行构成的矩阵 P P P
  5. 计算 Y = P X Y = PX Y=PX 即可得到经过 PCA 降维后的 k 维数据。

http://www.ppmy.cn/server/142504.html

相关文章

JavaWeb笔记整理——Spring Task、WebSocket

目录 SpringTask ​cron表达式 WebSocket SpringTask cron表达式 WebSocket

刘铁猛C#入门 024 类的声明,继承和访问控制

类声明的全貌 C#声明类的位置 声明既定义(C#与Java) 类的修饰符 最简单的类声明 类的访间控制 &#xff1a;默认internal 共性 public 和 internal 都是访问修饰符&#xff0c;用于定义一个类型的成员可以被谁访问。它们都可以用来声明类、结构、接口、枚举、字段、方法、…

webpack案例----pdd(anti-content)

本文章中所有内容仅供学习交流&#xff0c;相关链接做了脱敏处理&#xff0c;若有侵权&#xff0c;请联系我立即删除&#xff01; 目标网址&#xff1a;aHR0cHM6Ly9waW5kdW9kdW8uY29tL2hvbWUvM2M 加密参数&#xff1a;anti_content 载荷里面的rn是不变的 发现加密是anti-con…

二分搜索的三种方法

首先总的说一下二分搜索。如果区间具有二分性&#xff0c;这个二分性不仅仅是指区间是有序的&#xff0c;而是我们可以通过某一种性质将整个区间分成左区间和右区间。我们通过二分的方法去不断缩小查找的区间&#xff0c;最终让区间内没有元素&#xff0c;这个时候的我们就得到…

SNN学习(2):深入了解SNN及LIF神经元的原理和运行过程

目录 一、STDP机制 1、STDP 的基本原理 权重调整的“时间差依赖性” 2、STDP 的数学模型 二、SNN的应用场景 三、从人工神经网络ANN到脉冲神经网络SNN 1、脉冲 2、稀疏性&#xff08;Sparsity&#xff09; 3、事件驱动处理&#xff08;静态抑制&#xff09; 四、脉冲…

【电脑】解决DiskGenius调整分区大小时报错“文件使用的簇被标记为空闲或与其它文件有交叉”

【电脑】解决DiskGenius调整分区大小时报错“文件使用的簇被标记为空闲或与其它文件有交叉” 零、报错 在使用DiskGenius对磁盘分区进行调整时&#xff0c;DiskGenius检查出磁盘报错&#xff0c;报错信息&#xff1a;文件使用的簇被标记为空闲或与其它文件有交叉&#xff0c;…

Python爬虫项目 | 一、网易云音乐热歌榜歌曲

文章目录 1.文章概要1.1 实现方法1.2 实现代码1.3 最终效果 2.具体讲解2.1 使用的Python库2.2 代码说明2.2.1 创建目录保存文件2.2.2 爬取网易云音乐热歌榜单歌曲 2.3 过程展示 3 总结 1.文章概要 学习Python爬虫知识&#xff0c;实现简单的一个小案例&#xff0c;网易云音乐热…

QInputDialog显示硕士的解决

QInputDialog 弹出卡死的原因可能有多种&#xff0c;这通常与事件循环或线程有关。以下是一些可能的解决方法&#xff1a; 确保在主线程调用对话框&#xff1a; QInputDialog 应该在主线程&#xff08;UI线程&#xff09;中运行。如果在其他线程中直接调用它&#xff0c;可能…