【发布时间】:2020-08-27 05:25:36
【问题描述】:
我正在使用不同方法(Kmeans、HAC 和 LDA)进行文档聚类。
现在我已经对我的文档进行了一些手动聚类,以检查我所说的必须放在一起的文档是否以及有多少实际上放在一起。
聚类的输出(对于所有方法)是标准的,是 CSV,格式为:
聚类输出
id label
0 1
1 4
2 0
...
N 1
其中“id”是我的存储库中文档的 ID,标签是指分配的集群。请注意,在不同的方法中,聚类的数量并不总是相同。
我准备好的另一个文档以如下形式加载到 pandas 数据框中:
GroundTruth
id label1 label2 label3 [...] labelM
0 0 1 0 1
1 1 1 0 0
2 0 0 1 0
是一种“单热编码”,注意在用户手动分配标签期间,允许多个标签(因为文档可以属于不同的主题)
现在我被比较背后的逻辑所困扰。作为第一次尝试,我这样做了:
- 按集群标签对集群输出中的文档进行分组
- 循环遍历每组中的文档
- 遍历 GroundTruth 数据框列并提取值 == 1(已分配标签)的行
-
计算 (3) 中有多少项属于 (2) 的百分比。
for label, df_group in clusters_groups: docs_in_cluster = df_group['id'].values.tolist() # here we have a dataframe for each cluster for (columnName, columnData) in ground_truth.iteritems(): overlapping = 0 count = 0 if columnName != 'id': togethers = ground_truth.loc[ground_truth[columnName] == 1, 'id'] for doc in togethers.values.tolist(): if int(doc) in docs_in_cluster: count += 1 overlapping = count/len(togethers.values.tolist()) * 100 print("For label:", label, " the overlapping is: {:.2f}%".format(overlapping))
代码有效,但我不太相信这种方法。
有更好的方法来评估集合的重叠吗?
【问题讨论】: