Unsupervised Learning: PCA(Ⅱ)

本文主要从组件和SVD分解的角度介绍PCA,并描述了PCA的神经网络实现方式,通过引入宝可梦、手写数字分解、人脸图像分解的例子,介绍了NMF算法的基本思想,此外,还提供了一些PCA相关的降维算法和论文

Reconstruction Component

假设我们现在考虑的是手写数字识别,这些数字是由一些类似于笔画的basic component组成的,本质上就是一个vector,记做,以MNIST为例,不同的笔画都是一个28×28的vector,把某几个vector加起来,就组成了一个28×28的digit

写成表达式就是:

其中代表某张digit image中的pixel,它等于k个component的加权和加上所有image的平均值

比如7就是,我们可以用来表示一张digit image,如果component的数目k远比pixel的数目要小,那这个描述就是比较有效的

实际上目前我们并不知道~具体的值,因此我们要找这样k个vector,使得越接近越好:

而用未知component来描述的这部分内容,叫做Reconstruction error,即

接下来我们就要去找k个vector 去minimize这个error:

回顾PCA,,实际上我们通过PCA最终解得的就是使reconstruction error最小化的,简单证明如下:

NN for PCA

现在我们已经知道,用PCA找出来的就是k个component

,我们要使之间的差距越小越好,我们已经根据SVD找到了的值,而对每个不同的样本点,都会有一组不同的

在PCA中我们已经证得,这k个vector是标准正交化的(orthonormal),因此:

这个时候我们就可以使用神经网络来表示整个过程,假设是3维向量,要投影到k=2维的component上:

Weakness of PCA

PCA有很明显的弱点:

PCA for Pokemon

这里举一个实际应用的例子,用PCA来分析宝可梦的数据

假设总共有800只宝可梦,每只都是一个六维度的样本点,即vector={HP, Atk, Def, Sp Atk, Sp Def, Speed},接下来的问题是,我们要投影到多少维的空间上?

如果做可视化分析的话,投影到二维或三维平面可以方便人眼观察

实际上,宝可梦的是6维,最多可以投影到6维空间,我们可以先找出6个特征向量和对应的特征值,其中表示第i个投影维度的variance有多大(即在第i个维度的投影上点的集中程度有多大),然后我们就可以计算出每个的比例,ratio=

从上图的ratio可以看出所占比例不高,即第5和第6个principle component(可以理解为维度)所发挥的作用是比较小的,用这两个dimension做投影所得到的variance很小,投影在这两个方向上的点比较集中,意味着这两个维度表示的是宝可梦的共性,无法对区分宝可梦的特性做出太大的贡献,所以我们只需要利用前4个principle component即可

注意到新的维度本质上就是旧的维度的加权矢量和,下图给出了前4个维度的加权情况,从PC1到PC4这4个principle component都是6维度加权的vector,它们都可以被认为是某种组件,大多数的宝可梦都可以由这4种组件拼接而成,也就是用这4个6维的vector做linear combination的结果

我们来仔细分析一下这些组件:

PCA for MNIST

再次回到手写数字识别的问题上来,这个时候我们就可以熟练地把一张数字图像用多个组件(维度)表示出来了:

这里的就表示降维后的其中一个维度,同时也是一个组件,它是由原先28×28维进行加权求和的结果,因此也是一张28×28的图像,下图列出了通过PCA得到的前30个组件的形状:

注:PCA就是求的前30个最大的特征值对应的特征向量

PCA for Face

同理,通过PCA找出人脸的前30个组件(维度),如下图所示:

用这些脸的组件做线性组合就可以得到所有的脸

What happens to PCA

在对MNIST和Face的PCA结果展示的时候,你可能会注意到我们找到的组件好像并不算是组件,比如MNIST找到的几乎是完整的数字雏形,而Face找到的也几乎是完整的人脸雏形,但我们预期的组件不应该是类似于横折撇捺,眼睛鼻子眉毛这些吗?

如果你仔细思考了PCA的特性,就会发现得到这个结果是可能的

注意到linear combination的weight 可以是正的也可以是负的,因此我们可以通过把组件进行相加或相减来获得目标图像,这会导致你找出来的component不是基础的组件,但是通过这些组件的加加减减肯定可以获得基础的组件元素

NMF

Introduction

如果你要一开始就得到类似笔画这样的基础组件,就要使用NMF(non-negative matrix factorization),非负矩阵分解的方法

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

而NMF的基本精神是,强迫使所有组件和它的加权值都必须是正的,也就是说所有图像都必须由组件叠加得到

注:关于NMF的具体算法内容可参考paper(公众号回复“NMF”获取pdf):

Daniel D. Lee and H. Sebastian Seung. "Algorithms for non-negative matrix factorization."Advances in neural information processing systems. 2001.

NMF for MNIST

在MNIST数据集上,通过NMF找到的前30个组件如下图所示,可以发现这些组件都是由基础的笔画构成:

NMF for Face

在Face数据集上,通过NMF找到的前30个组价如下图所示,相比于PCA这里更像是脸的一部分

More Related Approaches

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