UMAP:非线性降维的核心原理与实践指南

前言

UMAPUniform Manifold Approximation and Projection ,均匀流形逼近与投影)是一种用于降维的非线性流形学习技术。它旨在将高维数据映射到低维空间(通常是二维或三维)进行可视化或数据压缩,同时尽可能保留数据的全局结构和局部邻域关系。

UMAP 的核心思想是通过构建数据的邻接图(graph),并使用一种优化的方法将这个高维图结构映射到低维空间中,从而保留数据的拓扑结构。与 t-SNE 等其他降维算法相比,UMAP 通常在保持数据的全局结构和局部细节方面有更好的平衡,同时计算效率也更高。

UMAP 的主要特点

  1. 非线性降维 :UMAP 是一种非线性降维方法,可以捕捉数据中的复杂结构,而不仅仅是简单的线性关系。

  2. 保留局部和全局结构 :UMAP 能够很好地保留数据的局部邻域关系(即相邻点在低维空间中仍然相邻),同时也能较好地保持数据的全局结构(即数据集的整体形状和分布)。

  3. 可扩展性 :相比于 t-SNE,UMAP 在处理大规模数据集时具有更高的计算效率,能够更快速地生成降维结果。

  4. 参数调节灵活 :UMAP 提供了一些可调参数,例如 n_neighborsmin_dist,允许用户根据具体数据集调整算法的行为,以得到更好的降维效果。

UMAP : 英式音标:/ˈjuːmæp/ 美式音标:/ˈjuːmæp/ 发音类似于:“you-map”

UMAP算法步骤

  • 记得先给数据标准化⭐

1. 构建高维空间的图结构

UMAP 的第一个主要步骤是将高维数据点转换为图结构。具体来说,它使用 k-近邻算法(k-nearest neighbors, k-NN) 构建数据点之间的邻接关系。

具体操作:

  • k-NN 图构建
    • 对于每个数据点,找到其在高维空间中的 k 个最近邻数据点。这里的 “最近” 通常是指欧几里得距离,但其他距离度量(如余弦相似度)也可以使用。
    • 将这些最近邻关系表示为图中的边,即如果点 A 和点 B 是彼此的 k 个最近邻之一,那么在图中就有一条连接 A 和 B 的边。

邻接图的类型:

