PCA降维的数学理解与举例

PCA(Principle Component Analysis 主成分分析)是深度学习中最常用的降维算法。本文将通过最基础的线性代数知识对PCA算法进行解释。
0. 为什么要进行降维&降维的目标&降维的原则
0.1 为什么要进行降维

在深度学习中,需要对大量的样本数据进行处理,而每个样本会包含很多特征(即维度),这样在进行各种运算和训练时无疑会消耗大量的内存和时间,所以我们希望适当的减少每个样本的维度,从而简化运算。

0.2 降维的目标

假设原始的数据集为 X m × n X_{m×n} Xm×n,如下所示:
X m × n = [ x 1 ( 1 ) x 2 ( 1 ) … x n ( 1 ) x 1 ( 2 ) x 2 ( 2 ) … x n ( 2 ) ⋮ ⋮ ⋱ ⋮ x 1 ( m ) x 2 ( m ) … x n ( m ) ] X_{m×n}=\left[ \begin{matrix} x_1^{(1)}&x_2^{(1)}&\dots & x_n^{(1)}\\ x_1^{(2)}&x_2^{(2)}&\dots & x_n^{(2)}\\ \vdots&\vdots&\ddots&\vdots\\ x_1^{(m)}& x_2^{(m)}&\dots & x_n^{(m)} \end{matrix} \right] Xm×n=x1(1)x1(2)x1(m)x2(1)x2(2)x2(m)xn(1)xn(2)xn(m)
表示有m个样本数据,每个样本数据有n个维度。即上述矩阵每一行是一个样本,共m个样本;每一列是一个维度,共n个维度。

我们的目标是不改变样本数量,减少样本维度,即减少上述矩阵的列数。

假设降成k维,则最终得到的降维后数据集为:
Y m × k = [ y 1 ( 1 ) y 2 ( 1 ) … y k ( 1 ) y 1 ( 2 ) y 2 ( 2 ) … y k ( 2 ) ⋮ ⋮ ⋱ ⋮ y 1 ( m ) y 2 ( m ) … y k ( m ) ] Y_{m×k}=\left[ \begin{matrix} y_1^{(1)}&y_2^{(1)}&\dots & y_k^{(1)}\\ y_1^{(2)}&y_2^{(2)}&\dots & y_k^{(2)}\\ \vdots&\vdots&\ddots&\vdots\\ y_1^{(m)}&y_2^{(m)}&\dots & y_k^{(m)} \end{matrix} \right] Ym×k=y1(1)y1(2)y1(m)y2(1)y2(2)y2(m)yk(1)yk(2)yk(m)

Y m × k = X m × n Q n × k Y_{m×k}=X_{m×n}Q_{n×k} Ym×k=Xm×nQn×k我们只要求出Q,就可以把X降维成Y,因此我们的目标就是找出一个恰当的Q

0.3 降维的原则

我们要在降低维度时尽可能减少数据的损失,所以我们让不同维度之间尽可能接近,同一维度的不同数据尽可能分散。(不同维度之间越接近,就意味着去掉一些维度时损失较小;同一维度的不同数据越分散,就意味着在这一维度上的数据越容易被区分)

我们在协方差矩阵中来衡量这一接近、分散程度。

