计算kmeans模型的准确率分数

Calculate accuracy score of kmeans model

这按预期工作,returns 1 为一组。

from sklearn import metrics

labels_true = [0, 0, 0, 1, 1, 1]
labels_pred = [6, 6, 6, 1, 2, 2]

metrics.homogeneity_completeness_v_measure(labels_true, labels_pred)

(1.0, 0.6853314789615865, 0.8132898335036762)

但是这 returns 所有 3 个组都是 0.75,而我预计其中一个组是“1.0”,就像上面提到的例子。

y = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]


labels = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 2, 2, 2, 0, 2, 2, 2,
       2, 2, 2, 0, 0, 2, 2, 2, 2, 0, 2, 0, 2, 0, 2, 2, 0, 0, 2, 2, 2, 2,
       2, 0, 2, 2, 2, 2, 0, 2, 2, 2, 0, 2, 2, 2, 0, 2, 2, 0]


metrics.homogeneity_completeness_v_measure(y, labels)

(0.7514854021988339, 0.7649861514489816, 0.7581756800057786)

预计在上述一组中有 1 人!


更新:

如您所见,其中一组与另一组匹配,因此其中一个值应该是 1,而不是我为所有 3 组获得的 0.75 准确度。这不是预期的!

from collections import Counter

Counter(y)
Counter(labels)

Counter({0: 50, 1: 50, 2: 50})
Counter({1: 50, 0: 62, 2: 38})

首先,同质性、完整性和v度量得分计算如下:

C和K是两个随机变量。在您的情况下,C 是标签 true,而 K 是预测的标签。 如果h = 1,则表示H(C|K) = 0,因为H(C)总是小于0。如果H(C|K) = 0,则表示随机变量C完全由给定的随机变量K决定,你可以在 conditional entropy 上看到更详细的定义。所以在你的第一种情况下,为什么 h = 1?因为当我给出随机变量 K(预测标签)的值时,我知道随机变量 C(标签为真)会是什么。如果 k 等于 6,我知道 c 是 0。如果 k 是 1,c 是 1,等等。所以当谈到第二种情况时,为什么 h != 1 或 c != 1。因为即使两者之间存在完美匹配1比0,但没有完美匹配其他类。如果我给 k 是 1,我知道 c 是 0。但是当我给 k 是 0 时,我不确定 c 是 1 还是 2。因此,同质性得分或相反,完整性得分,你可以考虑一下, 不会是 1.