PCA降维的数学理解与举例

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

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

0.2 降维的目标

假设原始的数据集为Xm×nX_{m×n}Xm×n,如下所示:
Xm×n=[x1(1)x2(1)…xn(1)x1(2)x2(2)…xn(2)⋮⋮⋱⋮x1(m)x2(m)…xn(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维,则最终得到的降维后数据集为:
Ym×k=[y1(1)y2(1)…yk(1)y1(2)y2(2)…yk(2)⋮⋮⋱⋮y1(m)y2(m)…yk(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)

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

0.3 降维的原则

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

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

以m个3维数据为例:(注意:a,b,c 表示不同维度,每一行是一个样本,每一列是一个维度
[a1b1c1a2b2c2⋮⋮⋮ambmcm]\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
其协方差为:
cov=[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)]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的协方差矩阵

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

我们设最终数据集Ym×k=Xm×nQn×kY_{m×k}=X_{m×n}Q_{n×k}Ym×k=Xm×nQn×k,则其协方差矩阵满足:
Cyk×k=1mYTY=1mQTXTXQ=QTCxQCy_{k×k}=\frac{1}{m}Y^TY\\\frac{}{}\\=\frac{1}{m}Q^TX^TXQ\\\frac{}{}\\=Q^TCxQCyk×k=m1YTY=m1QTXTXQ=QTCxQ

2. 对角化

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

CxCxCx特征值为:λ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],有Cx=PΛP−1Cx=P\Lambda P^{-1}Cx=PΛP1
其中,Λ=diag[λ1,λ2,…,λn]\Lambda=diag[\lambda_1, \lambda_2, \dots, \lambda_n]Λ=diag[λ1,λ2,,λn],是一个由特征值构成的对角阵
由于协方差矩阵一定是对称阵,根据对称阵的性质,不同特征值对应的特征向量正交,即PTP=I=P−1PP^TP=I=P^{-1}PPTP=I=P1P,即PT=P−1P^T=P^{-1}PT=P1
故有Cx=PΛPTCx=P\Lambda P^TCx=PΛPT

因此我们令Q′=PQ'=PQ=P,则有:
Cy′=Q′TCxQ′=PTPΛPTP=Λ=diag[λ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′=PQ'=PQ=P

3. 降维

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

4. 举例

若给定原始数据集为
X=[1−1320−20411]X=\left[\begin{matrix} 1&-1&3&2&0\\ -2&0&4&1&1 \end{matrix}\right]X=[1210342101]
则其协方差矩阵为
Cx=12XTX=[2.5−0.5−2.50−1−0.50.5−1.5−10−2.5−1.512.5520−152.50.5−1020.50.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构成矩阵PPP为:
P=[ξ1ξ2ξ3ξ4ξ5]=[−0.18−0.82−0.290.380.27−0.110.330.110.90−0.230.900−0.410.15−0.050.36−0.410.820.04−0.180.140.240.250.130.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维是合理的,那么我们只需取最大的两个特征值对应的特征向量来构成QQQ
Q=[ξ1ξ2]=[−0.18−0.82−0.110.330.9000.36−0.410.140.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=XQ=[3.34−1.964.451.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.710.561.71]Y_{中心化}=\left[\begin{matrix} -0.56&-1.71\\ 0.56&1.71 \end{matrix}\right]Y=[0.560.561.711.71]

在使用PCA时注意:
  • 一定要弄清楚数据集的行、列,哪个是样本数,哪个是特征数(维度)
  • 若数据集以行表示维度,列表示样本数(即与本文相反),那么协方差矩阵一定不能用自带的函数计算,其计算公式改为Cx=1mXXTCx=\frac{1}{m}XX^TCx=m1XXT, 其他的将相应的列操作变成行操作即可。不过与其如此,不如直接把原始数据集转置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

虚宇宸轩

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

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

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

打赏作者

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

抵扣说明:

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

余额充值