李宏毅机器学习课程笔记-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}\)

\[\begin{split} &z_1=w^1\cdot x\\ &\bar{z_1}=\frac{1}{N}\sum z_1=\frac{1}{N}\sum w^1\cdot x=w^1\cdot \frac{1}{N}\sum x=w^1\cdot \bar x \end{split} \]

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

\[\begin{split} Var(z_1)&=\frac{1}{N}\sum\limits_{z_1} (z_1-\bar{z_1})^2\\ &=\frac{1}{N}\sum\limits_{x} (w^1\cdot x-w^1\cdot \bar x)^2\\ &=\frac{1}{N}\sum (w^1\cdot (x-\bar x))^2\\ \end{split} \]

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

\[\begin{split} Var(z_1)&=\frac{1}{N}\sum (w^1\cdot (x-\bar x))^2\\ &=\frac{1}{N}\sum(w^1)^T(x-\bar x)(x-\bar x)^T w^1\\ &=(w^1)^T\frac{1}{N}(\sum(x-\bar x)(x-\bar x)^T) w^1\\ \end{split} \]

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

\[\begin{split} Var(z_1)&=(w^1)^T\frac{1}{N}(\sum(x-\bar x)(x-\bar x)^T) w^1\\ &=(w^1)^T Cov(x)w^1\\ &=(w^1)^TSw^1 \end{split} \]

在使得\(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:

\[\begin{split} &\partial g(w^1)/\partial w_1^1=0\\ &\partial g(w^1)/\partial w_2^1=0\\ &\partial g(w^1)/\partial w_3^1=0\\ &... \end{split} \]

整理上式,可以得到:\(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\)的每个元素做偏微分:

\[\begin{split} &\partial g(w^2)/\partial w_1^2=0\\ &\partial g(w^2)/\partial w_2^2=0\\ &\partial g(w^2)/\partial w_3^2=0\\ &... \end{split} \]

整理上式可得\(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\),所以:

\[\begin{split} (w^1)^TSw^2&=((w^1)^TSw^2)^T\\ &=(w^2)^TS^Tw^1\\ &=(w^2)^TSw^1 \end{split} \]

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

\[\begin{split} (w^1)^TSw^2&=(w^2)^TSw^1\\ &=\lambda_1(w^2)^Tw^1\\ &=0 \end{split} \]

因此有\((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

\[\begin{split} &x= \left [ \begin{matrix} u_1\ u_2\ ...\ u_k \end{matrix} \right ]\cdot \left [ \begin{matrix} c_1\\ c_2\\ ...\\ c_k \end{matrix} \right ]\\ \\ &\left [ \begin{matrix} x_1\\ x_2\\ ...\\ x_n \end{matrix} \right ]=\left [ \begin{matrix} u_1^1\ u_2^1\ ... u_k^1 \\ u_1^2\ u_2^2\ ... u_k^2 \\ ...\\ u_1^n\ u_2^n\ ... u_k^n \end{matrix} \right ]\cdot \left [ \begin{matrix} c_1\\ c_2\\ ...\\ c_k \end{matrix} \right ]\\ \end{split} \]

使用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):@绝版臭咸鱼

微信公众号:@臭咸鱼

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


posted @ 2021-06-22 10:01  臭咸鱼  阅读(291)  评论(0编辑  收藏  举报