利用UMAP进行高效聚类分析的实践指南
umap Uniform Manifold Approximation and Projection 项目地址: https://gitcode.com/gh_mirrors/um/umap
前言
UMAP(Uniform Manifold Approximation and Projection)作为一种强大的降维技术,不仅可用于数据可视化,还能显著提升基于密度的聚类算法性能。本文将深入探讨如何利用UMAP作为预处理步骤来增强聚类效果,并通过MNIST手写数字数据集的实际案例展示其应用。
UMAP与聚类的关系
UMAP作为非线性降维方法,能够保留数据的高维结构,这使得它成为聚类前数据预处理的理想选择。然而需要注意:
- UMAP不会完全保留原始数据的密度分布
- 可能会在聚类中产生虚假的分割
- 需要谨慎评估聚类结果的有效性
实验准备
我们使用MNIST数据集进行演示,该数据集包含28×28像素的手写数字灰度图像(0-9),每个样本可表示为784维向量。
from sklearn.datasets import fetch_openml
import numpy as np
import matplotlib.pyplot as plt
import umap
import hdbscan
from sklearn.cluster import KMeans
from sklearn.metrics import adjusted_rand_score, adjusted_mutual_info_score
mnist = fetch_openml('mnist_784', version=1)
mnist.target = mnist.target.astype(int)
传统聚类方法的局限性
K-Means聚类尝试
首先我们尝试在原始784维空间中使用K-Means聚类:
kmeans_labels = KMeans(n_clusters=10).fit_predict(mnist.data)
评估结果显示调整兰德指数(ARI)和调整互信息(AMI)得分仅为0.37和0.50,表明K-Means在高维空间中表现不佳。
HDBSCAN密度聚类尝试
接着我们尝试更先进的HDBSCAN密度聚类算法:
lowd_mnist = PCA(n_components=50).fit_transform(mnist.data)
hdbscan_labels = hdbscan.HDBSCAN(min_samples=10, min_cluster_size=500).fit_predict(lowd_mnist)
虽然HDBSCAN在已聚类数据上表现极佳(ARI=0.998),但它仅对17%的数据进行了聚类,大部分数据被标记为噪声。
UMAP增强的聚类方法
UMAP参数调优
为聚类优化的UMAP参数设置与可视化不同:
- 增大n_neighbors(如30)以关注更全局的结构
- 减小min_dist(如0.0)使点更紧密聚集
- 选择合适的降维维度(本例使用2维)
clusterable_embedding = umap.UMAP(
n_neighbors=30,
min_dist=0.0,
n_components=2,
random_state=42,
).fit_transform(mnist.data)
增强后的HDBSCAN聚类
在UMAP降维后的空间中进行HDBSCAN聚类:
labels = hdbscan.HDBSCAN(min_samples=10, min_cluster_size=500).fit_predict(clusterable_embedding)
结果对比
| 方法 | 聚类比例 | ARI(全部) | AMI(全部) | ARI(已聚类) | AMI(已聚类) | |------|---------|----------|----------|------------|------------| | K-Means | 100% | 0.37 | 0.50 | - | - | | HDBSCAN(原始) | 17% | 0.05 | 0.20 | 0.998 | 0.994 | | HDBSCAN+UMAP | 99% | 0.92 | 0.90 | 0.932 | 0.919 |
UMAP增强的方法成功聚类了99%的数据,同时保持了高质量的聚类结果(ARI=0.92),性能接近当前最先进的卷积自编码器技术。
最佳实践建议
- 对于聚类任务,UMAP参数应与可视化任务不同
- 不要过度降维,选择合适的维度(2-10维)
- 结合多种聚类评估指标验证结果
- 注意解释聚类结果时考虑UMAP可能引入的伪结构
- 对于不同数据集需要调整UMAP和聚类参数
结论
UMAP作为聚类前的预处理步骤,能够有效解决高维数据密度估计困难的问题,显著提升密度聚类算法如HDBSCAN的性能。通过合理参数设置,可以在保持高质量聚类的同时大幅提高可聚类数据的比例。这种方法简单高效,为高维数据聚类提供了实用解决方案。
umap Uniform Manifold Approximation and Projection 项目地址: https://gitcode.com/gh_mirrors/um/umap
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考