1、什么是流形

  流形学习的观点:认为我们所能观察到的数据实际上是由一个低维流行映射到高维空间的。由于数据内部特征的限制,一些高维中的数据会产生维度上的冗余,实际上这些数据只要比较低的维度就能唯一的表示。所以直观上来讲,一个流形好比是一个$d$维的空间,在一个$m$维的空间中$(m > d)$被扭曲之后的结果。需要注意的是流形并不是一个形状,而是一个空间。举个例子来说,比如说一块布,可以把它看成一个二维的平面,这是一个二维的空间,现在我们把它扭一扭(三维空间),它就变成了一个流形,当然不扭的时候,它也是一个流形,欧式空间是流形的一种特殊情况。如下图所示

  

  再比如对于一个球面上的一点(其实就是三维欧式空间上的点),可以用一个三元组来表示其坐标:

  

  但事实上这三维的坐标只由两个变量$\theta$和$\varphi$生成的,也可以说成是它的自由度是2,也正好对应了它是一个二维的流形。

  流形具有在局部与欧式空间同胚的空间,也就是它在局部具有欧式空间的性质,能用欧式距离来进行距离计算。这就给降维带来了很大的启发,若低维流形嵌入到了高维空间,此时样本在高维空间的分布虽然复杂,但在局部上仍具有欧式空间的性质,因此可以在局部建立降维映射关系,然后再设法将局部映射关系推广到全局。而且当数据被降维到二维和三维时,就可以进行可视化,因此流形学习也可以被用于可视化。

2、等度量映射(Isomap)

  首先介绍下MDS算法,MDS算法的核心思想:找到一个低维空间使得样本间的距离在高维空间和低维空间基本一致。所以MDS算法是利用样本间的相似性来保持降维后的输出结果与降维前一致(此种算法的计算量很大),然而对于高维空间直接计算样本之间的直线距离(欧式距离)是具有很大的误导性的。举个例子,计算地球上南极到北极之间的距离,可以直接计算这两点之间的距离,但是这种距离是毫无意义的(你总不能从南极打个洞到北极吧),因此引入了测地距离,测地距离才是两点之间的本真距离。具体如下如所示

  

  然而如何计算两点之间的测地距离呢,毕竟从南极到北极有很多条路径,不过我们要求的是从南极到北极之间的最短的测地距离。这时就可以利用流形在局部上与欧式空间同胚这个性质,对于每个点基于欧式距离找出其最近邻点,然后就能建立一个近邻连接图,于是计算两点之间的测地距离的问题,就转变成为计算近邻连接图上两点之间的最短路径问题(Dijkstra算法)。

  那么什么是Isomap算法呢?其实就是MDS算法的变种,其思想和MDS一样,只不过在计算高维空间的距离时是采用测地距离的,而不是无法真实的表达两点之间的欧式距离。具体算法流程如下(来源:机器学习周志华版)

  

  Isomap算法是全局的,它要找到所有样本全局的最优解,当数据量很大时或者样本维度很高时,计算量非常大。因此更常用的算法是LLE(局部线性嵌入),LLE放弃所有样本全局最优的降维,只是通过保证局部最优来降维。

3、局部线性嵌入(LLE)

  局部线性嵌入的思想:只是试图去保持领域内样本之间的关系。具体如下图所示,样本从高维空间映射到低维空间后,各个领域内的样本之间的线性关系不变。

  

  即样本点$x_i$的坐标能通过它的领域样本$x_j, x_l, x_k$重构出来,而这里的权值参数在低维和高维空间是一致的。

  

  LLE算法可以分为两步:

  第一步根据邻域关系计算出所有的样本的领域重构系数$w$,也就是找出每一个样本和其领域内的样本之间的线性关系

  

  第二步就是根据领域重构系数不变,去求每个样本在低维空间的坐标

  

  利用M矩阵,可以将问题写成

  

  因此问题就成了对$M$矩阵进行特征分解,然后取最小的$d'$个特征值对应的特征向量组成低维空间的坐标$Z$。LLE算法具体的流程如下(来源:机器学习周志华版)

  

  LLE算法总结:

  主要优点:

  1)可以学习任意维的局部线性的低维流形。

  2)算法归结为稀疏矩阵特征分解,计算复杂度相对较小,实现容易。

  3)可以处理非线性的数据,能进行非线性降维。

  主要缺点:  

  1)算法所学习的流形只能是不闭合的,且样本集是稠密的。

  2)算法对最近邻样本数的选择敏感,不同的最近邻数对最后的降维结果有很大影响。

    


