李宏毅机器学习课程笔记-15.2无监督学习之主成分分析

主成分分析即Principal Component Analysis,PCA,它是一种线性降维方法。

主成分分析(1)

PCA即主成分分析(Principe Component Analysis)。PCA假设降维函数是一个linear function,即输入$x$和输出$z$之间是linear transform $z=Wx$,而PCA要做的就是根据很多个$x$找出$W$。

PCA for 1-D

为了简化问题先假设输出$z=W\cdot x$是1个标量(scalar),其中$W$是1个行向量(row vector)、$x$是1个列向量。若假设$W$的模(长度)$||W||_2=1$,此时$z$就是$x$在$W$方向上的投影。

我们希望所有$x$在$W$方向上投影得到的所有$z$分布越大越好,也就是说在投影之后不同样本之间的区别仍然是可以被看得出来的,所以投影结果的variance越大越好,即我们希望找到一个使得投影结果的variance较大的$W$,variance的计算公式为$Var(z)=\frac{1}{N}\sum\limits_{z}(z-\bar{z})^2, ||W||_2=1$,其中$\bar z$是所有$z$的平均值。

PCA for n-D

如果输出$z=Wx$是1个包含$n$个元素的向量($n$需要我们自己确定),其中$W$是1个matrix、$w^i$是$W$中的第$i$个行向量($||w^i||_2=0,1\leq i\leq n$)、$x$是1个列向量,则$z_i=w^i\cdot x$表示$x$在方向$w^i$上的投影。

注:$w^i$必须相互正交,即$W$为正交矩阵(Orthogonal Matrix),否则最终找到的$w^i$实际上是相同的值。

拉格朗日乘子法

如何求出PCA中的参数$W$呢?实际上已经有相关库可以直接调用PCA,此外也可以用神经网络描述PCA算法然后用梯度下降的方法来求解,这里主要介绍用拉格朗日乘子法(Lagrange multiplier)求解PCA的数学推导过程。

注:$w^i$和$x$均为列向量,下文中类似$w^i\cdot x$表示的是矢量内积,而$(w^i)^T\cdot x$表示的是矩阵相乘。

计算$w^1$

结论:$w^1$是$S=Cov(x)$这个matrix中的特征向量,对应最大的特征值$\lambda_1$

首先计算出$\bar{z_1}$:

$Var(z_1)$越大越好,所以我们要使得$Var(z_1)$最大:

因为$(a\cdot b)^2=(a^Tb)^2=a^Tba^Tb=a^Tb(a^Tb)^T=a^Tbb^Ta$,所以:

又因为$Cov(x)=\frac{1}{N}\sum(x-\bar x)(x-\bar x)^T$,并令$S=Cov(x)$,所以:

在使得$Var(z_1)=(w^1)^TCov(x)w^1$最大的同时,还有一个约束条件是$||w^1||_2=(w^1)^Tw^1=1$,否则$w^1$无限大就可以使得$Var(z_1)$但这并没有意义。

因为$S=Cov(x)$,所以S是对称的(symmetric)、半正定的(positive-semidefine)、所有特征值非负的(non-negative eigenvalues)。

使用拉格朗日乘数法,利用目标和约束条件构造函数:$g(w^1)=(w^1)^TSw^1-\alpha((w^1)^Tw^1-1)$,对$w^1$中每个元素求偏微分并使为0:

整理上式,可以得到:$Sw^1=\alpha w^1$,其中$w^1$是$S$的特征向量(eigenvector),但满足$(w^1)^Tw^1=1$的特征向量$w^1$有很多,我们要找的是使得$(w^1)^TSw^1$最大的那个$w_1$,于是可得$(w^1)^TSw^1=(w^1)^T \alpha w^1=\alpha (w^1)^T w^1=\alpha$,因此使得$(w^1)^TSw^1$最大就变成了使得$\alpha$最大,即$S$的特征值$\alpha$最大时对应的那个特征向量$w^1$就是我们要找的$w^1$。

计算$w^2$

在计算$w^2$时比计算$w^1$时多了一个限制条件:$w^2$必须与$w^1$正交(orthogonal)。

所以求解目标为:使得$(w^2)^TSw^2$最大,约束条件为:$(w^2)^Tw^2=1,(w^2)^Tw^1=0$

结论:$w^2$也是$S=Cov(x)$这个matrix中的特征向量,对应第二大的特征值$\lambda_2$

与计算$w^1$一样使用拉格朗日乘子法求解,定义$g(w^2)=(w^2)^TSw^2-\alpha((w^2)^Tw^2-1)-\beta((w^2)^Tw^1-0)$,然后对$w^2$的每个元素做偏微分:

整理上式可得$Sw^2-\alpha w^2-\beta w^1=0$,该式两侧同乘$(w^1)^T$得到$(w^1)^TSw^2-\alpha (w^1)^Tw^2-\beta (w^1)^Tw^1=0$,其中$\alpha (w^1)^Tw^2=0,\beta (w^1)^Tw^1=\beta$。

由于$(w^1)^TSw^2$是vector×matrix×vector=scalar所以在外面套一个transpose不会改变其值,并且S是对称的即$S^T=S$,所以:

已知$w^1$满足$Sw^1=\lambda_1 w^1$,所以:

因此有$(w^1)^TSw^2=0$,$\alpha (w^1)^Tw^2=0$,$\beta (w^1)^Tw^1=\beta$,又根据$(w^1)^TSw^2-\alpha (w^1)^Tw^2-\beta (w^1)^Tw^1=0$,所以$\beta=0$。

此时$Sw^2-\alpha w^2-\beta w^1=0$就转变成了$Sw^2-\alpha w^2=0$即$Sw^2=\alpha w^2$。由于$S$是对称的,因此在与$w_1$不冲突的情况下,这里$\alpha$选取第二大的特征值$\lambda_2$时,可以使$(w^2)^TSw^2$最大。

decorrelation

可知$z=W\cdot x$,有一个神奇的事情是$Cov(z)=D$,即z的covariance是一个对角矩阵(diagonal matrix)。

推导过程如下:

img

PCA可以让降维后数据中不同dimension之间的covariance变为0,即降维后数据中不同feature之间是没有correlation的,这样的好处是减少feature之间的联系从而减少model所需的参数量

如果使用PCA将原数据降维之后再给其他model使用,那这些model就可以直接假设数据的各个维度不相关,这时model得到简化、参数量大大降低,相同的数据量可以得到更好的训练结果,从而可以避免overfitting的发生。

主成分分析(2)

Reconstruction Component

假设我们现在考虑MNIST手写数字识别,可以假设一个数字图片由一些类似于笔画的component(本质上是一个28×28的vector)组成,将这些component记做$u_1,u_2,u_3,…$,我们把$K$个component加权求和就可以组成一个数字图片:$x≈c_1u^1+c_2u^2+…+c_Ku^K+\bar x$,其中$x$是一张数字图片,$\bar x$是所有数字图片的平均值。

假设$K$个component已知,我们就可以用$\left [\begin{matrix}c_1\ c_2\ c_3…c_k \end{matrix} \right]^T$来表示一张数字图片,如果$k$远小于图片像素数量,那这种表示方法就可以有效降维。

那我们要如何找出这$K$个component呢?我们要找到$K$个vector使得$x-\bar x$和$\hat x$越接近越好,其中$\hat x=c_1u^1+c_2u^2+…+c_Ku^K$。

所以目标是使得Reconstruction Error $||(x-\bar x)-\hat x||$最小,即$L=\min\limits_{u^1,…,u^k}\sum||(x-\bar x)-(\sum\limits_{i=1}^k c_i u^i) ||_2$。

回顾PCA中$z=W\cdot x$,实际上我们通过PCA最终解得的$W=\{w^1,w^2,…,w^k\}$就是使Reconstruction Error最小化的$K$个vector$\{u^1,u^2,…,u^k\}$,简单证明如下。

如下图和下式所示,用下图中的矩阵相乘来表示所有的$x^i-\bar x≈c_1^i u^1+c_2^i u^2+…$,其中$x^i$指第$i$张图片,目标是使$\approx$两侧矩阵之间的差距越小越好。

img

使用SVD将每个matrix $X_{m×n}$都拆成matrix $U_{m×K}$、$\Sigma_{K×K}$、$V_{K×n}$的乘积,其中$K$为component的数目。使用SVD拆解后三个矩阵相乘的结果是跟等号左边的矩阵$X$最接近的,此时$U$就对应着$u^i$形成的矩阵、$\Sigma\cdot V$就对应着$c_k^i$形成的矩阵。

根据SVD的结论,组成矩阵$U$的$k$个列向量(标准正交向量,orthonormal vector)就是$XX^T$最大的$k$个特征值(eignvalue)所对应的特征向量(eigenvector),而$XX^T$实际上就是$x$的covariance matrix,因此$U$就是PCA的$k$个解。

PCA寻找$W$的过程,实际上就是把$X$拆解成能够使得Reconstruction Error最小的$k$个component的过程,PCA中要找的投影方向$w^i$就相当于恰当的component $u^i$,PCA中投影结果$z^i$就相当于各个component各自的权重$c_i$。

NN for PCA

