前言

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. Web.XML文件中关于代码提示的一些问题
  2. SAP PP 成品批次的生产日期自动抓取半成品批次的生产日期
  3. mongodb java 地理位置_Mongodb地理位置索引
  4. 如何对phpcms v9的首页列表进行分页?
  5. JVM 调优实战--jmap的使用以及内存溢出分析
  6. GAN做图像翻译的一点总结
  7. 视频编解码,bbv 缓冲区的上溢和下溢
  8. cygwin安装top命令
  9. Hive应用:选取分隔符
  10. 华为服务器修改root密码,华为云服务器root权限设置密码
  11. 四重境界:人渣、小人、君子、圣人
  12. RH236介绍红帽GLUSTER存储
  13. Java周末兼职培训讲师,成功入职阿里
  14. Servlet+JSP项目
  15. Kryo:快速、高效的序列化框架
  16. Docker——docker-volume原理
  17. Newman(一)之Windows下Newman的安装与使用
  18. SpringCloud实用篇02
  19. USB Type-C音视频数据转换器方案──CS5266|CS5267|CS5268|CS5269
  20. 第28节 防火墙相关知识详解

热门文章

  1. JVM-双亲委派机制以及打破双亲委派
  2. (一) 音视频基础_Mpeg4封装格式音视频编码格式_解封装解码_像素格式_PCM音频-采样率-通道-planar_MP4标准和h264格式的NAL的GOP分析
  3. 力扣题型总汇——数学逻辑/脑筋急转弯
  4. python中不可迭代对象有哪些_python可迭代对象
  5. Android性能测试工具腾讯GT的使用教程
  6. 数字化时代-0:远处的灯光
  7. 浅谈Redis的基本原理和数据类型结构的特性和应用开发场景
  8. DB2导入数据import和load的使用
  9. 【Python】set与frozenset的区别
  10. CSS in JS之styled-components