机器学习算法总结(十二)——流形学习(Manifold Learning)的更多相关文章

  1. 流形学习 (Manifold Learning)

    流形学习 (manifold learning) zz from prfans............................... dodo:流形学习 (manifold learning) ...

  2. 201871010123-吴丽丽《面向对象程序设计(Java)》第十二周学习总结

    201871010123-吴丽丽<面向对象程序设计(Java)>第十二周学习总结 项目 内容 这个作业属于哪个课程  https://www.cnblogs.com/nwnu-daizh/ ...

  3. 201871010106-丁宣元 《面向对象程序设计(java)》第十二周学习总结

    201871010106-丁宣元 <面向对象程序设计(java)>第十二周学习总结 正文开头: 项目 内容 这个作业属于哪个课程 https://home.cnblogs.com/u/nw ...

  4. 201871010111-刘佳华《面向对象程序设计(java)》第十二周学习总结

    201871010111-刘佳华<面向对象程序设计(java)>第十二周学习总结 实验十   集合与GUI初步 实验时间 2019-11-14 第一部分:基础知识总结 第九章知识总结 1. ...

  5. 201871010101-陈来弟《面向对象程序设计(Java)》第十二周学习总结

    201871010101-陈来弟<面向对象程序设计(Java)>第十二周学习总结 实验十   集合与GUI初步 实验时间 2019-11-14 第一部分   理论部分 1.(1) 用户界面 ...

  6. 201871010134-周英杰 《面向对象程序设计(java)》第十二周学习总结

    201871010134-周英杰 <面向对象程序设计(java)>第十二周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...

  7. 201871010136-赵艳强《面向对象程序设计(java)》第十二周学习总结

    201871010136-赵艳强<面向对象程序设计(java)>第十二周学习总结   项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh ...

  8. 201521123061 《Java程序设计》第十二周学习总结

    201521123061 <Java程序设计>第十二周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对 ...

  9. 201521123072《java程序设计》第十二周学习总结

    201521123072<java程序设计>第十二周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象 ...

随机推荐

  1. Java学习笔记之——内部类

    内部类 形式:把一个类定义在一个类的内部. 分为:成员内部类和匿名内部类重点掌握 a) 成员内部类 b) 静态成员内部类 c) 匿名内部类 d) 局部内部类 (1)成员内部类: Java的语言是面向对 ...

  2. 【转】消除代码中的 if-else/switch-case

    在很多时候,我们代码中会有很多分支,而且分支下面的代码又有一些复杂的逻辑,相信很多人都喜欢用 if-else/switch-case 去实现.做的不好的会直接把实现的代码放在 if-else/swit ...

  3. 面试官:"谈谈分库分表吧?"

    原文链接:面试官:"谈谈分库分表吧?" 面试官:“有并发的经验没?”  应聘者:“有一点.”   面试官:“那你们为了处理并发,做了哪些优化?”   应聘者:“前后端分离啊,限流啊 ...

  4. eclipse安装阿里编码规约插件

    点击帮助,Install New Software... 地址为https://p3c.alibaba.com/plugin/eclipse/update 然后选择安装, 一路next即可

  5. Java并发编程-ReentrantReadWriteLock

    基于AQS的前世今生,来学习并发工具类ReentrantReadWriteLock.本文将从ReentrantReadWriteLock的产生背景.源码原理解析和应用来学习这个并发工具类. 1. 产生 ...

  6. 常见js面试题

    包含内容: Array indexOf(). 数组扁平化 isArray() 数组的去重 Object.is() Array.filter 用一行代码实现数组扁平化? JavaScript isArr ...

  7. 去除bootstrap默认的input和选中时的样式

    input默认样式除border外, 还有一个阴影效果box-shadow:选中时同样有阴影效果. input,input:focus{ border: none !important; box-sh ...

  8. 2017-11-07 中文代码示例之Angular入门教程尝试

    "中文编程"知乎专栏原址 原文: 中文代码示例教程之Angular尝试 为了检验中文命名在Angular中的支持程度, 把Angular官方入门教程的示例代码中尽量使用了中文命名. ...

  9. Vivox9怎么录制屏幕

    手机怎么录屏是很多手机党一直提出的问题,而且经常发生录制的视频没有声音的现象,现在就给大家推荐一款软件,不仅能完美的录制视频,而且还可以完整的将视频声音录制下来,下面看看Vivox9怎么录制屏幕吧! ...

  10. Android sdk下载找不到support library

    没有android support library下载项. 找了很多资料,发现 android support library 被Google废弃了,不推荐使用.代替使用的是 android supp ...