machine-learning - 计算kmeans模型的准确度得分
问题描述
这按预期工作,并为其中一组返回 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)
但这对所有 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
,asH(C)
始终小于 0。如果H(C|K) = 0
,则表示随机变量 C 完全由给定的随机变量 K 确定,您可以查看条件熵的更详细定义. 所以在你的第一种情况下,为什么 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。
推荐阅读
- php - Laravel 123 中的数组推送
- reactjs - 将 React Markdown NPM 导入 Codepen 会返回空白页
- javascript - 深度优先搜索的深拷贝对象
- python - Django DRF在自定义装饰器中获取请求查询参数,应用于viewsets.ViewSet中的函数
- javascript - 无法将 Ajax 数据传递到 HTML 表中
- laravel - SPA 和外部用户的相同 API 路由
- python - 在 Odoo12 中从 Jquery 调用 python 函数?
- flutter - 收到 fcm onBackgroundMessage 后颤振打开应用程序
- json - 即使 application/json 标头存在,lambda 函数中的 event.body 也不是对象
- python - 迭代字典键和值