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

如何将关键词与dendrogram算法生成的聚类ID对应关联?

解决层次聚类中关键词与聚类ID的关联问题

你当前用dendrogram返回的res['leaves']只是树状图最后p个聚类的节点索引,无法直接对应到每个关键词的聚类归属。正确的做法是用scipy.cluster.hierarchy里的fcluster函数,直接生成每个关键词对应的聚类标签,具体修改步骤如下:

1. 导入必要函数

确保导入fcluster:

from scipy.cluster.hierarchy import linkage, dendrogram, fcluster

2. 修改聚类代码

替换原代码中dendrogram及后续部分,用fcluster生成每个样本的聚类标签:

def clusterize(self, keywords):
    preprocessed_keywords = normalize(keywords)

    # 生成TF-IDF向量
    tfidf_matrix = self.vectorizer.fit_transform(preprocessed_keywords)

    # 计算层次聚类的链接矩阵
    linkage_matrix = linkage(tfidf_matrix.todense(), method="ward")

    # 生成每个关键词的聚类标签,指定最多生成self.n_clusters个聚类
    cluster_labels = fcluster(linkage_matrix, t=self.n_clusters, criterion='maxclust')

    # 将关键词与聚类标签关联,可以返回配对列表或分组字典
    # 方式1:返回关键词-聚类标签的配对列表
    keyword_cluster_pairs = list(zip(keywords, cluster_labels))
    # 方式2:按聚类ID分组,返回字典(key是聚类ID,value是对应关键词列表)
    # from collections import defaultdict
    # cluster_groups = defaultdict(list)
    # for kw, label in zip(keywords, cluster_labels):
    #     cluster_groups[label].append(kw)
    
    return keyword_cluster_pairs  # 或返回cluster_groups

3. 结果说明

  • cluster_labels是一个长度和输入keywords一致的数组,每个元素对应位置关键词的聚类ID(比如当self.n_clusters=3时,标签会是1、2、3中的一个)。
  • 用zip可以直接把原始关键词和聚类标签一一配对,方便查看每个关键词的归属;用字典分组则能直接得到每个聚类下的所有关键词集合。

为什么原代码的res['leaves']没用?

dendrogram返回的res['leaves']只是树状图绘制时的叶子节点顺序索引,仅代表最后p个聚类的节点标识,并非每个样本的聚类归属,所以无法用来建立关键词和聚类的对应关系。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 17:35:15