一文搞懂t-SNE和UMAP降维方法!

76 阅读9分钟

推荐直接网站在线阅读:aicoting.cn

降维与表示学习是无监督学习中的重要方法,旨在将高维数据映射到低维空间,同时尽可能保留数据的结构与信息。降维方法如 主成分分析(PCA)、独立成分分析(ICA) 能去除冗余特征,降低计算复杂度,并便于可视化;非线性方法如 t-SNE、UMAP 则能在低维空间中保留数据的局部或全局结构。

前面我们介绍了PCA一文搞懂机器学习中的PCA主成分分析!ICA机器学习中独立成分分析ICA和主成分分析PCA有什么区别?今天我们来看一下 t-SNE和UMAP。

所有相关源码示例、流程图、模型配置与知识库构建技巧,我也将持续更新在Github:AIHub,欢迎关注收藏!

t-SNE 降维

在高维数据分析和可视化中,t-SNE(t-distributed Stochastic Neighbor Embedding,t-分布随机邻域嵌入) 是一种非常流行的非线性降维方法,特别适用于将高维数据嵌入到二维或三维空间以进行可视化。

与 PCA 或 ICA 不同,t-SNE 并不关注全局结构,而是重点保持数据在局部邻域的结构关系,使相似样本在低维空间中保持相对接近,而不相似样本尽量远离,从而直观展示数据的聚类或分布模式。

t-SNE 的核心思想是将高维数据中的相似性映射到低维空间。它首先计算高维空间中每对样本的条件概率,表示一个样本选择另一个样本作为邻居的可能性。接着,t-SNE 在低维空间中定义类似的条件概率,并通过最小化高维与低维概率分布之间的 Kullback-Leibler(KL)散度,使低维嵌入尽量保持高维局部相似性。

为了防止“拥挤问题”(Crowding Problem),t-SNE 使用 t 分布(自由度为 1 的学生 t 分布)代替高斯分布,增加低维空间中样本间的分离度。

t-SNE 的算法流程通常包括以下步骤:

  1. 计算高维相似度:对高维数据中的每对样本 ,使用高斯核计算条件概率 ,表示 选择 作为邻居的概率。
  2. 对称化概率:将条件概率对称化得到 。
  3. 初始化低维嵌入:通常随机初始化低维空间中的点 。
  4. 计算低维相似度:使用 t 分布计算低维空间中每对点的相似度 。
  5. 最小化 KL 散度:通过梯度下降最小化高维分布 P 与低维分布 Q 的 KL 散度:
  6. 迭代优化:更新低维嵌入,直到 KL 散度收敛或达到预设迭代次数。

t-SNE 的核心特点是局部结构保持能力强,能很好地将数据中的簇结构和局部关系呈现在低维空间中,但它对全局结构的保留较弱。此外,t-SNE 对超参数敏感,如 perplexity(相当于邻居数量的平滑参数)、学习率和迭代次数都会显著影响结果。实践中,通常需要尝试不同参数组合以获得稳定的可视化效果。

下面使用 Scikit-learn 对 Iris 数据集进行 t-SNE 可视化:

from sklearn.datasets import load_iris
from sklearn.manifold import TSNE
import matplotlib.pyplot as plt

# 加载数据
iris = load_iris()
X = iris.data
y = iris.target

# t-SNE 降维到 2 维
tsne = TSNE(n_components=2, perplexity=30, learning_rate=200, n_iter=1000, random_state=42)
X_tsne = tsne.fit_transform(X)

# 可视化
plt.figure(figsize=(8,6))
plt.scatter(X_tsne[:,0], X_tsne[:,1], c=y, cmap='viridis', s=40)
plt.xlabel("t-SNE Component 1")
plt.ylabel("t-SNE Component 2")
plt.title("t-SNE Visualization of Iris Dataset")
plt.colorbar()
plt.show()

运行结果如下,二维散点图展示了不同类别样本的聚类情况。可以看到,t-SNE 能很好地区分数据的不同簇,并且保持每个簇的局部结构。

总结来说,t-SNE 是一种强大的非线性降维和可视化方法,尤其适用于高维数据的探索性分析。它能有效揭示数据的簇结构和局部关系,使数据可视化更直观。相比 PCA、ICA 等线性方法,t-SNE 更关注局部相似性,但也因此存在全局结构保留不足和计算开销较大的问题。在实际使用中,通过调整超参数,可以获得不同的可视化效果,广泛应用于图像、文本、基因组数据等领域。

