You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否基于20维K-means聚类结果(簇中心+样本点)用UMAP做二维可视化?

20维K-means聚类结果的UMAP二维可视化实现

当然可以实现这个需求,核心思路是先通过UMAP将高维数据(样本点+簇中心)映射到二维空间,再分别按要求着色绘制。以下是具体的Python实现步骤:

准备工作

确保你已经安装了所需的库:

pip install umap-learn pandas matplotlib

代码实现

1. 导入库并加载数据

import umap
import pandas as pd
import matplotlib.pyplot as plt

2. 对样本点进行UMAP降维

假设df_points的最后一列是簇标签(列名比如为cluster),前20列是高维特征:

# 提取样本点的高维特征矩阵
X_points = df_points.iloc[:, :-1]

# 初始化UMAP模型并训练(用样本点数据拟合)
umap_transformer = umap.UMAP(n_components=2, random_state=42)
points_2d = umap_transformer.fit_transform(X_points)

# 将降维后的二维坐标添加到样本点数据框
df_points['umap_x'] = points_2d[:, 0]
df_points['umap_y'] = points_2d[:, 1]

3. 用同一模型转换簇中心到二维空间

为了保证坐标空间一致,必须用训练好的UMAP模型转换簇中心:

# 提取簇中心的高维特征(假设列名与样本点的特征列完全匹配)
X_centers = df_center

# 转换簇中心到二维
centers_2d = umap_transformer.transform(X_centers)

# 整理簇中心的二维坐标数据
df_centers_2d = pd.DataFrame({
    'umap_x': centers_2d[:, 0],
    'umap_y': centers_2d[:, 1],
    'cluster': df_center.index  # 假设簇中心的索引就是簇编号
})

4. 绘制可视化图

plt.figure(figsize=(10, 8))

# 绘制样本点:按所属簇着色,添加透明度避免重叠
sample_scatter = plt.scatter(
    df_points['umap_x'], 
    df_points['umap_y'],
    c=df_points['cluster'],
    cmap='tab20',  # 17个簇用tab20色系足够区分
    alpha=0.6,
    s=20
)

# 绘制簇中心:黑色大叉标记
plt.scatter(
    df_centers_2d['umap_x'],
    df_centers_2d['umap_y'],
    c='black',
    s=100,
    marker='X',
    label='簇中心'
)

# 配置图例和标签
# 生成样本簇的图例项
cluster_legend = sample_scatter.legend_elements()[0]
cluster_labels = [f'簇 {i}' for i in range(17)]
# 添加簇中心的图例项
center_legend = plt.Line2D(
    [], [],
    marker='X', color='black', linestyle='',
    markersize=10, label='簇中心'
)
plt.legend(handles=cluster_legend + [center_legend], labels=cluster_labels + ['簇中心'])

plt.xlabel('UMAP 第一分量')
plt.ylabel('UMAP 第二分量')
plt.title('20维K-means聚类结果的UMAP二维可视化')
plt.colorbar(sample_scatter)
plt.show()

注意事项

  • 务必保证df_center的特征列与df_points的特征列完全一致,否则UMAP转换会报错
  • 如果簇标签列不是最后一列,需要调整X_points的提取方式(比如通过列名指定:X_points = df_points[['f0', 'f1', ..., 'f19']])
  • 可以调整UMAP的参数(如n_neighbors、min_dist)来优化降维后的聚类效果展示
  • 若想用其他降维工具(比如t-SNE),只需替换UMAP部分为sklearn.manifold.TSNE即可,逻辑完全一致

内容的提问来源于stack exchange,提问作者LJG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 18:35:30