0

我不了解在 sklearn.metrics 模块中可用的 scikit learn 中如何计算 coverage_error。文档中的解释如下:

coverage_error 函数计算必须包含在最终预测中的标签的平均数量,以便预测所有真实标签。

例如:

import numpy as np
from sklearn.metrics import coverage_error
y_true = np.array([[1, 0, 0], [0, 1, 1]])
y_score = np.array([[1, 0, 0], [0, 1, 1]])
print coverage_error(y_true, y_score)
1.5

根据我的理解,这里我们需要从预测中包含 3 个标签来获取 y_true 中的所有标签。所以覆盖误差 = 3/2,即 1.5。但我无法理解在以下情况下会发生什么:

>>> y_score = np.array([[1, 0, 0], [0, 0, 1]])
>>> print coverage_error(y_true, y_score)
2.0
>>> y_score = np.array([[1, 0, 1], [0, 1, 1]])
>>> print coverage_error(y_true, y_score)
2.0

为什么两种情况下的错误都是一样的?

4

1 回答 1

4

您可以查看用户指南 3.3.3。多标签排名指标

在此处输入图像描述

在此处输入图像描述

您需要注意的一件事是如何计算排名并在排名中打破平局y_score

具体来说,第一种情况:

In [4]: y_true
Out[4]:
array([[1, 0, 0],
       [0, 1, 1]])

In [5]: y_score
Out[5]:
array([[1, 0, 0],
       [0, 0, 1]])
  1. 对于第 1 个样本,第 1 个真标签为真,第 1 个得分的等级为 1。
  2. 对于第2个样本,第2个和第3个真实标签为真,分数的等级分别为3和1,因此最大等级为3。
  3. 平均值为 (3+1)/2=2。

第二种情况:

In [7]: y_score
Out[7]:
array([[1, 0, 1],
       [0, 1, 1]])
  1. 对于第 1 个样本,第 1 个真标签为真,第 1 个得分的等级为 2。
  2. 对于第2个样本,第2个和第3个真实标签为真,分数的秩分别为2和2,因此最大秩为2。
  3. 平均值为 (2+2)/2=2。

编辑:

秩在 的一个样本内y_score。该公式表示标签的排名是分数大于或等于其分数的标签(包括其自身)的数量。

就像对标签进行排序一样y_score,得分最高的标签排名第一,第二大的标签排名第二,第三大的标签排名第三,以此类推。但如果第二和第三大标签的分数相同,则它们是均排名第 3。

注意y_score

目标分数可以是正类的概率估计、置信度值或二元决策。

目标是预测所有真实标签,因此我们需要包含所有分数高于或等于真实标签的标签。

于 2015-07-09T09:51:42.783 回答