UMAP 降维

UMAP(Uniform Manifold Approximation and Projection)是一种先进的非线性降维方法,用于将高维数据映射到低维空间,同时尽可能保留数据的局部和全局结构。

UMAP 结合了流形学习理论和图论方法,相比 t-SNE,它不仅保留局部邻域关系,同时在低维空间中对全局结构的保留也更好,并且计算效率更高。UMAP 广泛应用于高维数据可视化、聚类分析、特征提取等场景。

算法原理

UMAP 基于流形假设,假设高维数据分布在低维流形上,并且数据的局部邻域可以反映流形的几何结构。UMAP 的核心思想是:首先通过高维空间中的邻域关系构建一个加权图,然后将图映射到低维空间,通过优化低维空间中点的相似性,使得邻居关系尽可能保持一致。

具体而言,UMAP 通过以下步骤建立映射:

  1. 高维邻域图构建:对每个样本计算 k 个最近邻,并使用模糊集合理论定义邻居之间的相似度权重。
  2. 低维图初始化:随机初始化低维空间中每个样本的位置。
  3. 优化嵌入:通过交叉熵损失函数最小化高维图和低维图之间的差异,使低维点的邻居关系与高维数据尽量一致。

UMAP 的优化过程使用随机梯度下降(SGD),使其在处理大规模数据时也能保持高效率。UMAP 的非线性特性使它能够捕捉复杂的数据结构,同时保留局部和部分全局关系。

算法特点

与其他降维方法相比,UMAP 具有以下显著特点:

  • 局部结构保持能力强:类似 t-SNE,能够将相似样本在低维空间中聚集。
  • 全局结构保留较好:相比 t-SNE,UMAP 在低维空间中更好地保持簇之间的相对位置关系。
  • 高计算效率:UMAP 利用图近似和优化算法,对大规模数据的降维速度快。
  • 可扩展性强:UMAP 可以处理数十万到百万级样本的数据集,同时支持新样本的嵌入。
  • 超参数可控:主要包括 n_neighbors(邻居数量)和 min_dist(最小距离),分别控制局部平滑和低维空间簇的紧密程度。

下面用 Python 的 umap-learn 库对 Iris 数据集进行降维和可视化示例:

import umap
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt

# 加载数据
iris = load_iris()
X = iris.data
y = iris.target

# UMAP 降维到 2 维
umap_model = umap.UMAP(n_neighbors=15, min_dist=0.1, n_components=2, random_state=42)
X_umap = umap_model.fit_transform(X)

# 可视化
plt.figure(figsize=(8,6))
plt.scatter(X_umap[:,0], X_umap[:,1], c=y, cmap='viridis', s=40)
plt.xlabel("UMAP Component 1")
plt.ylabel("UMAP Component 2")
plt.title("UMAP Visualization of Iris Dataset")
plt.colorbar()
plt.show()

在结果中,不同类别的样本被清晰地分开,UMAP 能同时保留局部簇结构和簇之间的全局关系。

UMAP 适用于多种高维数据分析任务:

  • 数据可视化:二维或三维投影,便于观察数据分布和聚类结构。
  • 聚类前处理:降低维度减少计算量,提高聚类算法效率。
  • 特征提取:从高维数据中提取低维特征用于分类或回归任务。
  • 生物信息学:用于单细胞 RNA-seq 数据分析和可视化。
  • 图像与文本:在图像嵌入和自然语言处理特征表示中广泛使用。

总结一下,UMAP 是一种高效、灵活的非线性降维方法,结合了流形学习和图优化思想,能够在低维空间中同时保留局部和全局结构。相比 t-SNE,它在可视化高维数据簇结构和保持簇间关系方面表现更好,同时计算速度更快。UMAP 的超参数可调,使其在不同数据集和任务中灵活适配。通过合理使用 UMAP,可以将复杂高维数据的模式、簇结构和潜在特征直观呈现,为后续分析和建模提供有力支持。

📚 推荐阅读

机器学习之数据预处理篇!

机器学习特征工程中的特征选择

机器学习中的特征构造

机器学习之特征降维

一文搞懂层次聚类和密度聚类方法!

一文搞懂机器学习中的PCA主成分分析!

机器学习中独立成分分析ICA和主成分分析PCA有什么区别?

最新的文章都在公众号更新,别忘记关注哦!!!

作者:aicoting

分享是一种信仰,连接让成长更有温度。

我们下次不见不散!