前言

在之前一些文章的讨论中,通过一些例子我们可以发现(主要是关于决策树或随机森林的相关内容)其实并不是样本的所有属性可能都是那么得重要,只要不是同等重要,特别是在分类问题上可能可以去除一些属性或特征(一般决策树需要进行剪枝,其实剪枝的原因就在于此)依然能够得到较好的结果(尽管在一些场合会损失掉准确性),那么这个问题的实质其实就是机器学习的降维问题。

对于数据进行降维的处理,不仅可以使得在计算上可能更为简便或简单,而且可以更为节省存储资源,如计算机的硬盘或内存等。数据对象能够被降维,那么它的一些可以被去除的特征就一定不是太重要,或者说某些特征和另外一些特征存在一定程度的关联,而且关联的程度越深则去除这些特征所导致的结果就和原来问题之间的差别越小。

本文所涉及的降维方法其实也是比较主流的几种,包括主成分分析(Principal ComponentsAnalysis,简称PCA)、奇异值分解(Singular Value Decomposition,简称SVD)、局部线性嵌入(Locally Linear Embedding,简称LLE)以及多维度尺度分析等,还会涉及到关于多分类情况下的降维方法——Fisher方法,最后还会要简单地讨论下关于降维问题的逆问题,主要是字典学习和稀疏表示,在讨论这个方法时,还会涉及到SVD方法,只不过是被称作KSVD而已。

个人以为数据的降维方法不能完全归类于机器学习范畴(因为机器学习的本质不完全是优化指令,而是从数据中获取经验,从而提升输出效用),但数据降维的好处是在于可以减少运算量。

主成分分析及奇异值分解

在阐述比较通用的奇异值分解问题之前,本文先讨论下关于主成分分析的相关内容。对于主成分分析的定义是(利用数学语言):一个正交化线性变换,把数据变换到一个新的坐标系统中,使得这一数据的任何投影的第一大方差在第一个坐标(称为第一主成分)上,第二大方差在第二个坐标(第二主成分)上,依次类推。

  从上述定义所涉及的相关内容上看,主成分分析(有的地方被称为主元分析)根本上就是找到一组正交向量把在高维坐标系下的点相应地变换到低维坐标系上,其变换依据其实就是特征值及其特征向量,在变换的过程中会舍弃一些特征值及其特征向量,而被舍弃的这些东西是对最终变换所形成的结果没有特别大的影响(因为就其表现而言,相关方差较小),所以这种方法才被成为主成分分析。

在较为形式化地阐述这个问题之前,先对一些符号的使用进行约束。本文默认的认为具有较高维度数据或对象的维度为p,而具有较低维度的数据或对象的维度是d(网上绝大多数文章使用的分别是m和r),而对象的数量(样本的数量)依旧是N。

对于正交化的向量(也被称作正交化的基)定义(因为我们讨论的是降维情形,故假设有p个)如下:

基于深度学习的数据降维 数据降维方法有哪些_特征值

   而我们还引入x0作为原坐标的原点,在后面的推导过程中可以看出这个原点其实就是原样本的均值。

对于相关变换,我们希望其尽量不存在差异或者差异越小越好,故有如下目标函数:

基于深度学习的数据降维 数据降维方法有哪些_数据结构与算法_02


   如果上式的结果为零,就可以认为降维的任务被完美地完成,但这几乎是不可能的事情,故只要足够小就可以了,所以我们在上式的基础上加入约束,利用拉格朗日乘数法能够对如下函数计算相关参数的取值(对于所有样本点):

基于深度学习的数据降维 数据降维方法有哪些_数据结构与算法_03

             由公式6可以看出就是相关特征值,而且由于上式的左半部分是一个半正定矩阵,故其特征值一定是大于等于0的,所以我们能够得到一个化简后的函数:

基于深度学习的数据降维 数据降维方法有哪些_数据结构与算法_04


   至此我们就得到了一个主成分分析在数学上的解释。需要注意的是,为了使得公式8最小,则需要将这些特征值由大至小地进行排列方能获得正确的结果。

 

以上的推导过程可能与网上的相关文章介绍多少有些区别,因为大多数文章的描述主要是针对样本的协方差进行的,这个其实和本文没有太大的不同,只不过角度上略有差异。而且本文所使用的方法和SVD算法几乎是一样的,所以以下只简单的再描述下主流方法的相关内容。