由上可知,PCA找出来的$\{w^1,w^2,…,w^k\}$就是$K$个component $\{u^1,u^2,…,u^k\}$。$\hat x=\sum\limits_{k=1}^K c_k w^k$,我们要使$\hat x$与$x-\bar x$之间的差距越小越好。我们已经通过SVD找到了$w^k$的值,而对每个不同的样本$x$都有一组不同的$c_k$值。

在PCA中我们已经证得,$\{w^1,w^2,…,w^k\}$这$k$个vector是标准正交化的(orthonormal),因此$c_k=(x-\bar x)\cdot w^k$,这个时候我们就可以使用神经网络来表示整个过程,如下图所示。

img

如上图所示,假设$x$是3维向量,要投影到2维的component上,即$K=2$。$c_k=(x-\bar x)\cdot w^k$类似于神经网络,$x-\bar x$相当于一个神经元的3维输入,而$w^k_1$,$w^k_2$,$w^k_3$则是该神经元的权重,而$c_k$则是这个神经元的输出。得到$c_1$和$c_2$之后,再让它乘上$w^1$和$w^2$然后求和得到$\hat x$。此时,PCA就被表示成只含一层hidden layer的神经网络,且这个hidden layer是线性的(没有激活函数),训练目标是让这个神经网络的输入$x-\bar x$与输出$\hat x$越接近越好,这就是Autoencoder

注:PCA求解出的$w^i$与上述神经网络所解得的$w^i$是不一样的,因为PCA解出的$w^i$是相互垂直的(orgonormal),而上述神经网络的解无法保证$w^i$相互垂直,神经网络无法做到Reconstruction Error比PCA小。因此,在linear情况下直接用PCA找$W$远比用神经网络的方式更快速方便,神经网络的好处是它可以使用不止一层的hidden layer而可以做Deep Autoencoder。

PCA的缺点

  • PCA是无监督的,没有使用label
  • PCA是线性的,而有时需要non-linear transformation

What happens to PCA

观察PCA对MNIST和Face的降维结果(见原视频),我们发现找到的component好像并不算是component。比如MNIST实验中PCA找到的是几乎完整的数字雏形,而Face实验中找到的是几乎完整的人脸雏形,而我们想象中的组件应该是类似于横折撇捺、眼睛鼻子眉毛等等。

原因是这样的:$x\approx c_1u^1+c_2u^2+…+c_Ku^K+\bar x$,其中$c_i$是可正可负的,所以component不仅可以相加还可以相减,于是PCA得到的组件并不是我们想象中的那样,但通过这些组件的加加减减肯定可以获得我们想象中的基础的component。

如果想要直接得到类似笔画的基础component,就要使用NMF(non-negative matrix factorization,非负矩阵分解)

非负矩阵分解

如果想要直接得到类似笔画的基础component,就要使用NMF(non-negative matrix factorization,非负矩阵分解)

PCA可以看成是对原始矩阵$X$做SVD进行矩阵分解,但并不保证分解后矩阵的正负。实际上在进行图像处理时,如果部分component的matrix包含一些负值的话,如何处理负的像素值也会成为一个问题(可以做归一化处理,但比较麻烦)。

而NMF的基本思路是,强迫使所有component和它的权重都必须是正的,也就是说所有图像都必须由组件叠加(不可相减)得到

相比于PCA,我们可以发现NMF对MNIST和Face的降维结果(见原视频)更接近于我们想象中的基本的component。

其它PCA版本

降维的方法有很多,这里再列举一些与PCA有关的方法:

  • Multidimensional Scaling (MDS) [Alpaydin, Chapter 6.7]

    MDS不需要把每个data都表示成feature vector,只需要知道特征向量之间的distance,就可以做降维,PCA保留了原来在高维空间中的距离,在某种情况下MDS就是特殊的PCA

  • Probabilistic PCA [Bishop, Chapter 12.2]

    PCA概率版本

  • Kernel PCA [Bishop, Chapter 12.3]

    PCA非线性版本

  • Canonical Correlation Analysis (CCA) [Alpaydin, Chapter 6.9]

    CCA常用于两种不同的data source的情况,比如同时对声音信号和唇形的图像进行降维

  • Independent Component Analysis (ICA)

    ICA常用于source separation,PCA找的是正交的组件,而ICA则只需要找“独立”的组件即可

  • Linear Discriminant Analysis (LDA) [Alpaydin, Chapter 6.8]

    LDA是supervised的方式


Github(github.com):@chouxianyu

Github Pages(github.io):@臭咸鱼

知乎(zhihu.com):@臭咸鱼

博客园(cnblogs.com):@臭咸鱼

B站(bilibili.com):@绝版臭咸鱼

微信公众号:@臭咸鱼

转载请注明出处,欢迎讨论和交流!