📜  毫升 |多标签排名指标 - 覆盖误差

📅  最后修改于: 2022-05-13 01:55:13.797000             🧑  作者: Mango

毫升 |多标签排名指标 - 覆盖误差

覆盖误差告诉我们必须包含多少得分最高的最终预测标签,而不会丢失任何真实标签。如果我们想知道预测所需的最高得分预测的平均数量以便不错过任何真实标签,这很有用。
给定一个真实标签的二进制指示矩阵y\epsilon \left \{ 0, 1 \right \}^{n_{samples} * n_{labels}} .与每个标签相关的分数表示为\hat{f}在哪里,


 \hat{f}\epsilon \left \{ \mathbb{R} \right \}^{n_{samples} * n_{labels}}

覆盖误差定义为:

 coverage\left ( y, \hat{f} \right ) = \dfrac{1}{n_{samples}} * \sum_{i=0}^{n_{samples}-1}max_{j: y_{ij}=1} rank_{ij}

其中等级定义为

 rank_{ij} = \left | \left \{  k \colon \hat{f_{ik}}\geq\hat{f_{ij}} \right \}\right |

代码:使用 scikit-learn 检查任何带有真实标签的预测分数的覆盖错误。

# Import dataset
import numpy as np
from sklearn.metrics import coverage_error
  
# Create Imaginary prediction and truth dataset
y_true = np.array([[1, 0, 1], [0, 0, 1], [0, 1, 1]])
y_pred_score = np.array([[0.75, 0.5, 1], [1, 1, 1.2], [2.3, 1.2, 0.1]])
print(coverage_error(y_true, y_pred_score))

输出:

coverage error of 2.0

让我们手动计算上述示例的覆盖率误差
我们的第一个样本的真实值为[1, 0, 1] 。为了覆盖两个真实标签,我们需要按降序查看我们的预测(此处为 [0.75, 0.5, 1]) 。因此,我们需要此样本中的前 2 个预测标签。同样,对于第二个和第三个样本,我们需要 top-1 和 top-2 预测样本。将这些结果在多个样本上平均得到2.0的输出。


  Coverage Error  =\dfrac{\left ( 2+1+3 \right )}{3} = 2.0

覆盖率的最佳值是当它等于真实类标签的平均数量时。