比较具有基本事实的聚类
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了比较具有基本事实的聚类相关的知识,希望对你有一定的参考价值。
[在将我的HAC聚类结果与手工标记文档的真实性进行比较时,我遇到了问题。
整个数据集由9k个文档组成,而真实数据为100;最后一个允许使用多标签,而聚类过程仅将文档分配给一个聚类。它们都被加载到熊猫数据框中。
集群
id label
0 1
1 4
2 9
....
9k 3
地面真理
id label1 label2 label3 ... labeln
0 0 1 0 1
1 1 0 1 ... 0
.....
100 0 0 0 ...... 0
一列中的'1'表示具有该ID的文档已分配给该标签(或那些标签)。
簇的数量等于标签的数量(由用户分配),比方说-> 14
现在我正在这样做:
# computes all possible pairs
def all_pairs(partition):
return list(itertools.combinations(partition, 2))
# main
indexes = list(map(int, ground_truth['id'].values.tolist()))
# reduce clusters_file matching only manually analyzed documents:
reduced_df = clusters.loc[clusters['id'].isin(indexes), :]
clusters_groups = reduced_df.groupby('label')
clusters_k = len(clusters_groups)
for label, df_group in clusters_groups:
docs_in_cluster = df_group['id'].values.tolist()
pairs_docs_in_cluster = all_pairs(docs_in_cluster)
intersection_list = []
for col in self.ground_truth.columns[1:]:
# get pairs for this columns/label
constraints = list(
map(int, ground_truth.loc[ground_truth[col] == 1, 'id'].values.tolist())
)
pairs_constraints = all_pairs(constraints)
# find sets intersection (of pairs) between current cluster and ground_truth
intersection = list(set(pairs_constraints) & set(pairs_docs_in_cluster))
if len(intersection) > 0:
# concatenate with other labels from ground_truth
intersection_list += intersection
ratio = len(intersection_list) / len(pairs_docs_in_cluster) * 100
print("Cluster: ", label, "[] elements".format(df_group.shape[0]),
'matched unique pairs'.format(len(intersection_list)), "--> :.2f %".format(ratio))
而且我得到类似的东西:
Automatic clustering: 8469 elements and k=14 clusters
Ground Truth: 107 elements and m=14 labels
Cluster: 0 [29] elements matched 111 unique pairs --> 27.34 %
Cluster: 1 [5] elements matched 1 unique pairs --> 10.00 %
Cluster: 2 [1] elements matched 0 unique pairs --> 0.00 %
Cluster: 3 [1] elements matched 0 unique pairs --> 0.00 %
Cluster: 4 [9] elements matched 5 unique pairs --> 13.89 %
Cluster: 5 [6] elements matched 2 unique pairs --> 13.33 %
Cluster: 6 [13] elements matched 27 unique pairs --> 34.62 %
Cluster: 7 [2] elements matched 0 unique pairs --> 0.00 %
Cluster: 8 [4] elements matched 3 unique pairs --> 50.00 %
Cluster: 9 [3] elements matched 0 unique pairs --> 0.00 %
Cluster: 10 [2] elements matched 0 unique pairs --> 0.00 %
Cluster: 11 [8] elements matched 2 unique pairs --> 7.14 %
Cluster: 12 [6] elements matched 10 unique pairs --> 66.67 %
Cluster: 13 [17] elements matched 29 unique pairs --> 21.32 %
这很糟糕,但是如果我检查了聚类结果,它们看起来并不那么糟糕。因此,我认为我的评估指标(比率计算)是错误的,但我真的看不到我的错误在哪里(如果有的话)。
答案
AMI或(调整后的共同信息)得分被重新调整,使得随机聚类得分为0。NMI(归一化共同信息)用于您拥有不同数量簇的情况,因此通常是集群社区。 两个度量值的范围都在0到1之间,其中0被认为是随机聚类,而1则完全符合基本事实。
还存在其他度量,例如F度量或纯度。
我不确定,为什么您的“基本事实”中存在许多不同的标签,但是您可以对这些标签进行多数表决以观察一个基本事实。
以上是关于比较具有基本事实的聚类的主要内容,如果未能解决你的问题,请参考以下文章