常用降维方法-常用降维方法解读

1. 引言

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

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

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

2. 主成分分析算法(PCA)

Principal Component Analysis(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轴将会得 到很好的区分结果。

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

优点:

它是无监督学习,完全无参数限制的。在PCA的计算过程中完全不需要人为的设定参数或是根据任何经验模型对计算进行干预,最后的结果只与数据相关,与用户是独立的。

用PCA技术可以对数据进行降维,同时对新求出的“主元”向量的重要性进行排序,根据需要取前面最重要的部分,将后面的维数省去,可以达到降维从而简化模型或是对数据进行压缩的效果。同时最大程度的保持了原有数据的信息。

各主成分之间正交,可消除原始数据成分间的相互影响。

计算方法简单,易于在计算机上实现。

缺点:

如果用户对观测对象有一定的先验知识,掌握了数据的一些特征,却无法通过参数化等方法对处理过程进行干预,可能会得不到预期的效果,效率也不高。

贡献率小的主成分往往可能含有对样本差异的重要信息。

特征值矩阵的正交向量空间是否唯一有待讨论。

在非高斯分布的情况下,PCA方法得出的主元可能并不是最优的,此时在寻找主元时不能将方差作为衡量重要性的标准。

3. LDA

Linear Discriminant Analysis(也有叫做Fisher Linear Discriminant)是一种有监督的(supervised)线性降维算法。与PCA保持数据信息不同,LDA是为了使得降维后的数据点尽可能地容易被区分!

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

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

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

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

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

优点

在降维过程中可以使用类别的先验知识经验,而像PCA这样的无监督学习则无法使用类别先验知识;

LDA在样本分类信息依赖均值而不是方差的时候,比PCA之类的算法较优;

缺点

LDA不适合对非高斯分布样本进行降维,PCA也有这个问题。

LDA降维最多降到类别数k-1的维数,如果我们降维的维度大于k-1,则不能使用LDA。当然目前有一些LDA的进化版算法可以绕过这个问题;

*LDA在样本分类信息依赖方差而不是均值的时候,降维效果不好;

LDA可能过度拟合数据

4. 局部线性嵌入 (LLE)

Locally linear embedding(LLE)是一种非线性降维算法,它能够使降维后的数据较好地保持原有 流形结构 。LLE可以说是流形学习方法最经典的工作之一。很多后续的流形学习、降维方法都与LLE有密切联系。

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

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

LLE算法认为每一个数据点都可以由其近邻点的线性加权组合构造得到。算法的主要步骤分为三步:(1)寻找每个样本点的k个近邻点;(2)由每个 样本点的近邻点计算出该样本点的局部重建权值矩阵;(3)由该样本点的局部重建权值矩阵和其近邻点计算出该样本点的输出值。

5. Laplacian Eigenmaps 拉普拉斯特征映射

Laplacian Eigenmaps,看问题的角度和LLE有些相似,也是用局部的角度去构建数据之间的关系。

它的直观思想是希望相互间有关系的点(在图中相连的点)在降维后的空间中尽可能的靠近。Laplacian Eigenmaps可以反映出数据内在的流形结构。

使用时算法具体步骤为:

1.构建图

使用某一种方法来将所有的点构建成一个图,例如使用KNN算法,将每个点最近的K个点连上边。K是一个预先设定的值。

2.确定权重

确定点与点之间的权重大小,例如选用热核函数来确定,如果点i和点j相连。

见上图所示,左边的图表示有两类数据点(数据是图片),中间图表示采用Laplacian Eigenmap降维后每个数据点在二维空间中的位置,右边的图表示采用PCA并取前两个主要方向投影后的结果,可以清楚地看到,在此分类问题 上,Laplacian Eigenmap的结果明显优于PCA。

上图说明的是,高维数据(图中3D)也有可能是具有低维的内在属性的(图中roll实际上是2D的),但是这个低维不是原来坐标表示,例如如果要保持局部关系,蓝色和下面黄色是完全不相关的,但是如果只用任何2D或者3D的距离来描述都是不准确的。

python怎么降维_【Python算法】常用降维方法-常用降维方法解读相关推荐

  1. python 卡方检验 特征选择_结合Scikit-learn介绍几种常用的特征选择方法

    特征选择(排序)对于数据科学家.机器学习从业者来说非常重要.好的特征选择能够提升模型的性能,更能帮助我们理解数据的特点.底层结构,这对进一步改善模型.算法都有着重要作用. 特征选择主要有两个功能: 减 ...

  2. 小甲鱼python课件源代码_[Python基础] 小甲鱼零基础入门Python学习视频+全套源码课件 Python视频教程 96讲...

    资源介绍 课程简介: 小甲鱼的Python课程,对初学者来说相当不错!97讲完全解读,会让大家对Python的认识从无到有,推荐给大家! 课程目录------------------- 第000讲 愉 ...

  3. python 病毒 基因_#Python#提取基因对应的蛋白质名

    提取基因对应的蛋白质官方名 最开始,是需要将基因跟其编码的蛋白质对应起来,找遍了各种数据库都没发现有相关的注释文件,Uniprot作为处理蛋白质的大佬,结果里都有,肯定有办法能够满足需求. 搜索TP5 ...

  4. python keyboard模块_[python] PyMouse、PyKeyboard用python操作鼠标和键盘

    1.PyUserInput 简介 PyUserInput是一个使用python的跨平台的操作鼠标和键盘的模块,非常方便使用.支持的平台及依赖如下: Linux - Xlib Mac - Quartz, ...

  5. python 字典类型问题_[ python ] 字典类型的一些注意问题

    1) get()方法. 字典可以直接用a[b]的方式访问字典项,但如果b不存在时,会报异常.为了避免这种情况,可以使用get()方法来访问字典项,a.get(b)当b存在时,结果和a[b]一样,如果b ...

  6. python mean函数_聚类算法 Mean-shift

    Mean-shift概述 Mean-shift又称均值迁移算法,它是指在数据集中选定一个点,然后以这个点为圆心,为半径,画一个圆(二维下是圆),求出这个点到所有点的向量的平均值,而圆心与向量均值的和为 ...

  7. python集合排序_排序算法集合

    #### 冒泡排序 ### 时间复杂度是: O(n^2) ### 空间复杂度是: O(1) def BubbleSort(li): for i in range(len(li)): # i = 0 f ...

  8. python 动态规划 回溯_回溯算法 - 全排列算法实现(pythondart)

    回溯算法 , 就是 穷举 解决一个回溯问题,实际上就是一个决策树的遍历过程. 路径: 也就是已经做出的选择 选择列表: 也就是你当前可以做的选择 结束条件: 也就是到达决策树底层,无法再做选择的条件. ...

  9. python playsound安装_ python音频库:Windows下pydub安装配置、过程出现的问题及常用API ...

    < python音频库:Windows下pydub安装配置.过程出现的问题及常用API > 背景 刚从B站上看过倒放挑战之后也想体验下,心血来潮一个晚上完成了基本的实现.其中倒放与播放部分 ...

  10. python进行对应分析_机器学习算法---对应分析

    --------仅用于个人学习知识整理和sas/R语言/python代码整理 --------该文章首发于csdn 正在迁移优化文章中 1.前言 对应分析,主要适用于有多个类别的分类变量,可以揭示同一 ...

