前言

Isomap,中文名叫“等度量映射”,是一篇发表在超一流期刊Science的大作。据百度学术的数据显示,截止2019年4月,它的被引量已经高达1.3万。作为一种降维算法,它同样可以应用于降维、可视化等领域。Isomap算法核心在于发现并利用流形空间的特点,引入测地线距离和提出对应的距离计算方法。相信本文能对一些对降维和距离度量学习的朋友有所帮助。

准备知识

流形
流形是在局部区域与欧氏空间同胚的空间,即在局部区域具有欧氏空间的性质,能用欧氏距离来进行距离计算。下面两幅流形图片可以给你一个直观的认识:

数据结构-图论:计算两点间的最短距离
有一定数据结构基础的朋友一定知道,这个问题通常用来求解的算法是:迪杰斯特拉和弗洛伊德算法。在此,我强调的是它们各自的前提条件,Dijkstra算法要求图中路径长度必须大于等于0,Floyd算法只要求没有总和小于0的环路。庆幸地是,在Isomap算法中不存在这两种异常情况。

算法思想

Isomap算法没有多少公式推导的内容,它的创新点是引入测地线距离和提出对应的距离计算方法。此算法出发点,是认识到流形在高维空间中,两个样本之间的距离不该直接使用欧式距离计算直线距离,更应该是采用“测地线”距离:就像我们日常生活中送快递的例子,两个城市之间如果没有直达的路线,快递就会经过许多中转站才能送到。测地线距离就是讲这样的距离,下图中的红线和黑线可以直观地告诉你测地线距离与直线距离的区别。

其中,红线长度是测地线距离,黑线长度是欧式距离。
直观上,在流形空间中,较远的两个点之间测地线距离更适用。那么接下来便有两个问题:一,如何确定局部这个范围?二,如何计算测地线距离呢?Isomap算法对这两个问题给出了一份答案,前者使用K近邻的思想确定局部范围;后者采用最短路径算法计算测地线距离。就这样,我们可以得到一个距离矩阵,接下来便把这个距离矩阵当做MDS算法(上一篇文章)的输入,从而实现降维任务。

算法步骤

输入:样本集D={x1,x2,⋅⋅⋅,xm}D=\{\boldsymbol x_1,\boldsymbol x_2,\cdot\cdot\cdot,\boldsymbol x_m\}D={x1​,x2​,⋅⋅⋅,xm​};近邻参数kkk;低维空间维数d′d'd′。
步骤
1for i=1,2,…,m do
2: 确定xi\boldsymbol x_ixi​的kkk近邻;
3: xi\boldsymbol x_ixi​与kkk近邻点之间的距离设置为欧式距离,与其他点的距离设置为无穷大;
4end for
5:调用最短路径算法计算较远两个样本点之间的距离distijdist_{ij}distij​;
6:将距离矩阵DistDistDist作为MDS算法的输入;
7return MDS算法的输出
输出:样本集DDD在低维空间的投影Z={z1,z2,⋅⋅⋅,zm}Z=\{ \boldsymbol z_1,\boldsymbol z_2,\cdot\cdot\cdot,\boldsymbol z_m \}Z={z1​,z2​,⋅⋅⋅,zm​}。

实验效果

调用sklearn库

"""
Isomap : Isometric mapping
Refercences :
[1]周志华.机器学习[M].清华大学出版社,2016:425.
[2]http://scikit-learn.sourceforge.net/dev/modules/generated/sklearn.manifold.Isomap.htmlAuthor : Ggmatch
Date : 2019/4/12
"""
from time import timeimport matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.ticker import NullFormatterfrom sklearn import manifold, datasets# 制造样本
n_points = 1000
X, color = datasets.samples_generator.make_s_curve(n_points, random_state=0)
n_neighbors = 10fig = plt.figure(figsize=(6, 4))  #画板
gs = fig.add_gridspec(1,2)  #共2副子图
ax1 = fig.add_subplot(gs[0,0], projection='3d')  #第一幅子图表示原始样本分布
ax1.scatter(X[:, 0], X[:, 1], X[:, 2], c=color, cmap=plt.cm.Spectral)# Isomap降维
n_components = 2t0 = time()  #计时开始
Y = manifold.Isomap(n_neighbors, n_components).fit_transform(X)
t1 = time()  #计时结束
ax2 = fig.add_subplot(gs[0,1])
ax2.scatter(Y[:, 0], Y[:, 1], c=color, cmap=plt.cm.Spectral)  #第2副子图表示降维后样本分布
ax2.set_title("Isomap (%.2g sec)" % (t1 - t0))
ax2.xaxis.set_major_formatter(NullFormatter())
ax2.yaxis.set_major_formatter(NullFormatter())plt.show()

实验效果

总结

1)Isomap算法对比MDS算法的实验效果,可以看出经过Isomap算法降维过的样本更有利于后续分类算法学习;
2)Isomap算法并非无懈可击,其中k近邻思想的引入,使之更具灵活性,但也不免带来弊端,就是需要针对具体任务来进行人工调参。

参考文献