关于主成分分析,一般的过程如下:

  1. 对于样本矩阵X,求解其协方差矩阵Σ
  2. 对于协方差矩阵Σ,求解其特征值(共p个);
  3. 对于这些特征值计算特征向量ξi,根据降维的需要及其大小排列组成变换矩阵Q(保留d个特征值最大的特征向量);
  4. 利用变换阵Q,计算降维的样本矩阵Y中每一个样本:


   从上面的求解步骤可以看出,这个和之前的推导没有区别,只不过之前的方法可能在原理上更为清晰和明确,因为它体现了在机器学习理论中对于一致性(错误越少越好)和紧致性(类内差异越小越好)的要求,而其它的一般性的对于主成分分析法并没有在原理上讲述的那么清楚(一般没有交代为什么需要在p个协方差中获取值最大的d个方差)。

顺便说一下,其实很多工具都提供了计算相关工具,比如说计算矩阵的特征值、特征向量,如在R中,就可以使用函数eigen来计算。


在讨论完主成分分析后,我们在来看下关于奇异值分解问题(其实这个问题在讨论完主成分分析后再进行论述的意义不是太大,或者我们可以先讨论SVD再讲述PCA,但考虑到完整性,这里还是再次简要的阐述其方法)。

奇异值分解就是基于如下的一个公式:

基于深度学习的数据降维 数据降维方法有哪些_数据_05


   为了与前面保持一致,其中X是样本矩阵,其维度是p,共有N列(样本的数量),而U则是一个p*p的正交方阵,其向量被称作左奇异向量;而Σ是一个p*N的矩阵,其对角线上为奇异值(这些奇异值应被从大到小进行排列),其它元素为0;最后Y则是以一个N*N的正交方阵,其向量被称作右奇异向量。

那么有了上述公式,改如何降维?我们可以将公式9改成一个对近似公式的求解:

基于深度学习的数据降维 数据降维方法有哪些_数据_06

   

数据降维的结构性保证

在对数据降维后,如何保证降维后的在结构上一些不变特性,从而达到数据不至于被过多地扭曲或变形,本节主要就是从局部和全局角度来讨论这个问题。

局部线性嵌入

局部线性嵌入的目标就是在数据降维后仍然保留原始的高维数据的拓扑结构,这种拓扑结构主要表现在数据点局部的邻接关系上。

             而描述这种邻接关系,主要是利用数据点局部的邻接点之间的线性组合,即我们希望最小化如下的目标函数:

基于深度学习的数据降维 数据降维方法有哪些_基于深度学习的数据降维_07

   其中N(k)是样本点的邻接样本点,而是连接权值,它们的和等于1那么对于公式11的在约束下的求解就能够得到相关参数的解。

以下令为的K个近邻所构成的矩阵,而令

,为向量系数,则公式11可以改写为如下形式:

基于深度学习的数据降维 数据降维方法有哪些_数据结构与算法_08

基于深度学习的数据降维 数据降维方法有哪些_数据结构与算法_09


    那么利用上述被求出的相关连接参数,当数据点嵌入到低维空间时,有如下目标函数:

基于深度学习的数据降维 数据降维方法有哪些_人工智能_10

   注意公式18所求取的目标函数是一个Frobenius范数,这个范数又被称作F范数,它和矩阵的1范数、2范数、p范数以及无穷范数均不相同,读者可以参看相关文档。

通过对上式求解,我们可以得到相关结论为:

基于深度学习的数据降维 数据降维方法有哪些_特征值_11

通过推导,可以看出如若想公式19的值尽量得小,则应取矩阵M的最小d个特征值,但其最小值一般非常接近于0,则应取2到d+1个特征值及其对应的特征向量。

不过局部线性嵌入的应用存在一定局限性,主要是将其用于开放式的流型处理,而且对于k紧邻的选择需要注意,不能过小也不宜过大(一般认为至少不能超过降维后的维度大小)。目前有多种对于这个算法的改进,主要在于对于邻接点的选择,最好是在以嵌入点为中心的超球体的周边均匀地寻找邻居样本(可利用余弦夹角),则这样的效果更好。

多维度尺度分析及等距映射

上节的局部线性嵌入着重从局部出发,保证降维后的数据仍然保留原始数据的局部邻接特征,而多维度尺度分析及等距映射乃是从全局角度出发对数据进行降维,也就是说降维后的数据仍能保持在高维坐标下的任意两点间距离关系。

           现令数据在高维下的距离为DX,而数据在低维下的数据为DY,那我们的目标函数就是:

基于深度学习的数据降维 数据降维方法有哪些_特征值_12


   也就是说降维之前的距离和降维之后的距离差异尽量得小,上式也可以写成如下形式:

基于深度学习的数据降维 数据降维方法有哪些_人工智能_13

   其中,和分别是降维之前点k、l之间的距离以及降维之后两点之间的距离。这两点之间的距离可以采用欧式距离。

 

现定义矩阵T,它是N*N方阵,且矩阵的元素:

基于深度学习的数据降维 数据降维方法有哪些_人工智能_14

是样本均值向量然后展开上式,最终可以得到如下公式:

基于深度学习的数据降维 数据降维方法有哪些_特征值_15


    求解上述问题只要对矩阵T进行特征分解即可,如把数据降到d维,则只需提取前d个特征向量。

多分类数据降维

不知读者是否注意,本文之前的相关降维讨论,除了对于特征及特征向量求取,其实也大都会涉及到均值的计算或使用,而之前我们只是默认这些待降维的样本都是来自同一类别,而本节会讨论下多分类的降维问题。

在推导多分类降维公式前,根据由简到难的研究思路,首先研究下二分类的数据降维。

以下就是根据Fisher线性判别式进行讨论的。

设若样本集合为

,其中是样本的类标,在二分类的情况下就是1和0,每个样本表示为p维特征向量。Fisher线性判别分析将N个样本投影到低维空间而得到


而分类线性判别分析希望找到一个由d维向量w定义的投影方向,将样本x投影到向量w上,从而样本维度由p维降到1维,而在降维后样本的可分性更好。

假设v1v2分别是样本X两个分类的均值,则我们希望这两个类中的样本和其均值具有最小的差异。以下给出两个类的类内差异:

基于深度学习的数据降维 数据降维方法有哪些_特征值_16


对于公式27而言,在二分类情况下i的取值范围只是1和2。

根据上式定义类内散布差异矩阵:

基于深度学习的数据降维 数据降维方法有哪些_特征值_17


    通过对于公式28的求解即可得v1v2分别就是类1和类2的样本均值。

既然有了类内差异评估公式,很自然的也有类间差异评估,而我们要求这个类间差异越大越好:

基于深度学习的数据降维 数据降维方法有哪些_特征值_18


   在分析了二分类线性判别之后,关于多分类线性判别相关内容就呼之欲出了,其公式与而分类在形式上几乎没有太大差别,只不过在分析类间差异时使用了样本总体均值v

对于c个类的类内差异定义如下:

基于深度学习的数据降维 数据降维方法有哪些_特征值_19


   在公式33中,v就是样本总体的均值。

             故通过上述推导,可知只要最大化如下函数即可:

基于深度学习的数据降维 数据降维方法有哪些_人工智能_20


字典学习和稀疏表示

有时我们需要考虑对于稠密的样本点时,如何在更高维获取其相对稀疏的表示(这样做的目的是什么?),而进行这类变换的矩阵中的向量就被称作字典。更为形式化的表达就是,对于在维度为d的空间中的若干样本组成的矩阵Y,需要寻找字典矩阵W=[w1,w2,...,wp]进行相应地转换(字典中的向量是d维的,共p个向量),转换后的相对稀疏的矩阵输出为X,这个输出矩阵的维度为p,而且p > d,整个过程被称作字典学习。

               综上所述,对于结果,我们希望最小化如下目标函数:

基于深度学习的数据降维 数据降维方法有哪些_数据结构与算法_21

但是能满足上式的坐标系过多,我们应该选择一个最为简单的形式,即在高维空间中向量所含0的个数越多越好(当然不一定是全0,否则没有任何意义;这里就看出对于稀疏的要求),而这个要求恰是矩阵的0范数,但由于0范数没有相关的解析式,也无法直接求解,故我们转而求其次使用1范数,所以公式35被写作如下形式:

基于深度学习的数据降维 数据降维方法有哪些_人工智能_22


   在公式36中,可以看出需要最小的参数实际上包含了字典和Y在高维空间稀疏的表示形式X。而如何求解此公式中的?因为其中包含了1范数,故公式不可导,只能使用和LASSO回归类似的方式求解(即FIST方法)。

              对于如何求解公式36中的字典?这里需要使用所谓的KSVD方法,如下:

基于深度学习的数据降维 数据降维方法有哪些_数据结构与算法_23


X的第i行(不是i列,否则就是一个样本了),而是字典向量。那么,该如何理解上式?实际上就是评估待求字典的第i列对于输出的相关影响。

  KSVD的运作过程如下:

  1. 将矩阵Ei进行SVD分解;
  2. 使用分解后的第一个左奇异向量(列向量)更新字典;
  3. 使用分解后的第一个右奇异向量(列向量)乘以第一个特征值更新;
  4. 选取下一个进行分解。

 

这样交叉更新和字典,直至整体收敛为止。

 

注意在更新字典和时,应只更新对应的非0元素(故其实对于也应进行收缩,即删去元素为0的部分,重新组织成一个新的矩阵),否则无法保证矩阵X的稀疏性质。对于这个算法而言,笔者的理解就是评估最为显著部分对于升维的影响,因为对于矩阵进行SVD分解后,其第一个特征值是最大的(相应的,其特征向量也是最为显著或可以说其显著水平最高)。


https://blog.51cto.com/13345387/1977851