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

如何可视化基于共现矩阵训练的Kmeans词聚类结果?

如何可视化基于共现矩阵训练的Kmeans词聚类结果?

你的PCA降维思路其实完全没问题,这是文本聚类可视化里非常常用的操作——毕竟N×N的共现矩阵是高维数据,必须压缩到2维平面才能用散点图展示聚类效果。不过有几个细节可以调整,让你的可视化更贴合你原本的聚类流程,也能让结果更直观:

  • 先聚类再降维(用原始聚类标签来画图)
    你当前的代码里,是先对共现矩阵做PCA降维,然后在降维后的数据上重新跑了Kmeans得到标签,但这和你原本「用共现矩阵训练Kmeans」的流程脱节了。正确的顺序应该是:

    1. 先在原始共现矩阵上训练好你的Kmeans模型,拿到每个词的聚类标签
    2. 再对共现矩阵做PCA(或其他降维方法)压缩到2D
    3. 最后用降维后的坐标和原始的聚类标签来画散点图
      这样可视化的才是你最初基于共现矩阵得到的聚类结果,而不是降维后数据的聚类结果。
  • 除了PCA,还有更适合文本的降维选项
    PCA是线性降维,适合保留全局的线性结构,但文本共现矩阵往往是非线性的,你可以试试这些方法:

    • t-SNE:对非线性结构的捕捉更好,能让相似的聚类更紧凑、不同聚类更分开,不过计算速度比PCA慢一些,适合词表规模不是特别大的情况
    • UMAP:和t-SNE类似,但保留全局结构的能力更强,计算效率也不错,适合更大的词表
      用法和PCA差不多,比如t-SNE的代码示例:
    from sklearn.manifold import TSNE
    import matplotlib.pyplot as plt
    from sklearn.cluster import KMeans
    
    # 先在共现矩阵上训练Kmeans,得到原始标签
    km = KMeans(n_clusters=3)
    original_labels = km.fit_predict(mat)
    
    # 用t-SNE降维
    tsne_2d = TSNE(n_components=2, perplexity=10)
    reduced = tsne_2d.fit_transform(mat)
    
    # 画图
    plt.scatter(reduced[:, 0], reduced[:, 1], c=original_labels)
    plt.title("K-means Clustering (based on co-occurrence matrix)")
    plt.show()
    
  • 给散点加上词标签,让可视化更有意义
    光看彩色散点还不够直观,你可以给每个点加上对应的词,这样一眼就能看到每个聚类里的具体词汇:

    # 假设your_word_list是你处理后的所有唯一词的列表
    for i, word in enumerate(your_word_list):
        plt.text(reduced[i, 0], reduced[i, 1], word, fontsize=8, ha='center')
    

总的来说,PCA是完全正确且基础的可行方法,如果你觉得聚类的区分度不够,就换t-SNE或UMAP试试,核心是要保证可视化用的标签是你基于共现矩阵训练出的Kmeans结果,而不是降维后重新聚类的标签。

备注:内容来源于stack exchange,提问作者Thomas Stokes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 16:14:33