机器学习笔记 - 什么是UMAP?

1、UMAP概述

  统一流形逼近和投影 (UMAP) 是一种降维技术,可用于类似于 t-SNE 的可视化,但也可用于一般的非线性降维。UMAP 是一种基于流形学习技术和拓扑数据分析思想的降维算法。它为处理流形学习和降维提供了一个非常通用的框架,但也可以提供具体的具体实现。

  该算法基于对数据的三个假设:

  数据均匀分布在黎曼流形上;
  黎曼度量是局部常数(或可以近似);
  歧管是本地连接的。

  根据这些假设,可以用模糊拓扑结构对流形进行建模。通过搜索具有最接近的等效模糊拓扑结构的数据的低维投影来找到嵌入。
  UMAP与 t-SNE 相比,它提供了许多优势,最显着的是提高了速度并更好地保存了数据的全局结构。

  UMAP 的核心与 t-SNE 非常相似——两者都使用图形布局算法在低维空间中排列数据。在最简单的意义上,UMAP 构建数据的高维图表示,然后优化低维图以使其在结构上尽可能相似。虽然 UMAP 用于构建高维图的数学是先进的,但它们背后的直觉却非常简单。

  为了构建初始的高维图,UMAP 构建了一个叫做“模糊单纯复形”的东西。这实际上只是加权图的表示,边权重表示两个点连接的可能性。为了确定连通性,UMAP 从每个点向外扩展一个半径,当这些半径重叠时连接点。选择这个半径很关键——选择太小会导致小而孤立的集群,而选择太大会将所有东西连接在一起。UMAP 通过根据到每个点n的距离在本地选择半径来克服这一挑战th 最近的邻居。UMAP 然后通过随着半径的增长降低连接的可能性来使图形“模糊”。最后,通过规定每个点必须至少连接到其最近的邻居,UMAP 确保局部结构与全局结构保持平衡。

2、UMAP安装

  UMAP 依赖于scikit-learn,因此scikit-learn依赖于numpy和scipy。

pip install umap-learn

(1)绘图功能

  UMAP 包含一个umap.plot用于绘制 UMAP 嵌入结果的子包。这个包需要单独导入,因为它有额外的以来(matplotlib、datashader 和 holoviews)。它允许快速和简单的绘图。使用示例:

import umap
import umap.plot
from sklearn.datasets import load_digits

digits = load_digits()

mapper = umap.UMAP().fit(digits.data)
umap.plot.points(mapper, labels=digits.target)

  如果您想使用绘图功能,您可以使用如下命令安装

pip install umap-learn[plot]

(2)参数化UMAP

  参数 UMAP 为训练神经网络以学习基于 UMAP 的数据转换提供支持。这可用于支持更快地推断新的未见数据、更强大的逆变换、UMAP 的自动编码器版本和半监督分类(特别是对于被 UMAP 很好分离的数据和数量非常有限的标记数据)。
  如果您希望使用 Parametric UMAP,您需要安装 Tensorflow

pip install umap-learn[parametric_umap]

3、UMAP使用

import umap
from sklearn.datasets import load_digits
digits = load_digits()
embedding = umap.UMAP(n_neighbors=5,
	min_dist=0.3,
	metric='correlation').fit_transform(digits.data)
umap.plot.points(mapper, labels=digits.target)

  UMAP可以设置的主要参数如下:

  n_neighbors:这决定了在流形结构的局部近似中使用的相邻点的数量。较大的值将导致在丢失详细的局部结构的情况下保留更多的全局结构。一般来说,这个参数应该经常在 5 到 50 的范围内,选择 10 到 15 是一个合理的默认值。

  min_dist:这控制嵌入允许将点压缩在一起的紧密程度。较大的值确保嵌入点分布更均匀,而较小的值允许算法更准确地针对局部结构进行优化。合理的值在 0.001 到 0.5 的范围内,0.1 是合理的默认值。

  metric:这决定了用于测量输入空间中距离的度量的选择。已经编码了各种各样的度量标准,并且可以传递用户定义的函数,只要它已经通过 numba 进行了 JITd。

(1)示例1

  UMAP 在嵌入大型高维数据集方面非常有效。特别是它在输入维度和嵌入维度上都可以很好地扩展。为了获得最佳性能,我们建议安装最近邻计算库pynndescent。UMAP 可以在没有它的情况下运行,但如果安装它会运行得更快,尤其是在多核机器上。

  对于具有 70000 个数据样本的 784 维 MNIST 数字数据集等问题,UMAP 可以在一分钟内完成嵌入(相比之下,scikit-learn 的 t-SNE 实现大约需要 45 分钟)。尽管有这种运行时效率,UMAP 仍然产生高质量的嵌入。

  强制性 MNIST 数字数据集,使用 3.1 GHz Intel Core i7 处理器(n_neighbors=10, min_dist=0.001)在 42 秒内嵌入(安装了 pynndescent 并在 numba jit 预热之后):
MNIST 数字数据集

(2)示例2

  “Fashion MNIST”数据集(同样是 784 维的 70000 个数据样本)。UMAP 在 49 秒内生成了这个嵌入(n_neighbors=5,min_dist=0.1)
Fashion MNIST

(3)示例3

UCI 穿梭数据集(8 维的 43500 个样本)在 44 秒内很好地嵌入了 相关距离(注意相关距离计算所需的时间更长):
UCI 穿梭数据集

猜你喜欢

转载自blog.csdn.net/bashendixie5/article/details/124400062