以m个3维数据为例:(注意:a,b,c 表示不同维度,每一行是一个样本,每一列是一个维度
[ a 1 b 1 c 1 a 2 b 2 c 2 ⋮ ⋮ ⋮ a m b m c m ] \left[\begin{matrix} a_1&b_1&c_1\\ a_2&b_2&c_2\\ \vdots&\vdots&\vdots\\ a_m&b_m&c_m \end{matrix}\right] a1a2amb1b2bmc1c2cm
其协方差为:
c o v = [ c o v ( a , a ) c o v ( a , b ) c o v ( a , c ) c o v ( b , a ) c o v ( b , b ) c o v ( b , c ) c o v ( c , a ) c o v ( c , b ) c o v ( c , c ) ] cov=\left[\begin{matrix} cov(a,a)&cov(a,b)&cov(a,c)\\ cov(b,a)&cov(b,b)&cov(b,c)\\ cov(c,a)&cov(c,b)&cov(c,c) \end{matrix}\right] cov=cov(a,a)cov(b,a)cov(c,a)cov(a,b)cov(b,b)cov(c,b)cov(a,c)cov(b,c)cov(c,c)
容易看出在协方差矩阵中,对角线元素表示的是每个维度上样本的方差,而非对角线元素表示的是不同维度之间样本的协方差。要使得“不同维度之间尽可能接近,同一维度数据尽可能分散”,就要让非对角线元素尽可能小,对角线元素尽可能大

我们通过对数据的处理,使其协方差矩阵成为一个对角阵,那么非对角线元素为0,我们就可以放心的删去多余的维度;在删去时,我们删掉较小的对角线元素对应的列。

1. 计算X,Y的协方差矩阵

对于原始数据集 X m × n X_{m×n} Xm×n,其协方差矩阵为:
C x n × n = 1 m X T X Cx_{n×n}=\frac{1}{m}X^TX Cxn×n=m1XTX(概率论里除以m-1的公式是无偏估计,但是这里数据总数已知,不涉及估计问题,只涉及离散程度的描述,因此除以m)

我们设最终数据集 Y m × k = X m × n Q n × k Y_{m×k}=X_{m×n}Q_{n×k} Ym×k=Xm×nQn×k,则其协方差矩阵满足:
C y k × k = 1 m Y T Y = 1 m Q T X T X Q = Q T C x Q Cy_{k×k}=\frac{1}{m}Y^TY\\\frac{}{}\\=\frac{1}{m}Q^TX^TXQ\\\frac{}{}\\=Q^TCxQ Cyk×k=m1YTY=m1QTXTXQ=QTCxQ

2. 对角化

在降维之前,我们要处理数据集使其协方差矩阵成为对角阵,(即数据集要经过两步处理,X→Y’→Y),设 Y m × n ′ = X m × n Q n × n ′ Y'_{m×n}=X_{m×n}Q'_{n×n} Ym×n=Xm×nQn×n,则同理可得 Y ′ Y' Y的协方差矩阵为:
C y k × k ′ = 1 m Y ′ T Y ′ = 1 m Q ′ T X T X Q ′ = Q ′ T C x Q ′ Cy'_{k×k}=\frac{1}{m}Y'^TY'\\\frac{}{}\\=\frac{1}{m}Q'^TX^TXQ'\\\frac{}{}\\=Q'^TCxQ' Cyk×k=m1YTY=m1QTXTXQ=QTCxQ
C x Cx Cx,有 C x = P Λ P T Cx=P\Lambda P^{T} Cx=PΛPT

C x Cx Cx特征值为: λ 1 , λ 2 , … , λ n \lambda_1, \lambda_2, \dots, \lambda_n λ1,λ2,,λn λ 1 ≥ λ 2 ≥ ⋯ ≥ λ n \lambda_1 ≥\lambda_2≥\dots≥\lambda_n λ1λ2λn
对应特征向量为: ξ 1 , ξ 2 , … , ξ n \xi_1, \xi_2, \dots, \xi_n ξ1,ξ2,,ξn
则令 P = [ ξ 1 , ξ 2 , … , ξ n ] P=[\xi_1,\xi_2,\dots, \xi_n] P=[ξ1,ξ2,,ξn],有 C x = P Λ P − 1 Cx=P\Lambda P^{-1} Cx=PΛP1
其中, Λ = d i a g [ λ 1 , λ 2 , … , λ n ] \Lambda=diag[\lambda_1, \lambda_2, \dots, \lambda_n] Λ=diag[λ1,λ2,,λn],是一个由特征值构成的对角阵
由于协方差矩阵一定是对称阵,根据对称阵的性质,不同特征值对应的特征向量正交,即 P T P = I = P − 1 P P^TP=I=P^{-1}P PTP=I=P1P,即 P T = P − 1 P^T=P^{-1} PT=P1
故有 C x = P Λ P T Cx=P\Lambda P^T Cx=PΛPT

因此我们令 Q ′ = P Q'=P Q=P,则有:
C y ′ = Q ′ T C x Q ′ = P T P Λ P T P = Λ = d i a g [ λ 1 λ 2 … λ n ] Cy'=Q'^TCxQ'\\\frac{}{}\\=P^TP\Lambda P^TP\\\frac{}{}\\=\Lambda=diag[\lambda_1 \lambda_2 \dots \lambda_n] Cy=QTCxQ=PTPΛPTP=Λ=diag[λ1λ2λn]

这样我们就将协方差矩阵转成了对角阵,实现这一变化的矩阵 Q ′ = P Q'=P Q=P

3. 降维

假设降低成k维,由于之前已经将特征值从大到小排序,所以取前k个特征值 λ \lambda λ对应的特征向量 ξ \xi ξ构成 Q Q Q:
Q = [ ξ 1 , ξ 2 , … , ξ k ] Q=[\xi_1,\xi_2,\dots,\xi_k] Q=[ξ1,ξ2,,ξk]
这样得到最终数据集 Y Y Y的协方差矩阵:
C y = Q T C x Q = d i a g [ λ 1 … λ k ] ( λ i 是 n 维 列 向 量 ) Cy=Q^TCxQ\\\frac{}{}\\=diag[\lambda_1 \dots \lambda_k] \\(\lambda_i是n维列向量) Cy=QTCxQ=diag[λ1λk](λin)
Y = X Q Y=XQ Y=XQ,实现了从 X m × n X_{m×n} Xm×n Y m × k Y_{m×k} Ym×k的降维。

4. 举例

若给定原始数据集为
X = [ 1 − 1 3 2 0 − 2 0 4 1 1 ] X=\left[\begin{matrix} 1&-1&3&2&0\\ -2&0&4&1&1 \end{matrix}\right] X=[1210342101]
则其协方差矩阵为
C x = 1 2 X T X = [ 2.5 − 0.5 − 2.5 0 − 1 − 0.5 0.5 − 1.5 − 1 0 − 2.5 − 1.5 12.5 5 2 0 − 1 5 2.5 0.5 − 1 0 2 0.5 0.5 ] Cx=\frac{1}{2}X^TX\\ =\left[\begin{matrix} 2.5&-0.5&-2.5&0&-1\\ -0.5&0.5&-1.5&-1&0\\ -2.5&-1.5&12.5&5&2\\ 0&-1&5&2.5&0.5\\ -1&0&2&0.5&0.5 \end{matrix}\right] Cx=21XTX=2.50.52.5010.50.51.5102.51.512.5520152.50.51020.50.5
其特征值为: λ 1 = 15.5 , λ 2 = 3 , λ 3 , 4 , 5 ≈ 0 \lambda_1=15.5,\lambda_2=3,\lambda_{3,4,5}≈0 λ1=15.5,λ2=3,λ3,4,50
对应特征向量 ξ 1 \xi_1 ξ1~ ξ 5 \xi_5 ξ5构成矩阵 P P P为:
P = [ ξ 1 ξ 2 ξ 3 ξ 4 ξ 5 ] = [ − 0.18 − 0.82 − 0.29 0.38 0.27 − 0.11 0.33 0.11 0.90 − 0.23 0.90 0 − 0.41 0.15 − 0.05 0.36 − 0.41 0.82 0.04 − 0.18 0.14 0.24 0.25 0.13 0.92 ] P=[\begin{matrix}\xi_1&\xi_2&\xi_3&\xi_4&\xi_5]\end{matrix}\\\frac{}{}\\=\left[\begin{matrix} -0.18&-0.82&-0.29&0.38&0.27\\ -0.11&0.33&0.11&0.90&-0.23\\ 0.90& 0 &-0.41&0.15&-0.05\\ 0.36 & -0.41 & 0.82 & 0.04& -0.18\\ 0.14 & 0.24 & 0.25& 0.13 & 0.92 \end{matrix}\right] P=[ξ1ξ2ξ3ξ4ξ5]=0.180.110.900.360.140.820.3300.410.240.290.110.410.820.250.380.900.150.040.130.270.230.050.180.92
观察特征值,我们很容易发现后面三个非常小接近0,故而可以忽略,所以我们把原来的5维降低成2维是合理的,那么我们只需取最大的两个特征值对应的特征向量来构成 Q Q Q
Q = [ ξ 1 ξ 2 ] = [ − 0.18 − 0.82 − 0.11 0.33 0.90 0 0.36 − 0.41 0.14 0.24 ] Q=[\begin{matrix}\xi_1&\xi_2]\end{matrix}\\\frac{}{}\\=\left[\begin{matrix} -0.18&-0.82\\ -0.11&0.33\\ 0.90& 0\\ 0.36 & -0.41\\ 0.14 & 0.24 \end{matrix}\right] Q=[ξ1ξ2]=0.180.110.900.360.140.820.3300.410.24
则得到降维后的数据集 Y : Y: Y:
Y = X Q = [ 3.34 − 1.96 4.45 1.47 ] Y=XQ\\ =\left[\begin{matrix} 3.34&-1.96\\ 4.45&1.47\\ \end{matrix}\right] Y=XQ=[3.344.451.961.47]

通常情况下,用PCA降维的同时还伴随着数据中心化,即使得所有数据点的中心归一到坐标原点。为与普遍的算法结果保持一致,我们对上述降维后的数据集进行中心化,即每一列减去该列的均值,得到:
Y 中 心 化 = [ − 0.56 − 1.71 0.56 1.71 ] Y_{中心化}=\left[\begin{matrix} -0.56&-1.71\\ 0.56&1.71 \end{matrix}\right] Y=[0.560.561.711.71]

在使用PCA时注意:
  • 一定要弄清楚数据集的行、列,哪个是样本数,哪个是特征数(维度)
  • 若数据集以行表示维度,列表示样本数(即与本文相反),那么协方差矩阵一定不能用自带的函数计算,其计算公式改为 C x = 1 m X X T Cx=\frac{1}{m}XX^T Cx=m1XXT, 其他的将相应的列操作变成行操作即可。不过与其如此,不如直接把原始数据集转置。
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虚宇宸轩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值