【深度学习】数据降维方法总结

引言:

  机器学习领域中所谓的降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中。降维的本质是学习一个映射函数 f : x->y,其中x是原始数据点的表达,目前最多使用向量表达形式。 y是数据点映射后的低维向量表达,通常y的维度小于x的维度(当然提高维度也是可以的)。f可能是显式的隐式的线性的非线性的

  目前大部分降维算法处理向量表达的数据,也有一些降维算法处理高阶张量表达的数据。之所以使用降维后的数据表示是因为:①在原始的高维空间中,包含有冗余信息以及噪音信息,在实际应用例如图像识别中造成了误差,降低了准确率;而通过降维,我们希望减少冗余信息所造成的误差,提高识别(或其他应用)的精度。 ②又或者希望通过降维算法来寻找数据内部的本质结构特征。

  在很多算法中,降维算法成为了数据预处理的一部分,如PCA。事实上,有一些算法如果没有降维预处理,其实是很难得到很好的效果的。

  • 数据降维的目的

  数据降维,直观地好处是维度降低了,便于计算和可视化,其更深层次的意义在于有效信息的提取综合及无用信息的摈弃

  • 数据降维的方法

  主要的方法是线性映射非线性映射方法两大类。

一、线性映射

  线性映射方法的代表方法有:PCA(Principal Component Analysis)LDA(Discriminant Analysis)

1.1  主成分分析算法(PCA)

  主成分分析(PCA) 是最常用的线性降维方法,它的目标是通过某种线性投影,将高维的数据映射到低维的空间中表示,并期望在所投影的维度上数据的方差最大,以此使用较少的数据维度,同时保留住较多的原数据点的特性。 是将原空间变换到特征向量空间内,数学表示为AX = γX。

  为什么要用协方差矩阵来特向分解呢? 
  协方差矩阵表征了变量之间的相关程度(维度之间关系)。 
  对数据相关性矩阵的特向分解,意味着找到最能表征属性相关性的特向(最能表征即误差平方最小)。PCA一开始就没打算对数据进行特向分解,而是对数据属性的相关性进行分析,从而表示出最能代表属性相关性的特向,然后将原始数据向这些特向上投影。所以,有的地方说PCA去相关。

  通俗的理解,如果把所有的点都映射到一起,那么几乎所有的信息(如点和点之间的距离关系)都丢失了,而如果映射后方差尽可能的大,那么数据点则会分散开来,以此来保留更多的信息。可以证明,PCA是丢失原始数据信息最少的一种线性降维方式。(实际上就是最接近原始数据,但是PCA并不试图去探索数据内在结构)

  设 n 维向量w为目标子空间的一个坐标轴方向(称为映射向量),最大化数据映射后的方差,有:

  其中 m 是数据实例的个数,xi 是数据实例 i 的向量表达, x拔是所有数据实例的平均向量。定义W 为包含所有映射向量为列向量的矩阵,经过线性代数变换,可以得到如下优化目标函数:

  其中tr表示矩阵的迹,A是数据协方差矩阵。

  容易得到最优的W是由数据协方差矩阵前 k 个最大 的特征值对应的特征向量作为列向量构成的。这些特征向量形成一组正交基并且最好地保留了数据中的信息。

  PCA的输出就是Y = W*X,由X的原始维度降低到了k维。

  PCA追求的是在降维之后能够最大化保持数据的内在信息,并通过衡量在投影方向上的数据方差的大小来衡量该方向的重要性。但是这样投影以后对数据的区分作用并不大,反而可能使得数据点揉杂在一起无法区分。这也是PCA存在的最大一个问题,这导致使用PCA在很多情况下的分类效果并不好。具体可以看下图所示,若使用PCA将数据点投影至一维空间上时,PCA会选择2轴,这使得原本很容易区分的两簇点被揉杂在一起变得无法区分;而这时若选择1轴将会得到很好的区分结果。

PCA优缺点:

  优点:1.最小误差 2.提取了主要信息

  缺点:PCA将所有的样本(特征向量集合)作为一个整体对待,去寻找一个均方误差最小意义下的最优线性映射投影,而忽略了类别属性,而它所忽略的投影方向有可能刚好包含了重要的可分性信息。

1.2 线性判别分析(LDA)

  判别分析(Discriminant Analysis) 所追求的目标与PCA不同,不是希望保持数据最多的信息,而是希望数据在降维后能够很容易地被区分开来。后面会介绍LDA的方法,是另一 种常见的线性降维方法。另外一些非线性的降维方法利用数据点的局部性质,也可以做到比较好地区分结果,例如LLE,Laplacian Eigenmap等。以后会介绍。

  LDA是一种有监督的(supervised)线性降维算法。与PCA保持数据信息不同,核心思想:往线性判别超平面的法向量上投影,是的区分度最大(高内聚,低耦合)。LDA是为了使得降维后的数据点尽可能地容易被区分!

  假设原始数据表示为X,(m*n矩阵,m是维度,n是sample的数量)

  既然是线性的,那么就是希望找到映射向量a, 使得 a‘X后的数据点能够保持以下两种性质:

    1、同类的数据点尽可能的接近(within class)

    2、不同类的数据点尽可能的分开(between class)

  所以呢还是上次PCA用的这张图,如果图中两堆点是两类的话,那么我们就希望他们能够投影到轴1去(PCA结果为轴2),这样在一维空间中也是很容易区分的。

二、非线性映射

  非线性映射方法的代表方法有:核方法(核+线性),二维化和张量化(二维+线性),流形学习(ISOMap,LLE,LPP)

2.1  基于核的非线性降维

  代表方法有:KPCA,KFDA。 
  KPCA的基本思想:通过Kernel trick将PCA投影的过程通过内积的形式表达出来。将高维向量?(x)与对应特向β?(x)与对应特向β的内积转换成低维的核函数表示。

2.2  流形学习

  流形学习的主要算法有:ISOMap(等距映射)、LE(拉普拉斯特征映射)、LLE(局部线性嵌入)。 
  流形:直线或者曲线是一维流形,平面或者曲面是二维流形,更高维之后是多维流形。一个流形好比是 d 维的空间,是一个 m 维空间(m>n)被扭曲之后的空间。流形并不是一个“形状”,而是一个“空间” 
  流形学习的假设:数据采样于某一流形上。

2.2.1  ISOMap(等距特征映射)

  ISOMap是一种非迭代的全局优化算法。ISOMap对MDS(Multidimensional Scaling-多维尺度分析)进行改造,用测地线距离(曲线距离)作为空间中两点距离,原来是用欧氏距离,从而将位于某维流形上的数据映射到一个欧氏空间上。 
  ISOMap将数据点连接起来构成一个邻接Graph来离散地近似原来流形,而测地距离则相应地通过Graph上的最短路径来近似了。 
  比如:我们将球体曲面映射到二维平面上。 
  此博客写得通俗易懂:http://blog.pluskid.org/?p=533 
  几点注意: 
  1)ISOMap适用的流形:适合于内部平坦的低维流形,不适合于学习有较大内在曲率的流形。 
  2)近邻数的选择:近邻数应足够大以便能够减少在路径长度和真实测地距离之间的不同,但要小到能够预防“短路”现象。 
  3)所构造图的连通性:要求所构造的图示连通的,否则有两种处理办法,一种是放宽临界点选择的限制,另一种是对于每一连通部分分别使用ISOMap算法,得到不同部分的降维结果。 
  数据到底是否分布于一个流形上?这是个暂时难以回答的问题。 
  MDS是一种降维方法,它在降维时使得降维之后的两点间的欧氏距离尽量保持不变(用欧氏距离矩阵来表示高维向量的两两之间的相似度,寻找同样数量的映射维度的向量,使得映射维度下两两间距离约等于原高维下两两间距离,变为了优化问题)。维基百科对MDS的介绍https://en.wikipedia.org/wiki/Multidimensional_scaling

