关于(Principal Component Analysis)的推导方法很多,Ng在CS229的课程中也说到大约有10种左右;本文介绍的就是他在课程中讲到的,基于最大化方差的推导方法。

1. What is PCA

PCA是主成分分析(Principal Component Analysis)的简写,属于线性降维方法中的一种;其目的是对包含冗余的数据集进行降维等。所谓线性降维是指这种方法仅仅对于各维度之间存在线性关系(此时肯定有冗余维度)时有作用,或者说效果最好;而对于其它存在非线性情况的冗余时,不适用。

2. Idea of reduce

先来通过两个例子,弄明白降维的思想:

2.1. Reduce data from 2D to 1D

两个角度带你吃透PCA

如上图所示为一个二维平面,所有的点都用了两个维度来表示;那我们如何能降低到只用一个维度就能表示呢?接着看下图:

两个角度带你吃透PCA

此时,若仅用图中的绿色直线(u)作为坐标轴,以每个点在u上的的投影为新的坐标点;此时,先前的二维坐标(xi,xj)就被u上的一维坐标zi取代了。

两个角度带你吃透PCA

2.2. Reduce data from 3D to 2D

两个角度带你吃透PCA

如上图所示为一个三维空间,所有的点都用了三个维度来表示;那又如何能降低到只用两个维度就能表示呢? 答:投影到一个平面。

两个角度带你吃透PCA

我们可以看到,几乎所有的点都在红色平面上;所以,我们就将所有的点投影到由u1,u2所张成的二维平面上,然后用二维平面点来代替原来三维空间中的点。

两个角度带你吃透PCA

以上就是降维的思想。

2.3. Standardization

在正式介绍之前,我们先对数据进行标准化处理,目的是为了提高算法的收敛速度,以及计算推导的方便性。标准化之后样本的均值为0,方差为1。如下图:
两个角度带你吃透PCA

红色的样本点,是经蓝色样本点标准化之后的结果;我们可以看到,除了全局位置发生了改变,其它诸如相对位置,以及样本点之间的结构都没有发生变化。绿色的点,为样本的均值点(中心)

3. PCA(Principal Component Analysis)

前面说到了降维的思想:从高维降到低维就是在低维空间(平面)中找到对应基(上面说到的u)来表示原来高维空间中的点即可。所以降维的关键就在于如何建立一个模型来找到对应的基。

3.1 Reduce data from 2D to 1D

两个角度带你吃透PCA

在上图中(‘x’表示样本点,‘·’表示投影点),似乎看一眼就觉得用左图中投影方式比右图中的更好。为什么呢?因为右图中的投影点太“密集”会导致相互重叠而丢失信息,所以显然这种投影方式不好。并且此时我们可以知道,衡量好坏的标准就是投影后所有的样本点整体上要尽可能的分开,也就是离中心点要尽量的远。而这,可以通过最大化方差(Voriance)来衡量。

两个角度带你吃透PCA

如上图所示,设直线所在的方向单位向量为u1(图中红色箭头),样本点xu的夹角为θ,则该样本点的投影点到原点的距离为xTu1,(x,u1均为列向量)。


证明: 易知,x,u1=|x||u1|cosθ,d=cosθ|x|=xTu1|x||u1||x|=xTu1


所以我们可以得到如下优化目标:

max||u1||=11mi=1m(x(i)Tu1)2=1mi=1mu1Tx(i)x(i)Tu1(3.1)=u1T(1mi=1mx(i)x(i)T)u1

对于(3.1)这个优化问题,我们用拉格朗日乘数法很容易就能求解出u为红色部分的特征向量。


证明:

L=u1T(1mi=1mx(i)x(i)T)u1λ(u1Tu11)Lu1=u1T1mi=1mx(i)x(i)Tλu1T=0u1TΣ=λu1T(u1TΣ)T=(λu1T)TΣu1=λu1(Σ=1mi=1mx(i)x(i)T为对称阵)


3.2 Reduce data from 3D to 2D

上面说完从2维降到1维的推导,可能比较容易理解;我再来推导以下从3维降到2维的推导,这样我们就能顺理成章地引入到高维了。

两个角度带你吃透PCA

如上图,是投影到二维平面后的结果。红色箭头分别为单位u1,u2,则优化模型变成如下形式:

max||u||=11mi=1m[(x(i)Tu1)2+(x(i)Tu2)2]=u1TΣu1+u2TΣu2

由上面的推导可知,u1,u2分别为Σ的两个特征向量。

3.3 In high-dimension

由上面的例子,我们可以顺其自然的将其拓展到高维空间中:
u={u1,u2,...uk}为n维空间降维到k(k<n)维空间中的基向量,则有,

max||u||=11mi=1m(x(i)Tu)2=1mi=1muTx(i)x(i)Tu=uT(1mi=1mx(i)x(i)T)u=max||u||=1uTΣu

u为方阵Σ的前k个主向量(前k个最大特征值对应的特征向量)

4. Representation

由此我们可以便可以知道从n维空间中,降到k维空间的k个基向量u1,u2...uk就是Σ的k个主要特征向量。在我们得到这些向量之后如何来表示,也就是降维呢?下面就来说说坐标的表示:

我们知道在平面直角坐标系中,我们用的基向量分别是i=(1,0)T,j=(0,1)T,如下图所示:

两个角度带你吃透PCA

那么向量x=(5,6)T到底是什么含义呢?其实就是在i方向移动iTx=5个单位,在j方向移动jTx=6个单位。可能这样感观不明显,我们换旋转一下坐标系。

