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

📅  最后修改于: 2023-12-03 15:11:01.815000             🧑  作者: Mango

多标签排名指标 - 覆盖误差

简介

在机器学习中,多标签分类是一种分类任务,其中每个样本可以属于多个类别。多标签分类的评估指标之一是覆盖误差。

覆盖误差衡量多标签分类算法预测的标签与真实标签之间的差距。具体地,对于一个样本,我们将其真实标签集合记为 $y_*$,将算法预测出的标签集合记为 $y$。假设 $y_*$ 和 $y$ 中的标签数量分别为 $K$ 和 $L$,则覆盖误差为:

$$ CE(y,y_*) = 1 - \frac{1}{K}\sum_{i=1}^{K}[y_i \in y] $$

其中 $[y_i \in y]$ 为指示函数,如果 $y_i$ 在 $y$ 中出现过,其值为 1,否则为 0。

覆盖误差的取值范围为 $[0,1]$,误差越小表示模型和真实标签集合越接近。

代码实现

下面是 Python 代码实现覆盖误差的计算:

import numpy as np

def coverage_error(y_true, y_pred):
    K = y_true.shape[1]
    cover = np.sum(y_pred, axis=1) / K
    return 1 - np.mean(np.sum(y_true * y_pred, axis=1) / np.maximum(1, cover))

其中,y_true 是真实标签的二元矩阵,形状为 $(N,K)$,$N$ 是样本数,$K$ 是标签数;y_pred 是算法预测的标签的二元矩阵,形状也为 $(N,K)$。

注意事项

在使用覆盖误差时,需要注意以下几点:

  1. 覆盖误差并不适用于所有类型的多标签分类问题。具体而言,如果标签之间存在互斥关系(即不能同时出现),则覆盖误差并不是一个有效的指标。
  2. 有时我们会使用在每个样本上的平均覆盖误差作为评估指标,即 $CE_{macro} = \frac{1}{N}\sum_{i=1}^{N}CE(y_i,y_{i*})$,其中 $y_i$ 和 $y_{i*}$ 分别为第 $i$ 个样本的预测标签和真实标签。这种评估指标更容易受到异常值的影响,因此在设计实验时需慎重考虑。