最近在看论文的时候看到论文中使用isomap算法把3D的人脸project到一个2D的image上。提到降维,我的第一反应就是PCA,然而PCA是典型的线性降维,无法较好的对非线性结构降维。ISOMAP是‘流形学习’中的一个经典算法,流形学习贡献了很多降维算法,其中一些与很多机器学习算法也有结合,先粗糙的介绍一下’流形学习‘。

  流形学习

  流形学习应该算是个大课题了,它的基本思想就是在高维空间中发现低维结构。比如这个图:

  

  这些点都处于一个三维空间里,但我们人一看就知道它像一块卷起来的布,图中圈出来的两个点更合理的距离是A中蓝色实线标注的距离,而不是两个点之间的欧式距离(A中蓝色虚线)。

  此时如果你要用PCA降维的话,它根本无法发现这样卷曲的结构(因为PCA是典型的线性降维,而图示的结构显然是非线性的),最后的降维结果就会一团乱麻,没法很好的反映点之间的关系。而流形学习在这样的场景就会有很好的效果。

  经典MDS(Multidimensional Scaling)
  如上文所述,MDS接收的输入是一个距离矩阵DD,我们把一些点画在坐标系里:

  

  如果只告诉一个人这些点之间的距离(假设是欧氏距离),他会丢失那些信息呢?
  a.我们对点做平移,点之间的距离是不变的。
  b.我们对点做旋转、翻转,点之间的距离是不变的。

  所以想要从D还原到原始数据X是不可能的,因为只给了距离信息之后本身就丢掉了很多东西,不过不必担心,即使这样我们也可以对数据进行降维(why?点这里)。

  ISOMAP(等距特征映射)

  其实线性流形方法无法在非线性流形上解决的问题,无非是需要解决两个问题:

  1、如何测量流形上的几何距离?

  2、如何将高维的2016维欧式空间映射到三维的低维空间?

  首先,针对问题1,将MDS算法中的欧式距离换成“测地距离”,先抛一个“测地线的维基定义”。预热以后,我们来看经典的瑞士卷(图A),注意以下图A、B、C均来源于原文论文Fig3截图:

  

  现在要我们把自己想象成是瑞士卷上的蚂蚁(对人类来说瑞士卷是三维的,对蚂蚁来说是二维的),上图A中的两个黑色圈圈为两只恩爱无比的蚂蚁,如何让这两只蚂蚁在最短的时间内见面呢?要走最短路径测地线蓝色线才是正道(直线最短?直接沿着虚线强行阔过去?你不想活了么?)因此,抛弃欧式距离,引来测地距离~

  邻近点:直接计算邻近点之间的欧式空间距离

  远距离的点:计算邻近点之间的最短距离连接成的序列,如下图所示(来源于博客),要计算空间中远距离的亮点1与9,计算1到9的最短路径1、2、3...9,沿着路径依次类推直到到达目的地9(根据流形中的全局非线性和局部线性属性):

  最后形成如下图所示的瑞士卷上的逼近测地线,如下图B中的红色线条所示:

  

  实现方法:引入图论框架,将数据作为图中的点,点与其邻近点之间使用边来连接,逼近的测地线使用最短路径代替。

   Isomap算法流程如下:

   步骤1:构建邻接图G(复杂度:O(DN2))

   基于输入空间X中流形G上的的邻近点对i,j之间的欧式距离d(i,j),选取每个样本点距离最近的K个点(K-Isomap)或在样本点选定半径为常数ε的圆内所有点为该样本点的近邻点,将这些邻近点用边连接,将流形G构建为一个反映邻近关系的带权流通图G;

   步骤2:计算所有点对之间的最短路径(复杂度:O(DN2))

   通过计算邻接图G上任意两点之间的最短路径逼近流形上的测地距离矩阵DG={dG(i,j)},最短路径的实现以Floyd或者Dijkstra算法为主。

   步骤3:构建k维坐标向量(复杂度:O(dN2))

   根据图距离矩阵DG={dG(i,j)}使用经典Mds算法在d维空间Y中构造数据的嵌入坐标表示(如下图C所示),选择低维空间Y的任意两个嵌入坐标向量yi与yj使得代价函数最小:

  

  其中等式1.1的全局最优解可以通过将坐标向量yi设置为距离矩阵DG前d个特征值对应的特征向量来得到。

 

(还是偷懒了,没有去看看具体的例子,要用的时候再说把23333)

Reference:

[1] https://blog.csdn.net/dark_scope/article/details/53229427