UMAP 使用了一种加权图,其中边的权重反映了数据点之间的相似性。在构建 k-NN 图时,[[#选择无向图还是有向图?|UMAP 可以选择使用有向图 或无向图 ,具体取决于应用场景]]。

  • 无向图 :如果 A 和 B 是彼此的最近邻,则在图中连接它们的无向边。
  • 有向图 :仅在 A 是 B 的最近邻或 B 是 A 的最近邻时连接有向边。

目的:

这一步的目的是捕捉数据在高维空间中的局部邻域关系。通过构建这样的图结构,UMAP 能够以一种灵活的方式处理高维数据的复杂几何形状。

2. 优化图的权重

构建好 k-NN 图之后,UMAP 需要进一步优化图中边的权重,使得边的权重能够反映出数据点在高维空间中的相似性。这一步通过一种非线性变换来实现。

具体操作:

  • 相似性度量

    • 在高维空间中,数据点之间的距离可以被映射为图中边的权重。通常,距离越近的点,其边的权重越高(即相似性越高)。
    • UMAP 使用一种模糊图 (fuzzy graph)的思想,即每个点不仅仅与它的 k 个最近邻相连,也可以与其他点有较弱的连接。这通过一种概率分布(如高斯分布)来实现,即根据距离来计算数据点与邻近点之间的连接概率。

    具体公式如下:
    w i , j = exp ⁡ ( − max ⁡ ( d i , j − ρ i , 0 ) σ i ) \large w_{i,j}=\exp\left(-\frac{\max(d_{i,j}-\rho_i,0)}{\sigma_i}\right) wi,j=exp(σimax(di,jρi,0))

  • 其中:

    • di,j​ 是数据点 i 和 j 之间的距离。
    • ρi​ 和 σi​ 是控制点 i 的局部密度的参数。
    • wi,j​ 是图中点 i 和 j 之间边的权重。

目的:

通过这种加权方式,UMAP 可以捕捉到高维空间中的局部结构,并为后续的低维映射提供合适的邻域关系。

![[Pasted image 20241027200857.png]]

3. 低维空间映射

在构建并优化好高维空间的图结构之后,UMAP 需要将这个图结构映射到低维空间(通常是二维或三维),并尽可能保持原有的邻域关系。

具体操作:

  • 目标函数

    • UMAP 使用了一种基于交叉熵的损失函数来度量高维图和低维图之间的差异。这个损失函数鼓励低维空间中的点保持其在高维图中的邻域关系。

    低维嵌入的目标函数通常表示为:

L = ∑ i ≠ j − w i , j log ⁡ ( p i , j ) − ( 1 − w i , j ) log ⁡ ( 1 − p i , j ) \large \mathcal{L}=\sum_{i\neq j}-w_{i,j}\log(p_{i,j})-(1-w_{i,j})\log(1-p_{i,j}) L=i=jwi,jlog(pi,j)(1wi,j)log(1pi,j)
其中:

  • wi,j​ 是高维空间中点 i 和 j 之间的权重(相似性)。
  • pi,j​ 是低维空间中点 i 和 j 之间的相似性概率。

4. 结果输出

经过上述优化过程后,UMAP 输出的低维嵌入可以用于多种分析任务:

  • 数据可视化 :将高维数据降维到二维或三维,以便通过散点图等手段进行直观展示。
  • 降维预处理 :作为机器学习模型的预处理步骤,通过降维简化数据结构,提升模型性能。
  • 聚类分析 :降维后的数据能够更清晰地展示数据的聚类结构,有助于发现数据中的模式和簇。

总结

UMAP 的核心思想可以概括为以下几个主要步骤:

  1. 使用 k-NN 获得点的关系结构

    • UMAP 首先通过 k-最近邻(k-NN)算法构建高维数据点之间的图结构。这一步的目的是捕捉数据在高维空间中的局部邻域关系,即哪些点彼此接近。
  2. 优化点的关系权重

    • 构建好 k-NN 图后,UMAP 会为图中的边赋予权重,反映数据点之间的相似性。这是通过考虑数据点在高维空间中的距离,并使用一种非线性变换(如基于距离的概率分布)来计算边的权重。这一步是为了更精确地描述点与点之间的相似性关系。
  3. 随机初始化低维的点

    • 在低维空间中随机初始化数据点的位置。这些点将通过后续的优化过程被调整,以逼近高维空间中的图结构。
  4. 利用损失函数将低维结果逼近高维结果

    • UMAP 定义了一个基于交叉熵的损失函数,用于衡量低维嵌入与高维图结构的差异。通过优化算法(如随机梯度下降,SGD),不断调整低维空间中点的位置,使得低维嵌入能够尽可能保留高维数据中的局部和全局结构。这一步是 UMAP 的核心优化过程,通过最小化损失函数,使得低维嵌入与高维图结构的相似性最大化。

这个过程的核心是保留数据的局部和全局结构 ,这也是 UMAP 在降维任务中表现优异的原因。通过这种逐步逼近和优化的方式,UMAP 能够有效地将高维数据降维到低维空间,并保留数据的拓扑结构。

绘图

![[Pasted image 20241027201241.png]]

  • 和 t-SNE 一样,这玩意只能只管的定性,想要定量细节分析,别想啦👊

实现

Python实现

  1. 首先,你需要安装 umap-learn 库。你可以通过 pip 来安装:
pip install umap-learn
  1. 使用 UMAP 进行降维
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from umap import UMAP

# 加载示例数据集(Iris 数据集)
data = load_iris()
X = data.data
y = data.target

# 标准化数据
scaler = StandardScaler()
X_std = scaler.fit_transform(X)

# 创建 UMAP 模型并进行降维
umap = UMAP(n_components=2, random_state=42)
X_umap = umap.fit_transform(X_std)

# 绘制结果
plt.scatter(X_umap[:, 0], X_umap[:, 1], c=y, cmap='Spectral', s=50, alpha=0.8)
plt.title("UMAP projection of the Iris dataset")
plt.show()

调用UMAP需要注意的参数

  1. n_components :
    • 含义 : 降维后的维度数,通常设置为 2 或 3 以进行可视化。
    • 默认值 : 2
  2. n_neighbors :
    • 含义 : 控制局部邻域的大小。较小的值会更加关注局部结构,而较大的值会捕捉更多的全局结构。
    • 默认值 : 15

补充说明

选择无向图还是有向图?

在 UMAP 中选择使用有向图 还是无向图 ,主要取决于数据的性质、任务的目标以及对局部与全局结构的关注程度。

1. 无向图(Undirected Graph)

在无向图中,如果点 A 和点 B 是彼此的最近邻,那么它们之间会有一条无向边。这意味着 A 和 B 的邻域关系是对称的,即 A 是 B 的邻居,B 也是 A 的邻居。

适用场景:

  • 更加关注局部结构 :无向图强调对称的邻域关系,因此更加关注数据点之间的局部邻域关系。这种方法确保如果一个点被认为是另一个点的邻居,那么这种关系是相互的。
  • 数据分布均匀 :当数据在高维空间中的分布相对均匀,且没有特别复杂的全局结构时,无向图能够很好地保留局部相似性。
  • 对称关系重要 :在某些应用场景中,数据点之间的关系本质上是对称的,例如社交网络中的友谊关系,如果 A 是 B 的朋友,那么 B 也是 A 的朋友。

优点:

  • 简单直观 :无向图的结构更加简单,计算和理解上也更加直观。
  • 保留局部对称关系 :无向图能够很好地保留局部对称的邻域关系。

缺点:

  • 可能忽略方向性信息 :如果数据点之间的关系本质上是非对称的,使用无向图可能会丢失一些方向性信息。

2. 有向图(Directed Graph)

在有向图中,只有当点 A 是点 B 的最近邻或者点 B 是点 A 的最近邻时,才会有有向边。这意味着邻域关系可能是非对称的,即 A 是 B 的邻居,但 B 不一定是 A 的邻居。

适用场景:

  • 更加关注全局结构有向图能够更好地捕捉数据的全局结构,因为它不要求邻域关系是对称的,可以更灵活地反映数据点之间的非对称关系。
  • 数据分布不均匀 :当数据在高维空间中的分布不均匀,或者存在复杂的全局结构时,有向图能够更好地保留这些结构信息。
  • 非对称关系重要 :在某些应用场景中,数据点之间的关系本质上是非对称的,例如网页链接关系,网页 A 链接到网页 B,但网页 B 不一定链接到网页 A。

优点:

  • 更好地保留全局结构 :有向图能够更好地保留数据的全局结构,因为它不要求邻域关系是对称的。
  • 捕捉非对称关系 :有向图能够捕捉数据点之间的非对称关系,这在某些应用场景中非常重要。

缺点:

  • 计算复杂度较高 :有向图的结构更加复杂,计算和存储的复杂度相对较高。
  • 理解和解释更困难 :有向图的结构不如无向图直观,理解和解释起来可能更困难。

具体使用场景示例

  1. 无向图的应用场景

    • 社交网络分析 :在社交网络中,如果 A 和 B 是朋友,那么这种关系是对称的,使用无向图更加合适。
    • 基因表达数据分析 :在基因表达数据中,如果两个基因的表达水平相似,那么它们之间的关系是对称的,可以使用无向图。
  2. 有向图的应用场景

    • 网页链接分析 :在网页链接关系中,网页 A 链接到网页 B,但网页 B 不一定链接到网页 A,这种关系是非对称的,使用有向图更加合适。
    • 交通网络分析 :在交通网络中,道路的连接关系可能是单向的,使用有向图能够更好地反映这种关系。

End

关注我的唯一微信公众号:码上地球。感谢家人们🌹

参考文献

* Dimensionality Reduction, Animated

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值