如何正确地将 Kmeans 标签翻译成类别标签

How to correctly translate Kmeans labels to category labels

我一直在使用 Sklearn 的 Kmeans 实现

我一直在对标记的数据集进行聚类,并且我一直在使用 sklearn 的 clustering metrics 来测试聚类性能。

如您所知,Sklearn 的 Kmeans 聚类输出是 k_clusters 范围内的数字列表。但是我的标签是 strings

到目前为止,我对它们没有任何问题,因为来自 sklearn.metrics.cluster 的指标适用于混合输入(intstr 标签列表)。

但是现在我想使用一些 classification metrics,根据我收集到的信息,输入 k_truek_pred 需要属于同一组。 k 范围内的数字,或者我的数据集正在使用的字符串标签。如果我尝试,它 returns 出现以下错误:

AttributeError: 'bool' object has no attribute 'sum'

那么,我怎样才能将 k_means 标签翻译成其他类型的标签呢?或者甚至相反(字符串标签 -> 整数标签)。

我怎样才能开始实施它?由于 k_means 是非常不确定的,标签可能会随着迭代而变化。是否有正确翻译 Kmeans 标签的合法方法?

编辑:

示例

对于 k = 4

kmeans 输出:[0,3,3,2,........0]

class 标签:['CAT','DOG','DOG','BIRD',.......'CHICKEN']

您可以使用字典创建映射,比如

mapping_dict = { 0: 'cat', 1: 'chicken', 2:'bird', 3:'dog'}

然后你可以使用说列表理解等简单地应用这个映射。 假设您的标签存储在列表 kmeans_predictions

mapped_predictions = [ mapping_dict[x] for x in kmeans_predictions]

然后使用 mapped_predictions 作为您的预测

更新 :根据您的意见,我相信您必须反过来做。我的意思是将您的标签转换为“int”映射。

此外,您不能在此处仅使用任何分类指标。使用 Completeness score, v-measure and homogenity 因为它们更适合聚类问题。在这里盲目地使用任何随机分类指标都是不正确的。

聚类不是分类。

这些方法不预测标签,因此您不得使用分类评估指标。这就像以每加仑英里数来衡量苹果的质量...

如果你坚持做错事(tm) 然后使用匈牙利算法找到最佳映射。但要注意:簇的数量和 类 的数量通常会 不一样。如果是这种情况,使用这样的映射要么是不公平的负面(不映射额外的集群),要么是不公平的正面(将 !uktiple 集群映射到相同的标签将认为 N 点是 N 集群 "solution" 最优)。最好只使用聚类措施。