[2] https://www.cnblogs.com/wing1995/p/5479036.html

转载于:https://www.cnblogs.com/z1141000271/p/9987143.html

机器学习 降维算法: isomap MDS相关推荐

  1. 维度打击,机器学习中的降维算法 ISOMAP MDS

    降维是机器学习中很有意思的一部分,很多时候它是无监督的,能够更好地刻画数据,对模型效果提升也有帮助,同时在数据可视化中也有着举足轻重的作用. 一说到降维,大家第一反应总是PCA,基本上每一本讲机器学习 ...

  2. 数据降维算法isomap mds

    动机: 考虑pca在瑞士卷数据上的应用,有以下几个缺点 1.pca降维需要的维数比流形的维数更高 2.pca不能够捕捉曲线的维度 不适用储存欧几里得距离,我们使用测地线距离,获得真实的非线性几何的真实 ...

  3. 机器学习-降维算法(MDS算法)

    机器学习-降维算法(MDS算法) 一,介绍 在现实数据中,很多数据都是高纬度的,在高纬度情况下进行数据处理将会有极大的数据处理量.为了,减少计算量,常常需要缓解这种数据维度灾难,这有两种途径:降维和特 ...

  4. 四大机器学习降维算法:PCA、LDA、LLE、Laplacian Eigenmaps

    四大机器学习降维算法:PCA.LDA.LLE.Laplacian Eigenmaps 引言 机器学习领域中所谓的降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中.降维的本质是学习 ...

  5. 机器学习降维算法六——ISOMAP(等距特征映射)

    流形学习:传统的机器学习方法中,数据点和数据点之间的距离和映射函数都是定义在欧式空间中的,然而在实际情况中,这些数据点可能不是分布在欧式空间中的,因此传统欧式空间的度量难以用于真实世界的非线性数据,从 ...

  6. 非线性降维算法Isomap与C-Isomap的研究

    转载自 http://doc.qkzz.net/article/ab5e6012-0e56-40f6-b730-a4e6a9e8fd2f_3.htm,仅用作个人学习. 1 引言 在处理高维数据如全局气 ...

  7. 机器学习---降维算法

    知其然知其所以然 [写在前面] 主成分分析(PCA) 原理部分 代码部分 可视化部分 线性判别分析(LDA) 原理部分 代码部分 可视化部分 独立成分分析(ICA) 原理部分 代码部分 可视化部分 t ...

  8. 机器学习降维算法二:LDA(Linear Discriminant Analysis)

    Linear Discriminant Analysis (也有叫做Fisher Linear Discriminant)是一种有监督的(supervised)线性降维算法.与PCA保持数据信息不同, ...

  9. 机器学习降维算法三:LLE (Locally Linear Embedding) 局部线性嵌入

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

最新文章

  1. 爬虫之手机APP抓包教程-亲测HTTP和HTTPS均可实现
  2. linux环境变量查询设置及保存
  3. java 让进度条动起来_自定义进度条动起来
  4. 斯坦福机器学习公开课学习笔记(3)—拟合问题以及局部权重回归、逻辑回归
  5. 一篇带你了解函数指针
  6. 开启3D硬件加速导致Virtualbox无法响应
  7. e.html5.qq.com,QQ群官网-开放能力
  8. 文件字符输出流 FileWritter java
  9. ubuntu命令之dpkg
  10. java设置面板的大小_java – 设置面板的大小
  11. week5 0.1 安装materializecss
  12. java编程剪刀石头布_Java实现的剪刀石头布游戏示例
  13. NV12剪切区域时的对齐代码
  14. SMBIOS介绍(3):实现
  15. 不加好友实现QQ在线代码状态临时会话
  16. 计算机打不开sai文件夹,无法运行 SAI2 的解决办法
  17. xshell连接liunx服务器身份验证不能选择password
  18. 自媒体必死 大家不要被马化腾忽悠了
  19. 从play_mp3例程出发理解ESP32-ADF的使用方法
  20. GB/T18655-2010标准下的动力电池系统及其BMS电磁EMC测试

热门文章

  1. PRG100A-AA路由破解
  2. python实现双色球自动选号,附带历史中奖号对比
  3. 数据库编程-----数据库设计范式
  4. 华中科技大学校长李培根演讲稿(转载)
  5. Python可视化-气泡图
  6. Echarts之气泡图图例
  7. 关联规则——Apriori算法
  8. 晚上参加了朋友的婚礼
  9. 视频教程-企业微信支付JAVA版_向员工收款-微信开发
  10. whoami: cannot find name for user ID xxxx