2.2.2  LLE(局部线性嵌入)

  前提假设:数据没有形成一个封闭的超曲面,局部数据点是线性的。 
  LLE(Locally Linear Embedding-局部线性嵌入)是一种非线性降维算法,它能够使降维后的数据较好地保持原有 流形结构 。LLE用局部线性反映全局的非线性的算法,并能够使降维的数据保持原有数据的拓扑结构。(在流形上使用局部线性,并用有限局部样本的互相线性表示,得到几何特性的构造权重矩阵,在低维下找到满足高维时样本间构造权重的样本集)

  使用LLE将三维数据(b)映射到二维(c)之后,映射后的数据仍能保持原有的数据流形(红色的点互相接近,蓝色的也互相接近),说明LLE有效地保持了数据原有的流行结构。

  但是LLE在有些情况下也并不适用,如果数据分布在整个封闭的球面上,LLE则不能将它映射到二维空间,且不能保持原有的数据流形。那么我们在处理数据中,首先假设数据不是分布在闭合的球面或者椭球面上。

  LLE算法认为每一个数据点都可以由其近邻点的线性加权组合构造得到。算法的主要步骤分为三步:

  1. 寻找每个样本点的k个近邻点;
  2. 由每个样本点的近邻点计算出该样本点的局部重建权值矩阵;
  3. 由该样本点的局部重建权值矩阵和其近邻点计算出该样本点的输出值。

  LLE详细步骤如下: 
  1.计算或者寻找数据点xi的临近数据点。 
    假设数据局部为平面,故可以用线性组合表示xi,其误差为: 
    

    其中wij表示线性重构xi时的贡献比例。 
    找到每个样本点的K个最近邻点。 
  2.计算构造权重并重构数据 
    通过约束计算wij,使得不在该样本点的K个最近邻点中的构造权重都为0. 
    重构权重使得重构的数据点与临近点间的旋转、缩放、平移特性保持不变,即几何特性不依赖于特定的参考框架。 
  3.由重构样本向低维映射。(求低维嵌入) 
    设zz是低维空间,找到同样数量的低维映射样本,使得: 
    

    最小。(不去关心?,直接找zi

  流形学习优缺点: 
  优点:1)假设流形的存在,部分解决了高维数据分布的问题。 
  缺点:1)假设流形的存在,不能总是适合数据特点。

三、小结

  降维方法 __ 属性选择:过滤法、包装法、嵌入法; 
       |_ 映射方法  __线性映射方法:PCA、FDA等 
            |__非线性映射方法: 
                      |__核方法:KPCA、KFDA等 
                      |__二维化: 
                      |__流形学习:ISOMap、LLE、LPP等。 
            |__其他方法:神经网络和聚类

  降维可以方便数据可视化+数据分析+数据压缩+数据提取等。 
  各个降维方法效果图展示:

原文地址:https://www.cnblogs.com/guoyaohua/p/8855636.html

时间: 2024-10-13 16:00:00

【深度学习】数据降维方法总结的相关文章

Python学习——数据排序方法

Python对数据排序又两种方法: 1. 原地排序:采用sort()方法,按照指定的顺序排列数据后用排序后的数据替换原来的数据(原来的顺序丢失),如: >>> data1=[4,2,6,432,78,43,22,896,42,677,12] >>> data1.sort() >>> data1 #原来的顺序被替换 [2, 4, 6, 12, 22, 42, 43, 78, 432, 677, 896] 2. 复制排序:采用sorted()内置函数,按照

数据降维方法小结

原文:http://blog.csdn.net/yujianmin1990/article/details/48223001 数据的形式是多种多样的,维度也是各不相同的,当实际问题中遇到很高的维度时,如何给他降到较低的维度上?前文提到进行属性选择,当然这是一种很好的方法,这里另外提供一种从高维特征空间向低纬特征空间映射的思路. 数据降维的目的 数据降维,直观地好处是维度降低了,便于计算和可视化,其更深层次的意义在于有效信息的提取综合及无用信息的摈弃. 数据降维的方法 主要的方法是线性映射和非线性

车牌识别01__车牌抠图(CNN深度学习—opencv实现方法)

一.安装依赖 1.mac安装brem /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"2.mac安装opencvbrew install opencv3.安装opencv-pythonpip3.6 install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python参考以下地址h

深度学习——Xavier初始化方法

"Xavier"初始化方法是一种很有效的神经网络初始化方法,方法来源于2010年的一篇论文<Understanding the difficulty of training deep feedforward neural networks>,可惜直到近两年,这个方法才逐渐得到更多人的应用和认可. 为了使得网络中信息更好的流动,每一层输出的方差应该尽量相等. 基于这个目标,现在我们就去推导一下:每一层的权重应该满足哪种条件. 文章先假设的是线性激活函数,而且满足0点处导数为1

深度学习的优化方法 总结

SGD:现在的SGD一般都指mini-batch gradient descent 最小批量梯度下降 缺点:(正因为有这些缺点才让这么多大神发展出了后续的各种算法) 选择合适的learning rate比较困难 - 对所有的参数更新使用同样的learning rate.对于稀疏数据或者特征,有时我们可能想更新快一些对于不经常出现的特征,对于常出现的特征更新慢一些,这时候SGD就不太能满足要求了 SGD容易收敛到局部最优,并且在某些情况下可能被困在鞍点 Adagrad: 对学习率进行了一个约束.

Deep Learning(深度学习)之(三)Deep Learning的常用模型或者方法

九.Deep Learning的常用模型或者方法 9.1.AutoEncoder自动编码器 Deep Learning最简单的一种方法是利用人工神经网络的特点,人工神经网络(ANN)本身就是具有层次结构的系统,如果给定一个神经网络,我们假设其输出与输入是相同的,然后训练调整其参数,得到每一层中的权重.自然地,我们就得到了输入I的几种不同表示(每一层代表一种表示),这些表示就是特征.自动编码器就是一种尽可能复现输入信号的神经网络.为了实现这种复现,自动编码器就必须捕捉可以代表输入数据的最重要的因素

Deep Learning(深度学习)学习笔记整理

申明:本文非笔者原创,原文转载自:http://www.sigvc.org/bbs/thread-2187-1-3.html 4.2.初级(浅层)特征表示 既然像素级的特征表示方法没有作用,那怎样的表示才有用呢? 1995 年前后,Bruno Olshausen和 David Field 两位学者任职 Cornell University,他们试图同时用生理学和计算机的手段,双管齐下,研究视觉问题. 他们收集了很多黑白风景照片,从这些照片中,提取出400个小碎片,每个照片碎片的尺寸均为 16x1

Deep Learning(深度学习)学习笔记整理系列之(八)

Deep Learning(深度学习)学习笔记整理系列 [email protected] http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04-08 声明: 1)该Deep Learning的学习系列是整理自网上很大牛和机器学习专家所无私奉献的资料的.具体引用的资料请看参考文献.具体的版本声明也参考原文献. 2)本文仅供学术交流,非商用.所以每一部分具体的参考资料并没有详细对应.如果某部分不小心侵犯了大家的利益,还望海涵,并联系博主

[转载]Deep Learning(深度学习)学习笔记整理

转载自:http://blog.csdn.net/zouxy09/article/details/8775360 感谢原作者:[email protected] 八.Deep learning训练过程 8.1.传统神经网络的训练方法为什么不能用在深度神经网络 BP算法作为传统训练多层网络的典型算法,实际上对仅含几层网络,该训练方法就已经很不理想.深度结构(涉及多个非线性处理单元层)非凸目标代价函数中普遍存在的局部最小是训练困难的主要来源. BP算法存在的问题: (1)梯度越来越稀疏:从顶层越往下