Python下hierarchical agglomerative clustering簇文章计数及簇名获取问题
参考你提到的HAC簇创建流程的标准实现(基于sklearn,工业界最常用的HAC开发接口):
from sklearn.cluster import AgglomerativeClustering import numpy as np import pandas as pd # 假设X是你预处理完成的文章特征矩阵(如TF-IDF、句向量矩阵) hac_model = AgglomerativeClustering(n_clusters=5, linkage='ward') hac_model.fit(X)
对应问题的解决方案
1. 一行代码统计并展示各簇的文章数量
两种常用单行实现,直接运行即可输出结果:
- 带清晰格式的直观输出(推荐用pandas版本):
print(pd.Series(hac_model.labels_).value_counts().sort_index())
输出会自动按簇ID排序,同时展示每个簇对应的文章计数,适合快速核对簇分布。 - 纯numpy无额外依赖的实现:
print({cid: cnt for cid, cnt in zip(*np.unique(hac_model.labels_, return_counts=True))})
直接输出字典结构的簇ID-文章数映射,不需要依赖pandas。
2. 获取算法生成的所有簇的名称标识
首先明确:HAC算法本身没有内置的语义化命名逻辑,所有簇的官方唯一标识就是拟合完成后输出的整数型ID。
- 提取所有簇的内置标识列表:
cluster_ids = np.unique(hac_model.labels_)
拿到的数组就是所有不重复的簇ID集合,和前面统计的计数键完全一一对应。 - 如果需要自定义语义化簇名(比如提取簇内高频关键词命名),可以自行建立映射关系:
比如先定义cluster_name_map = {0: "时政类文章", 1: "文娱类文章", ...},之后通过列表推导[cluster_name_map[cid] for cid in cluster_ids]就能拿到你需要的自定义名称列表。
小提示:如果你用的是
fit_predict方法完成聚类(比如代码写成cluster_labels = hac_model.fit_predict(X)),把上述所有代码里的hac_model.labels_替换成cluster_labels就能正常运行,逻辑没有区别。
内容的提问来源于stack exchange,提问作者CoderGirl
相关产品推荐
相关产品推荐

