PCA主成分分析 从零理解

一、PCA的目的

假设我们有一堆观测到的数据。
数据的格式是observation*feature,每一行是一个观测(也就是图里的一个点),每一列是这个数据的某个特征(即一个维度)。
假设数据矩阵是A,有m个观测和n个特征。那么我们的数据 A ∈ R m × n A \in \R^{m \times n} ARm×n
举例1:每一行是一个人类,每列分别是身高、体重等等。
举例2:每一行是一个细胞,每列是某一个基因。
数据在以特征张成的空间(每个维度都是一个特征的空间)中符合某种分布。
我们可以给这个数据画一个图(假设只有两个特征):
请添加图片描述
那么,PCA的目的就是,在空间里找到某一组正交基(一组PC),使得我们能够在更少的维度下,保留尽可能多的数据内的信息。

二、PCA的作用

大家可能或多或少听过,"PCA的作用是降维“。它降维的方法就是找到一组正交基,使得序号在前的基(也就是PC)包含更多的信息,然后选取前x个基,从而保留尽可能多信息(即损失尽可能少的信息)。
比如我们有1000张同样大小(200×200像素)的图片,那么把每张图片用一个向量表示(向量长度40000,前200个值是图片的第一行,200-400是图片的第二行,以此类推),再把每个向量/图片作为一行,每个像素点的值作为一列,就可以得到一个1000*40000的矩阵。
如果我们想把这些图片进行压缩,就可以对这个矩阵进行PCA,得到一组正交基;然后选取这些正交基的前n个,这样就得到了压缩过的1000张图片(1000×n)。
那么,PCA是如何实现的呢?实现的思路是什么?

三、PCA的思路

  1. 假设我们想把数据降维到1维。也就是把数据投影到一个方向上,使得数据在这个方向上保留的信息最多。
    如何体现”信息多“?可以有两种理解方法:
    ① 损失的信息少,也就是所有点到这个方向上的投影距离之和最小。
    projection error
    Image credit: [1]
    为了使投影距离之和最小,投影到的这条线一定是过数据的中心点的(就是mean点)。
    所以在做后续操作之前,我们需要把数据中心化,也就是 A = A − m e a n ( A ) A=A-mean(A) A=Amean(A)
    ② 保留的信息多。也就是当每个点投影到当前维度之后,所有投影点的方差最大。
    (为什么方差大就代表信息多?需要从方差的计算来思考。)
    V a r i a n c e = ∑ ( x i − x ˉ ) 2 m − 1 Variance =\frac{\sum\left(x_i-\bar{x}\right)^2}{m-1} Variance=m1(xixˉ)2,方差正比于所有点到均值点的距离平方和。
    这两种方法其实是等价的。
    请添加图片描述
    如上图,红线是投影目标向量,p是当前点的投影距离,d是投影点到中心点的距离,r是当前点到中心点的距离。
    我们把投影目标向量绕中心点旋转,r不变,有: r 2 = p 2 + d 2 r^2=p^2+d^2 r2=p2+d2。因此,最大化距离和最小化方差是在做同一个事情。
  2. 假设我们已经确定了降维到的前x维的方向,需要确定第x+1维的方向。
    那么首先,我们找到的方向必须和之前的x维正交。因为如果不正交,那么两个方向向量之间是有一部分”重复信息“的,会导致新的这个方向能够引入的新信息变少。
    其次,我们希望这个新方向在排除之前的维度所包含的信息之后,仍然包含最多信息的。(也就是投影距离最大,方差最小)
    以此类推,找到最多n个方向。

四、PCA的实现

了解了PCA的思路之后,我们就可以考虑怎么实现了。
目前常用的实现方式有两种:①基于协方差矩阵的,和②基于特征值分解(SVD)的。
先说方法:
①基于协方差矩阵
先求出A的协方差矩阵,然后对协方差矩阵进行特征值分解,得到的特征向量和特征值就是想要的PC及其对应的variance。
②基于特征值分解
对A进行特征值分解 A = U Σ V T A=U\Sigma V^T A=UΣVT,得到的V就包含想要的PC, Σ \Sigma Σ里面对应的奇异值大小就是PC的排序。

Q: 那么为什么要这样做,以及为什么基于协方差矩阵的V和基于特征值分解的V是相同的呢?
A: 把矩阵A(已经去中心化,后文提到的也都是去中心化的)投影到一个方向 v v v,可以表示为: A v Av Av。这就是矩阵A投影到向量v的结果。
如果我们想求投影点的方差,也就是 ∑ ( x i − x ˉ ) 2 m − 1 \frac{\sum\left(x_i-\bar{x}\right)^2}{m-1} m1(xixˉ)2,由于A已经去中心化, x ˉ = 0 \bar{x}=0 xˉ=0
所以方差就是 1 m − 1 × ∑ x i 2 \frac{1}{m-1}\times \sum{x_i^2} m11×xi2,也就是 1 m − 1 × ∣ ∣ A v ∣ ∣ 2 \frac{1}{m-1}\times ||Av||_2 m11×∣∣Av2
∣ ∣ A v ∣ ∣ 2 = ( A v ) T ( A v ) = v T A T A v ||Av||_2=(Av)^T(Av)=v^TA^TAv ∣∣Av2=(Av)T(Av)=vTATAv
因此,我们想要找到一个方向 v v v,使得 v T A T A v v^T A^TAv vTATAv最大。
v T A T A v = λ v^TA^TAv=\lambda vTATAv=λ,那么有 A T A v = λ v A^TAv=\lambda v ATAv=λv,即 v v v A T A A^TA ATA的特征向量。
所以,问题就变成了:试图找到使得 A T A A^TA ATA的特征值最大的特征向量
①当A是中心化的矩阵时,A的协方差矩阵为 A T A m − 1 \frac{A^TA}{m-1} m1ATA,基于谱定理[2]。所以对协方差矩阵进行特征值分解就可以得PC。
②基于SVD, A = U Σ V T , A T A = V Σ 2 V T A=U\Sigma V^T,A^TA=V \Sigma^2 V^T A=UΣVT,ATA=VΣ2VT。由于 V V V是正交矩阵,有 V T = V − 1 V^T=V^{-1} VT=V1,所以 V V V就是对 A T A A^TA ATA进行特征值分解得到的特征向量矩阵。

参考
[1] https://www.efavdb.com/principal-component-analysis
[2] https://stats.stackexchange.com/a/219344/371987

附:一个从浅到深讲解PCA的方法

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值