如何正确地将Kmeans标签转换为类别标签

时间:2018-06-16 16:22:30

标签: python scikit-learn cluster-analysis labels

我一直在使用Sklearn的Kmeans实现

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

Sklearn的Kmeans聚类输出就像您知道k_clusters范围内的数字列表一样。但我的标签是strings

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

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

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

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

我怎么能开始实施呢?由于k_means非常不确定,因此标签可能会从迭代变为迭代。有正确的方法来正确翻译Kmeans标签吗?

编辑:

实施例

表示k = 4

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

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

2 个答案:

答案 0 :(得分:1)

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

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

然后您可以使用say list comprehension等简单地应用此映射。 假设您的标签存储在列表kmeans_predictions

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

然后使用mapped_predictions作为预测

更新:根据您的评论,我相信您必须反过来这样做。我的意思是将您的标签转换为`int'映射。

此外,您不能在此处使用任何分类指标。使用Completeness scorev-measurehomogenity因为这些更适合群集问题。在这里盲目使用任何随机分类指标是不正确的。

答案 1 :(得分:1)

群集不是分类。

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

如果你坚持做错事(tm),那么使用匈牙利算法找到最佳映射。但要注意:集群的数量和类的数量通常不一样。如果是这种情况,使用这样的映射将是不公平的负面(不映射额外的集群)或不公平的正面(映射!uktiple集群到同一标签将考虑N个点是N个集群"解决方案"最优)。最好只使用聚类测量。