[1]Tenenbaum J B, De V S, Langford J C. A global geometric framework for nonlinear dimensionality reduction.[J]. Science, 2000, 290(5500):2319-2323.
[2]https://baike.baidu.com/item/流形/2884058?fr=aladdin
[3]周志华.机器学习[M].清华大学出版社,2016:425.
[4]http://scikit-learn.sourceforge.net/dev/modules/generated/sklearn.manifold.Isomap.html#sklearn.manifold.Isomap

特征抽取篇之Isomap(Isometric Mapping)相关推荐

  1. 算法总结(六)Isomap(Isometric mapping等度量映射)和LLE(Locally Linear Embedding)的理解

    学习资料 <机器学习>周志华 https://blog.csdn.net/xiaoweidz9/article/details/79894126 dzjwLu https://blog.c ...

  2. 等度量映射(Isometric Mapping,简称Isomap)

    等度量映射(Isometric Mapping,简称Isomap) 1 绪论 在MDS中已经说明了为何要进行降维.而进行降维的一般有两类方法:特征选择和特征提取. 特征选择:根据一定的标准学则显著特征 ...

  3. 第132篇 solidity 中的 mapping

    Mapping 创建语法: mapping(keyType => valueType). keyType 可以是任何内置值类型.字节.字符串或任何约定. valueType 可以是任何类型,包括 ...

  4. 特征抽取篇之LLE(Locally Linear Embedding)

    前言 与等度量映射(Isomap)相同,局部线性嵌入(Locally Linear Embedding, 简称LLE)也是流形学习算法中的一员,是一种非线性的降维方法.LLE在2000年被发明出来,并 ...

  5. 流形学习(二) Isomap 在 MATLAB 中的实现及实例

    目录 Isomap(isometric feature mapping) 基本思想 step1 最近邻确定与权重矩阵 step2 确定点对之间的测地距离 step3 MDS Algorithm(Mul ...

  6. 降维方法小结和理解:PCA、LDA、MDS、ISOMAP、SNE、T-SNE、AutoEncoder

    PCA:Principle component analysis 主成分分析 百度百科:它是一个线性变换.这个变换把数据变换到一个新的坐标系统中,使得任何数据投影的第一大方差在第一个坐标(称为第一主成 ...

  7. 五、降维——从SNE到t-SNE再到LargeVis

    0x00 前言 本文谢绝转载,如有需要请联系bindog###outlook.com,###换成@ 数据可视化是大数据领域非常倚重的一项技术,但由于业内浮躁的大环境影响,这项技术的地位渐渐有些尴尬.尤 ...

  8. 从SNE到t-SNE再到LargeVis

    0x00 前言 本文谢绝转载,如有需要请联系bindog###outlook.com,###换成@ 数据可视化是大数据领域非常倚重的一项技术,但由于业内浮躁的大环境影响,这项技术的地位渐渐有些尴尬.尤 ...

  9. [飞桨机器学习]六种常见数据降维

    [飞桨机器学习]六种常见数据降维 事实上,在高维情形下 现的数据样本稀疏. 距离计算困 难等问是所有机器学习方法共同面 的严重障碍, 被称为" 维数灾难" (curse of di ...

最新文章

  1. Android之assets资源
  2. 栈和队列的算法题总结
  3. 线上内核_线上研讨会 |了解图书馆转型动态,建设智慧图书馆
  4. godaddy 管理mysql_在godaddy上使用MySQL和Entity Framework的安全例...
  5. 登陆状态下加入购物车
  6. 直方图(信息学奥赛一本通-T1115)
  7. 从零开始学前端:CSS元素模式的转换和CSS三大特性 --- 今天你学习了吗?(CSS:Day12)
  8. 【C++快速入门】面向对象篇
  9. 爱奇艺回应遭做空;百度 App 部分频道停更;React Native 0.62 发布 | 极客头条
  10. tekla钢结构算量_吉林省中润钢结构科技有限公司应用BIM技术助力润德華城项目建设...
  11. python给图片加半透明水印_python给图片增加透明文字水印
  12. echarts realtime图实现
  13. OFD文件是什么?如何将ofd转成PDF格式?
  14. 计算机数学 考研真题及答案,北大计算机系考研历年高等数学真题附答案.docx
  15. 我的电脑中无法新建txt文本文档
  16. 优秀课程案例:使用Scratch制作打弹球游戏2-得分过关
  17. 【Mysql】----基础练习
  18. 【软件工程实践】Hive研究-Blog7
  19. kafka一些常用命令,以及如何查看消息被谁消费了
  20. 培训笔记——如何将Wizfi2X0的固件升级

热门文章

  1. 图片格式怎么转换?JPG、PNG、BMP等格式一键转换,这三个工具收好
  2. 怎样把网页保存为pdf?+如何删除pdf上面的某些东西
  3. Word处理控件Aspose.Words功能演示:在 C# 中将 TXT 文件转换为 PDF
  4. T82 微信电脑登录手机静音问题
  5. vue :disabled
  6. Verilog快速入门(8)—— 4bit超前进位加法器电路
  7. 百度推广怎么删除的方法总结
  8. 应用宝2015最新版 v5.1.2 官方版​
  9. java运行linux命令程序_Java程序执行Linux命令
  10. java //d+_Java语言程序设计D实验——类与对象实验