PCA的数学推导
PCA(Principle Component Analysis)是一种可以将高维度数据降为低维度数据的机器学习算法。通过降维,可以有节省存储空间,数据可视化等优点。之前在Coursera上Andrew Ng的机器学习时了解到此算法,但是那个课只涉及了实现,并未阐述其背后的数学原理。之后在Coursera上又找到一门专门讲PCA数学原理的课程,才借此了解些许其中的数学原理,在此坐下记录,以便日后复习。
期望与方差
期望(Expectation):简单来说,期望能够反映一组数据的平均值情况。其中一个定义为:
E(X) = 1N∑Ni=1xi
。由期望的定义不难得出以下性质:
E(X+a) = E(X)E(aX) = aE(x)(1)(2)
方差(Variance): 方差反映的是一组数据里各个数据点相对期望值的分散程度的总和。定义如下:
Var(X) = 1N∑Ni=1(xi −E(X))2
。从方差的定义也不难推导出如下性质:
Var(X+a) = Var(X)Var(aX)=a2Var(X)(3)(4)
协方差
协方差(Covariance): 方差只是放映一个维度内的数据的分散程度,而协方差则用来表示不同纬度之间数据的相关性。
假设有两组数据X,Y,那他们的协方差定义为
Cov(X,Y) = 1N∑i=1N(xi −E(X))(yi−E(Y))=E[(X−E(X))(Y−E(Y))]
.
如果协方差是正数,代表两组数据正相关,简单来说就是一组数据若有变大趋势,另外一组也有变大的趋势。如果为负数,就是负相关。为零,则代表两组数据不相关。
对于多组数据,协方差通常表示为协方差矩阵(Covariance matrix)。假设两组数据X,Y, 那他们的协方差表示为
S =(cov(X,X)cov(Y,X)cov(X,Y)cov(Y,Y))
协方差矩阵的维度D是数据的维度。例如有在实际应用中,数据会如下存储
X∈RN∗D
, 这个说明数据按行存储,有N行,每个数据的维度D。在这种前提下,根据协方差矩阵定义和矩阵基本运算,协方差矩阵如下:
S = 1N(X−E(X))T(X−E(X))
不难看出,协方差矩阵是对称矩阵(symmetric matrix),且主对角线元素全都是大于等于0的。协方差矩阵具备一些良好的性质,可以为日后的计算带来很大的便利。关于实对称矩阵的半正定性质,一起其他性质,在另外一篇博客中记录。
内积
内积(inner product): 不严格的来说,内积可以理解为在向量空间里定义的一种计算方法。具体的定义可见维基百科inner product。简单来说内积满足一下运算条件:
symmetric:
<x,y> = <y,x>
bilinear:
<ax,y> = a<x,y><x+y,z> = <x,z>+<y,z>
positive definite:
<x,x> ⩾0, equality holds if only if x =0
有了内积的定义,可以用来定义向量的长度,以及向量之间的夹角
向量的长度:
||x|| = <x,x>‾‾‾‾‾‾‾‾√
向量之间的角度:
cosθ=<x,y>||x||∗||y||
当向量之间角度为90度时,两个向量正交。可以看出向量的长度与向量之间的角度跟内积的具体定义有关系,我们通常所熟悉的点积(dot product)就是内积的一种。
投影矩阵
有了内积的定义,我们就可以继续定义什么是投影(projection)。
先从一维情况来看,当我们想在向量空间(vector space)U中找到一个向量p, 且希望||p-x||尽量小时,很明显当向量x-p垂直于向量p时,||p-x||最小。假设向量空间U的基(basis)为向量b。我们可以推导出一维时,投影矩阵。
∵p∈U, ∴p = λb, λ∈R由内积的正交的定义可得 <x−p,b> =0⇔<x−λb, b> = 0⇔<x,b>−λ<b,b> = 0⇔λ=<x,b>||b||2=xTb||b||2, 内积使用点积定义p = λb=xTb||b||2b∵xTb是标量,所以可以写成bTx∴p = bbT||b||2x
关于更一般的投影矩阵推导,求参考
这里.
正交补和正交分解
正交补(orthogonal complement)和正交分解(orthogonal decomposition)的详细定义请参照维基百科。关键点是以下两点:
· If we look at an n-dimensional vector space
V
and a k-dimensional subspace
W∈V
, then the orthogonal complement
W⊥
is an (n−k)-dimensional subspace of
V
and contains all vectors in
V
that are orthogonal to every vector in
W
.
这一点也比较好理解,一个向量空间V总能找到跟这个向量空间等价的一组标准正交基(orthonormal basis),所以在V中的任何向量,都可以分解成这组标准正交基的线性组合。我们可以把这组标准正交基分为两组,其中一组就是另外一组的正交补,反之亦然,具体表现为第二个点。
· Every vector
x∈V
can be (uniquely) decomposed into
x = ∑ki=1λibi+∑n−kj=1ψjb⊥j, λi,ψj∈R
where
b1,...bk
is a basis of
W
and
b⊥1,...b⊥n−k
is a basis of
W⊥
.
PCA要解决的问题
假设我们一组数据
X={x1, x2, ... ,xn}, xi∈RD
, 我们想要在更低的维度找到一组相似的数据来表示原有的数据。因为原数据的维度是
RD
, 所以一下结论是可以推导出来的。
-
RD
内存在一组标准正交基(orthonormal basis 以后简称ONB),所以X可以被重新表示为:
xn = ∑Di=1Binbi
- 由之前推导的一维投影公式可知,
Bin=xTnbi
- 由正交分解可得,
x = ∑ki=1βibi+∑n−kj=1ψjb⊥j, λi,ψj∈R
,我们可以把前半部分ONB看成主要的(Principle basis),后面的正补基看成次要的。PCA简而言之就是要找到一组主要的ONB(
b1,...bk
)和 相应的
B
(也叫坐标coordinates 或者code),忽略后半部分。然后尽可能的保有原来数据的属性。所以经过PCA变换后的数据为:
xn˜ = ∑ki=1Binbi
- 损失函数定义如下:
J = 1N∑Nn=1||xn−xn˜||2
计算投影的坐标
这部分以后下部分计算会涉及矩阵微分(matrix calculus), 相关参考在这里。对
Bin
的计算可以对J求偏导数得到,具体计算过程如下:
已知:
xn˜ = ∑j=1MBjnbjJ = 1N∑n=1N||xn−xn˜||2B={b1,...,bM},where b1,...,bM are orthonormal basis(1)(2)(3)
可得:
∂J∂xn˜=−2N(xn−xn˜)T∂xn˜∂Bjn=bj
∂J∂Bjn=∂J∂xn˜∗∂xn˜∂Bjn=−2N(xn−xn˜)Tbj=(1)−2N(xTnbj−(∑j=1MBjnbTj)bj)nbj−(∑j=1MBjnbTj)bj)=(3)−2N=1MBjnbTj)bj)=(3)−2N(xTbj)