目录

  • 前置内容
  • UMAP步骤
    • 学习流形结构
    • 寻找流形的低维表示

过去流行使用t-SNE,但其存在问题:

  • tSNE不能适用大的样本量。如果使用t-SNE加速计算,也会导致内存消耗大,从而只能在计算机集群上进行分析;
  • tSNE并没有保留全局结构。也就是说只有簇内的距离才有意义,而簇间的相似性却无法保证;因此人们普遍认为,在tSNE上进行聚类并不是一个很好的主意;
  • tSNE实际上只能嵌入到2维或3维中,即只能用于可视化的目的,所以很难将tSNE作为一般的降维技术;
  • tSNE不能直接处理高维数据,通常使用Autoencoder或PCA进行降维处理,然后将降维的结果输入tsne做可视化。

在单细胞分析中:

  • t-sne相对于PCA有更高的区分度,不同细胞类型分得开;
  • t-sne保留局部结构,相类似的细胞聚集在一起时不会过于重叠扎堆;
  • 相对于UMAP,t-sne不能很好的展示全局结构;
  • 经典的tSNE算法不适用于较大的数据;
  • 鉴于tSNE的缺点,近年来umap逐渐在单细胞数据的可视化方法中占据位置。umap相对tSNE来说,保留了数据的全局结构,而且大数据的运行时间较短

前置内容

降维不仅仅是为了数据可视化。它还可以识别高维空间中的关键结构并将它们保存在低维embedding中来克服“维数灾难”。下面将介绍一种流行的降维技术Uniform Manifold Approximation and Projection (UMAP)的原理。

首先,注意以下内容:

  • Projection ——通过投影点在平面、曲面或线上再现空间对象的过程或技术。也可以将其视为对象从高维空间到低维空间的映射。
  • Approximation——算法假设我们只有一组有限的数据样本(点),而不是构成流形的整个集合。因此,我们需要根据可用数据来近似流形。
  • Manifold——流形是一个拓扑空间,在每个点附近局部类似于欧几里得空间。一维流形包括线和圆,但不包括类似数字8的形状。二维流形(又名曲面)包括平面、球体、环面等。
  • Uniform——均匀性假设告诉我们我们的数据样本均匀(均匀)分布在流形上。但是,在现实世界中,这种情况很少发生。因此这个假设引出了在流形上距离是变化的概念。即,空间本身是扭曲的:空间根据数据显得更稀疏或更密集的位置进行拉伸或收缩。

综上所述,我们可以将UMAP描述为:一种降维技术,假设可用数据样本均匀(Uniform)分布在拓扑空间(Manifold)中,可以从这些有限数据样本中近似(Approximation)并映射(Projection)到低维空间。

UMAP步骤

我们可以将UMAP分为两个主要步骤:

  • 学习高维空间中的流形结构;
  • 找到该流形的低维表示;

学习流形结构

在我们将数据映射到低维之前,肯定首先需要弄清楚它在高维空间中的样子。学习流形结构可分为以下步骤:

  • 寻找最近邻居;
  • 构建一个图;

对于寻找最近邻居,UMAP 首先使用 Nearest-Neighbor-Descent 算法找到最近的邻居。我们可以通过调整 UMAP 的 n_neighbors 超参数来指定我们想要使用多少个近邻点。

试验 n_neighbors 的数量很重要,因为它控制 UMAP 如何平衡数据中的局部和全局结构。它通过在尝试学习流形结构时限制局部邻域的大小来实现。本质上,一个小的n_neighbors 值意味着我们需要一个非常局部的解释,准确地捕捉结构的细节。而较大的 n_neighbors 值意味着我们的估计将基于更大的区域,因此会得到在整个流形中更全局地解释。

下一步我们构建图,UMAP 需要通过连接之前确定的最近邻来构建图。为了理解这个过程,我们需要将他分成几个子步骤来解释邻域图是如何形成的。

  • 正如对 UMAP 的名称所述,我们假设点在流形上均匀分布,这表明它们之间的空间应该根据数据看起来更稀疏或更密集的位置而拉伸或收缩。
    它本质上意味着距离度量不是在整个空间中通用的,而是在不同区域之间变化的。我们可以通过在每个数据点周围绘制圆圈来对其进行可视化,由于距离度量的不同,它们的大小也应该不同(见下图)。实色代表邻居下限(local_connectivity=1),模糊区域代表邻居上限。

  • 接下来,我们要确保试图学习的流形结构不会导致许多不连通点。所以需要使用另一个超参数local_connectivity(默认值= 1)来解决这个潜在的问题;
    当我们设置local_connectivity=1 时,我们告诉高维空间中的每一个点都与另一个点相关联。
  • 注意到上面的图也展现了模糊的圆圈延伸到最近的邻居之外。这告诉我们,当我们离感兴趣的点越远,与其他点联系的确定性就越小。
    这两个超参数(local_connectivity 和 n_neighbors)最简单的理解就是可以将他们视为下限和上限:
    Local_connectivity(默认值为1):100%确定每个点至少连接到另一个点(连接数量的下限)。
    n_neighbors(默认值为15):一个点直接连接到第 16 个以上的邻居的可能性为 0%,因为它在构建图时落在 UMAP 使用的局部区域之外。
    2 到 15 : 有一定程度的确定性(>0% 但 <100%)一个点连接到它的第 2 个到第 15 个邻居。比如下图,黄色为感兴趣点,下限是全紫色区域,上限是紫色模糊区域:
  • 下一步合并边:由于我们采用了不同距离的方法,因此从每个点的角度来看,我们不可避免地会遇到边权重不对齐的情况。 例如,点 A→B 的边权重与 B→A 的边权重不同。

    为了在这种情况下合并边,UMAP提出:如果我们想将权重为 a 和 b 的两条不同的边合并在一起,那么我们应该有一个权重为 a+b 的单边。 考虑这一点的方法是,权重实际上是边存在的概率。 组合权重就是至少存在一条边的概率。
    最后,我们得到一个连接的邻域图,如下所示:

这个图就是高维空间下对应的流形(按照UMAP的做法,可以看到样本确实均匀分布在流形上);

寻找流形的低维表示

从高维空间学习近似流形后,UMAP 的下一步是将其投影(映射)到低维空间。由于UMAP是建立在流形上做低维映射,所以降维后的结果可以更好地保留住全局信息。

其他算法-建立在流形上的降维UMAP相关推荐

  1. 什么是维度诅咒?如何评估降维算法在当前任务数据集上的效果?

    什么是维度诅咒?如何评估降维算法在当前任务数据集上的效果? 什么是维度诅咒? 随着维数(或特征)个数的增加,任意两个样本或者实例之间的平均距离也会增加,换句话说,在高维空间中,实例往往位于空间的边缘. ...

  2. 使用机器学习算法实现单细胞测序数据的降维和聚类(二)

    本篇主要记录一下几种常用的聚类算法 使用的参考代码和数据集还是(一)里面的 1.K-Means 算法思想大致为:先从样本集中随机选取 k个样本作为簇中心,并计算所有样本与这 k个"簇中心&q ...

  3. 人工智能基础课15机器学习-好钢用在刀刃上:降维学习

    15 机器学习 | 好钢用在刀刃上:降维学习 毛主席在<矛盾论>中提出了主要矛盾和次要矛盾的概念:"研究任何过程,如果是存在着两个以上矛盾的复杂过程的话,就要用全力找出它的主要矛 ...

  4. python 计算流形上两点之间的测地距离

    在分析数据时,有时要计算流形上两点之间的测地距离.本着有现成轮子绝对不自己写的观点,发现可以通过以下方式计算流形上任意两点之间的测地距离. ISOMAP是一种保持测地距离不变的高维空间中低维流形的降维 ...

  5. AI周报丨标清变4k?B站超分辨率算法开源;强化学习算法控制核聚变登上《nature》

    AI周刊丨标清变4k?B站超分辨率算法开源:强化学习算法控制核聚变登上<nature> 2022年2月22日 极链AI云 文章目录 AI周刊丨标清变4k?B站超分辨率算法开源:强化学习算法 ...

  6. 使用聚类算法(Kmeans)进行数据降维并作为分类算法逻辑回归(logistic Regression)的数据预处理步骤实战

    使用聚类算法(Kmeans)进行数据降维并作为分类算法逻辑回归(logistic Regression)的数据预处理步骤实战 目录

  7. 如何限制对象只能建立在堆上或者栈上

    转自http://blog.csdn.net/szchtx/article/details/12000867# 在C++中,类的对象建立分为两种,一种是静态建立,如A a:另一种是动态建立,如A* p ...

  8. 机器学习的算法和普通《算法导论》里的算法有什么本质上的异同

    机器学习的算法和普通<算法导论>里的算法有什么本质上的异同? 本人非计算机专业出身,对这些方向感兴趣,所以有此一问.曾经问过一些人,说是机器学习全是数学,是用数学的方式试图去描述和理解我们 ...

  9. iPhone开发 - 3D - 建立3D界面(上)

    iPhone开发 - 3D - 建立3D界面(上) 苹果公司于07年发布的iPhone是手机业一大革命性的手机终端,iPhone操作系统是:Mac OS X,固件升级由去年发布1.0到现在的2.0固件 ...

最新文章

  1. JSF框架在NetBeans下的编码
  2. hadoop中汉字与英文字符混合的keyword做为combine的key的问题
  3. 解决浮层弹出如何加上datepicker,并且浮动在上面
  4. 开源开放 | 中文相对复杂词汇识别数据集RCWI-Dataset(CCKS2021)
  5. 10安装报错0x8007000d_windows10:MySQL8.0.22版本安装教程
  6. 线性调频信号及仿真[python]
  7. 基于Java基础的客户信息管理系统
  8. CONTINUOUS CONTROL WITH DEEP REINFORCEMENT LEARNING
  9. POJ 3368 Frequent values
  10. Genymotion模拟器及其相关虚拟机下载地址
  11. 模仿斗地主玩法实现扑克牌的分发
  12. 引流产品分几类?引流产品结构四类定位产品
  13. 机器学习--多层感知机、卷积神经网络、循环神经网络
  14. IPTV系统云桌面管理:开机广告+三方apk管理+图文介绍
  15. Python 计算思维训练——字典与字符串练习(二)
  16. NAT ALG技术白皮书
  17. JDY-06蓝牙透传无天线模块介绍
  18. android 视频处理60帧,如何导出60帧视频,让视频画面流畅无比
  19. 暑期培训计划之个人计划
  20. linux 运行程序命令

热门文章

  1. tesserocr识别图片
  2. iOS“伪后台“机制下如何保持APP一直运行在后台
  3. 隐私保护与隐私计算研讨会 | 余维仁:大数据时代下需要各界更新对个人隐私保护的固有认识
  4. 手机玩exe游戏的模拟器_如何在手机上玩全面战争模拟器等电脑付费游戏?
  5. 多多情报通:拼多多店铺不交保证金能卖货吗?有什么影响吗?
  6. 一对多的临近服务直接通信
  7. Linux解压.gz的命令
  8. LINUX PID 1和SYSTEMD 专题
  9. android通讯录根据手机号码查询姓名
  10. 【MQTT】在Windows下搭建MQTT服务器