如何正确地将 Kmeans 标签翻译成类别标签
How to correctly translate Kmeans labels to category labels
我一直在使用 Sklearn 的 Kmeans 实现
我一直在对标记的数据集进行聚类,并且我一直在使用 sklearn 的 clustering metrics 来测试聚类性能。
如您所知,Sklearn 的 Kmeans 聚类输出是 k_clusters
范围内的数字列表。但是我的标签是 strings
。
到目前为止,我对它们没有任何问题,因为来自 sklearn.metrics.cluster
的指标适用于混合输入(int
和 str
标签列表)。
但是现在我想使用一些 classification metrics,根据我收集到的信息,输入 k_true
和 k_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" 最优)。最好只使用聚类措施。
我一直在使用 Sklearn 的 Kmeans 实现
我一直在对标记的数据集进行聚类,并且我一直在使用 sklearn 的 clustering metrics 来测试聚类性能。
如您所知,Sklearn 的 Kmeans 聚类输出是 k_clusters
范围内的数字列表。但是我的标签是 strings
。
到目前为止,我对它们没有任何问题,因为来自 sklearn.metrics.cluster
的指标适用于混合输入(int
和 str
标签列表)。
但是现在我想使用一些 classification metrics,根据我收集到的信息,输入 k_true
和 k_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" 最优)。最好只使用聚类措施。