我一直在使用 Sklearn 的 Kmeans 实现
我一直在对一个有标签的数据集进行聚类,并且我一直在使用 sklearn 的 clustering metrics以测试聚类性能。
Sklearn 的 Kmeans 聚类输出如您所知,是 k_clusters
范围内的数字列表。然而我的标签是字符串
。
到目前为止,我对它们没有任何问题,因为来自 sklearn.metrics.cluster
的指标适用于混合输入(int
和 str
标签列表)。
但是现在我想使用 classification metrics 中的一些根据我收集的信息,输入 k_true
和 k_pred
需要属于同一组。要么是 k
范围内的数字,要么是我的数据集正在使用的字符串标签。如果我尝试它,它会返回以下错误:
AttributeError:“bool”对象没有属性“sum”
那么,如何将 k_means
标签转换为其他类型的标签?或者甚至相反(字符串标签 -> 整数标签)。
我怎样才能开始实现它呢?由于 k_means 相当不确定,因此标签可能会因迭代而变化。有没有合法的方法可以正确翻译 Kmeans 标签?
编辑:
示例
对于 k = 4
kmeans 输出:[0,3,3,2,........0]
类标签:['CAT','DOG','DOG','BIRD',.......'CHICKEN']
最佳答案
聚类不是分类。
这些方法不会预测标签,因此您不得使用分类评估措施。这就像以每加仑英里数来衡量苹果的质量一样......
如果你坚持做错事(tm),那么使用匈牙利算法来找到最佳映射。但要注意:簇的数量和类的数量通常不会相同。如果是这种情况,使用这样的映射要么是不公平的负值(不映射额外的簇),要么是不公平的正值(将 !uktiple 簇映射到同一标签将认为 N 个点是 N 个簇“解决方案”最优)。最好只使用聚类措施。
关于python - 如何正确将Kmeans标签翻译为类别标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50889623/