最新文章

  1. Android4.0 Design之设计规范的十大革新
  2. 网络之四海:光纤收发器TX、RX分别表示什么?区分单纤双纤收发器的方法
  3. 如何不用鼠标操作电脑
  4. Hermite多项式(信息学奥赛一本通-T1165)
  5. 技术人,其实很有优势
  6. 线性代数matlab的心得体会,关于线性代数心得体会
  7. iperf 服务端发送数据_iperf网络测试工具
  8. 计算机信息网络国际联网安全保护管理办法
  9. Cadence 17.2 Pad Editor入门指南(2)
  10. ---Xubuntu简体中文版, USB盘启动安装方法!
  11. LHS查询 RHS查询
  12. 七夕恋人必备表白源码
  13. 从广告图到广告落地页
  14. WAP(wml)开发问答
  15. java libraries在哪_java.library.path在哪?
  16. 关于人工智能不会使大脑变懒惰的议论文_自律,拒绝懒惰和放纵,不枉余生
  17. 【英语-同义词汇词组】common,general,normal,ordinary,usual | often 与 usually的用法及区别
  18. 对seed()的个人理解
  19. Android线程优化
  20. 对标 Amazon Go,这家初创企业盯上了国内无人商店市场

热门文章

  1. mybatis.zzh
  2. 剑指Offer——“你最大的缺点是什么”回答技巧及范例
  3. 工作网络安全运维兼顾JAVA开发
  4. 中国剩余定理matlab程序,中国剩余定理即孙子定理的五种解法
  5. mysql mediumint是什么类型_MySQL中数值类型中smallint、mediumint等区别是什么 - 晓雨网...
  6. 继续加油~,用这一款工具帮助更多的Cocos3D团队。
  7. STM32之 ESP8266 WIFI 模块驱动代码-可以通过互联网实现数据远程传输(程序稳定,清晰明了非常容易移植到51单片机上)
  8. 照片畸变校正 python_去畸变 opencv
  9. 【C++OpenCV】实现微信跳一跳完整项目代码
  10. 宅家36天咸鱼翻身入职腾讯,3面直接拿到offer