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

Python 如何正确地将Kmeans标签转换为类别标签,python,scikit-learn,cluster-analysis,labels,Python,Scikit Learn,Cluster Analysis,Labels,我一直在使用Sklearn的Kmeans实现 我一直在对一个标记为的数据集进行聚类,我一直在使用sklearn来测试聚类性能 Sklearn的Kmeans集群输出是一个在k_集群范围内的数字列表。但是,我的标签是字符串 到目前为止,我对它们没有任何问题,因为sklearn.metrics.cluster中的度量使用混合输入(int&str标签列表) 但是现在我想使用一些,从我收集的数据来看,输入k_true和k_pred需要是同一组。在k范围内的数字,或者我的数据集正在使用的字符串标签。如果我尝

我一直在使用Sklearn的Kmeans实现

我一直在对一个标记为的数据集进行聚类,我一直在使用sklearn来测试聚类性能

Sklearn的Kmeans集群输出是一个在
k_集群范围内的数字列表。但是,我的标签是
字符串

到目前为止,我对它们没有任何问题,因为
sklearn.metrics.cluster
中的度量使用混合输入(
int
&
str
标签列表)

但是现在我想使用一些,从我收集的数据来看,输入
k_true
k_pred
需要是同一组。在
k
范围内的数字,或者我的数据集正在使用的字符串标签。如果我尝试,它将返回以下错误:

AttributeError:“bool”对象没有属性“sum”

那么,我如何将
k_意思
标签转换为其他类型的标签呢?甚至相反(字符串标签->整数标签)

我怎么才能开始实施它呢?因为k_均值是非常不确定的,标签可能会随着迭代而变化。有没有合法的方法来正确翻译Kmeans标签

编辑:

范例

对于k=4

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


类标签:
['CAT'、'DOG'、'DOG'、'BIRD'、….'CHICKEN']
您可以使用字典创建映射,例如

mapping_dict = { 0: 'cat', 1: 'chicken', 2:'bird', 3:'dog'}
然后,您可以使用列表理解等简单地应用此映射。 假设您的标签存储在列表中
kmeans\u predictions

mapped_predictions = [ mapping_dict[x] for x in kmeans_predictions]
然后使用
mapped\u预测
作为您的预测

更新:根据你的评论,我认为你必须反过来做。我的意思是将标签转换为“int”映射


此外,此处不能仅使用任何分类度量。使用和,因为它们更适合于集群问题。在这里盲目使用任何随机分类指标都是不正确的。

聚类不是分类

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


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

@MohammedKashif我添加了一个问题示例,谢谢你的回答。我的问题不是技术如何,而是如何组织映射。哪个
int
标签将映射到哪个
str
标签。我可能可以观察每个集群的分布,但这可能会在过程中隐藏一些陷阱。关于集群和类的数量。我将使用kmeans,因此我将寻找与类匹配的方法。关于这些措施,我想你是对的。不同事物的不同度量标准。然而,我认为
F1
精度
召回
可以应用于聚类,对吗?无论如何,谢谢你的意见。我很感激。欢呼对于不需要1:1映射的聚类来说,精度、召回率和F1是不同的。哦,我明白了。您知道哪些实现?