PCA小白教程

一.基础知识

这一小节因为无关紧要,放在最后
这一小节会解释本文提到的一些名词,看后文遇到不懂的名词,再在这一小节中查找。

二.主成分分析法介绍

1. 核心思想

 主成分分析法的核心思想就是:
Y = X A Y=XA Y=XA
 其中:
X X X: ( m , n ) (m,n) (m,n)矩阵,原始数据集,一行代表一个样本,有 m m m个样本,每一列是一种特征,有 n n n种特征。
A A A: ( n , ? ) (n,?) (n,?)矩阵,表示线性变换的矩阵
Y Y Y: ( m , ? ) (m,?) (m,?)矩阵,经过PCA变换后的矩阵

 上式可以解释为:
 利用线性变换,将原始数据变换为一组各维度线性无关的表示。

2. 理论做法

这一部分灵感来源:https://blog.csdn.net/hustqb/article/details/78394058

 我们要对 X X X进行线性变换,使得 Y Y Y在各维度上都线性无关。我们想到了计算 Y Y Y的协方差矩阵。(这里假设已经对 X X X进行了预处理, X = X − X ˉ X=X-\bar{X} X=XXˉ, X ˉ \bar{X} Xˉ X X X的均值,预处理后, X X X的数学期望为0)
C o n v ( Y ) = 1 m Y T Y = 1 m ( X A ) T ( X A ) = A T C A Conv(Y)=\dfrac{1}{m}Y^TY=\dfrac{1}{m}(XA)^T(XA)=A^TCA Conv(Y)=m1YTY=m1(XA)T(XA)=ATCA 其中:
C C C:是矩阵 X X X的协方差矩阵,由于 C = 1 m X T X C=\dfrac{1}{m}X^TX C=m1XTX,所以 C C C是对称矩阵。

 协方差矩阵 C o n v ( Y ) Conv(Y) Conv(Y)的主对角线是方差,其余元素都是协方差,而方差表示在这个特征上,各个样本(虽然这里有个样本)间的差异性,而协方差为0,则说明这两个特征不相关。
 所以,我们的目标就是使得 C o n v ( Y ) Conv(Y) Conv(Y)主对角线的元素值尽可能大,其余元素值为0。(由于PCA还可以降维,所以我们会按照从大到小的顺序排列主对角线元素)。
 而通过推导,得到 C o n v ( Y ) = A T C A Conv(Y)=A^TCA Conv(Y)=ATCA,我们只需要求得 A A A使得 C C C对角化即可。
 我们知道,对称矩阵是一定可以对角化的。所以,我们可以通过求特征值和特征向量来将矩阵 C C C对角化:
C = P Λ P T P T C P = Λ C=P\Lambda P^T \\ P^T CP=\Lambda C=PΛPTPTCP=Λ 其中
Λ \Lambda Λ:是对角阵,对角元素是 C C C的特征值
P P P:每一列是 Λ \Lambda Λ对应的特征值所对应的特征向量

 所以,对矩阵 X X X进行PCA的做法是:
 1. 求 C = 1 m X T X C=\dfrac{1}{m}X^TX C=m1XTX
 2.求 C C C的特征向量
 3. C C C的特征向量构成矩阵 A A A的列
 我们可以对特征向量的维度进行截断,以达到降维的目的。
 上述步骤还有很多细节需要注意,不过我没有考虑过,欢迎补充。

3.利用SVD简化计算

 然而在计算机编程中,调用计算SVD的库函数似乎比求特征向量速度快很多。所以经常使用SVD简化计算。

CS231n中的做法

原始笔记参考:http://cs231n.github.io/neural-networks-2/
需要梯子

# Assume input data matrix X of size [N x D]
X -= np.mean(X, axis = 0) # zero-center the data (important)
cov = np.dot(X.T, X) / X.shape[0] # get the data covariance matrix
U,S,V = np.linalg.svd(cov)
Xrot = np.dot(X, U) # decorrelate the data
Xrot_reduced = np.dot(X, U[:,:100]) # Xrot_reduced becomes [N x 100]

 在上述代码中,SVD的作用仅仅就是求矩阵 U U U,令 A = U A=U A=U后,得到:
Y = X U Y T Y = ( X U ) T X U = U T X T X U = U T U Σ V T U = Σ Y=XU\\ Y^TY=(XU)^TXU=U^TX^TXU=U^TU\Sigma V^TU=\Sigma Y=XUYTY=(XU)TXU=UTXTXU=UTUΣVTU=Σ
备注: 由于 X T X X^TX XTX是对称矩阵,所以 U U U V V V相等。

更常见的做法

参考资料:
https://stats.stackexchange.com/questions/134282/relationship-between-svd-and-pca-how-to-use-svd-to-perform-pca
这个回答非常到位,感人。强推

 更常见用SVD简化PCA的计算是直接对 X X X进行奇异值分解:
X = U Σ V T X=U\Sigma V^T X=UΣVT
 那么此时,PCA就是:
Y = X V Y=XV Y=XV
 解释一下:
C = 1 m X T X = 1 m V Σ T U T U Σ V T = V Σ 2 m V T C=\dfrac{1}{m}X^TX=\dfrac{1}{m}V \Sigma^TU^TU\Sigma V^T=V\dfrac{\Sigma^2}{m}V^T C=m1XTX=m1VΣTUTUΣVT=VmΣ2VT
 备注: U U U是酉矩阵, U T U = E U^TU=E UTU=E
     Σ \Sigma Σ X X X的奇异值,奇异值的平方是特征值

 所以,此时:
C o n v ( Y ) = V T C V = Σ 2 m Conv(Y)=V^TCV=\dfrac{\Sigma^2}{m} Conv(Y)=VTCV=mΣ2
 是个对角阵,而且按照主元素从大到小的顺序排列(奇异值分解的要求)

我这里只是从数学上简单推了下,真正的原理,链接里给的非常详细,我偷懒了,没有翻译。

一.基础知识

1. 线性变换在原来基下的矩阵

在这里插入图片描述
A A A就是线性变换 T T T在基 α 1 , α 2 , ⋯   , α n \alpha_1,\alpha_2,\cdots,\alpha_n α1,α2,,αn下的矩阵。

 其中:

T T T:是 V V V的线性变换

V V V: 是数域 P \mathbb{P} P上的 n n n维线性空间

A A A: 是矩阵,如下:

在这里插入图片描述

2.如何理解线性变换常常写成矩阵相乘的形式

这一部分灵感来源:https://blog.csdn.net/unclerunning/article/details/70893118

已知:

A A A: 线性变换的矩阵,即
在这里插入图片描述

求:

x \bold{x} x经过线性变换 T T T变换后的向量

 其中:

x \bold{x} x: x = [ x 1 x 2 ⋯ x n ] = x 1 α 1 + x 2 α 2 + ⋯ + x n α n \bold{x}=\begin{bmatrix}x_1\\x_2\\\cdots\\x_n\end{bmatrix}=x_1\alpha_1+x_2\alpha_2+\cdots+x_n\alpha_n x=x1x2xn=x1α1+x2α2++xnαn,这里默认基向量是标准基向量。 x \bold{x} x是在原来的空间中的一个向量

解:
T ( x ) = T ( α 1 , α 2 , ⋯   , α n ) [ x 1 x 2 ⋯ x n ] = [ T α 1 T α 2 ⋯ T α n ] [ x 1 x 2 ⋯ x n ] T(\bold{x})=T(\alpha_1,\alpha_2,\cdots,\alpha_n)\begin{bmatrix}x_1\\x_2\\\cdots\\x_n\end{bmatrix}=\begin{bmatrix}T\alpha_1&T\alpha_2\cdots&T\alpha_n\end{bmatrix}\begin{bmatrix}x_1\\x_2\\\cdots\\x_n\end{bmatrix} T(x)=T(α1,α2,,αn)x1x2xn=[Tα1Tα2Tαn]x1x2xn

 通常, [ T α 1 T α 2 ⋯ T α n ] \begin{bmatrix}T\alpha_1&T\alpha_2\cdots&T\alpha_n\end{bmatrix} [Tα1Tα2Tαn]是已知的,所以用这个矩阵右乘原向量,就可以得到线性变换后的向量。
 所以:在基为标准基时,线性变换在标准基下的矩阵 乘以 需要变换的向量,就是原向量 线性变换后的结果。
这里补充这个知识的意义在于:对一个向量做线性变换,变换矩阵到底是什么样的
 当原向量是列向量,变换矩阵左乘,变换后的基向量构成变换矩阵的列。
 当原向量是行向量,变换矩阵右乘,变换后的基向量构成变换矩阵的行。

3. 奇异值分解

M = U Σ V ∗ M=U\Sigma V^* M=UΣV
 如果存在上述这样的 M M M的分解,则称这样的分解为 M M M的奇异值分解
 其中:

M M M m × n m\times n m×n阶矩阵

U U U m × m m\times m m×m酉矩阵

Σ \Sigma Σ m × n m\times n m×n非负 实数 对角矩阵

V ∗ V^* V V V V共轭转置,是 n × n n \times n n×n酉矩阵(complex unitary matrix)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值