两个角度带你吃透PCA

如图所示,此时我们选取i^=(12,12)T,j^=(12,12)T来作为我们的基向量,那么此时i,j坐标系中的样本点x=(2,6)Ti^,j^是多少呢?答案是:在i^方向移动i^Tx=82;在j^方向移动j^Tx=42,所以,在新的坐标系下,样本点x的坐标为:

[i^Tj^T]x=[12121212][26]=[8242]

所以降维之后的坐标:

y(i)=[u1Tx(i)u2Tx(i)u3Tx(i)ukTx(i)]

5. Conclusion

由以上,我们总结降维的步骤为:

(1). 标准化;
(2). 计算Σ=1mi=1mx(i)x(i)T=1mXTX 其中,Xm×n为数据集,n为维度;
(3). 计算特征向量,并选取前k个主要特性向量;
两个角度带你吃透PCA
(4). 计算降维后的数据集y=Xuk×nT

下面贴一个用python写的例子的源码pcaByCoding.py

关于PCA的推导,到此可以算是结束了。下面我再来谈谈对Σ,以及PCA的一些理解,没兴趣的直接关闭,不影响。

6. Others

先放一张图,待会儿会用到,里面提到了运用PCA的隐藏前提。

两个角度带你吃透PCA
其中有两点值得注意,分别是线性关系和正态分布。也就是说当各个维度之间存在着线性关系,以及每个维度中的随机变量都服从正态分布时效果最佳。

第一点:关于协方差矩阵

设有如下形式数据集(已做标准化处理):

X2×3=[a1b1c1a2b2c2]

即,样本数和维度分别为2和3,为了叙述方面,我们后面会用a,b,c分别表示三个维度。

因此我们可以得到:

Σ=1mXTX=[1mi=12ai21mi=12aibi1mi=12aici1mi=12aibi1mi=12bi21mi=12bici1mi=12aici1mi=12bici1mi=12ci2]

又因为

Var(X)=1mE(XE(X))2=E(XX¯)2Cov(X,Y)=Cov(Y,X)=E[(XX¯)(YY¯])Cov(X,X)=Var(X)

所以有:
Var(a)=1m[(a10)2+(a20)2]=1mi=12ai2Var(b)=1mi=12bi2;Var(c)=1mi=12ci2;Cov(a,b)=1m[(a10)(b10)+(a20)(b20)]=1mi=12aibiCov(a,c)=1mi=12aici;Cov(b,c)=1mi=12bici

所以:
Σ=[Var(a)Cov(a,b)Cov(a,c)Cov(a,b)Var(b)Cov(b,c)Cov(a,c)Cov(b,c)Var(c)]

因此Σ称之为协方差矩阵。从这个矩阵中能得到什么信息呢?
我们知道,倘若Cov(X,Y)=0则,维度X,Y之间一定不存在线性关系;又因为各维度之间均服从二维正态分布,我们可以进一步得出Cov(X,Y)=0X,Y独立。

X,Y表示:a,b,c中任意两个随机变量

也就是说,给定一个协方差矩阵:倘若除了主对角线外,其他元素均为0(或接近于0),则其对应的数据集一定不适合通过PCA来进行线性降维。或者换句话说,它已经是某个数据集PCA降维后的结果,此时不存在线性关系

假设Uk×nk个基向量组成的矩阵,Xm×n为维度间包含有线性关系的的矩阵(即可以降维);则降维后的矩阵为Ym×k=Xm×nUk×nT,且此时Y的个维度之间已经不存在线性关系。

由此我们可以知道,Y的协方差矩阵Σ肯定是一个对角阵,那到底Σ是什么样的呢?我们一起来看看:

Σ=1mYTY=1m(XUT)T(XUT)=1mUXTXUT=U1mXTXUT=UΣUT

于是我们有:

(*)Σ=UΣUT=Λ

又,Σ是实对称阵,则必存在正交阵Q,使得

Q1ΣQ=ΛQ=(β1,β2...βn),(βi),Λ=[λ1λ2λn]

需要注意的是,Qβ的顺序,要同Λλ的顺序对应,即若取
Q=(β2,β1...βn),Λ=[λ2λ1λn]

即:

我们总能找到一个序列

Λ=[λiλjλk]=Λ

所以此时有(Q1)=U,Q=UT(Q1)ΣQ=Λ

由此我们可以得到,U=(Q)T=(βi,βj,...)T

第二点:关于主要特征向量

前面我们说到,最终选择Σ的k个主要特征向量;并且也说到,k个主要特征向量就是前k个最大特征值依次对应的k个特征向量。但是原因呢?

要知道原因得先来谈谈特征向量和特征值。我们知道越大的特征值所对应的特征向量在进行线性变换后被拉伸的程度越剧烈(详见此文第四章)。因此,在线性变换(降维)yk×1(i)=Uk×nxn×1(i)后,欲使每个维度上的样本点越离散(方差越大),就必须选择被拉伸得最剧烈的特征向量,而被拉伸的最剧烈的特征向量,就通过λ的值来确定。

参考:

相关文章:

  • 2021-10-04
  • 2021-10-31
  • 2023-02-09
  • 2023-03-11
  • 2021-05-08
  • 2022-12-23
  • 2022-12-23
  • 2021-07-15
猜你喜欢
  • 2022-12-23
  • 2023-03-15
  • 2022-12-23
  • 2021-11-29
  • 2021-05-15
  • 2023-03-14
  • 2020-06-03
相关资源
相似解决方案