📜  多标签排名指标 - 排名损失 |机器学习

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

多标签排名指标 - 排名损失 |机器学习

Ranking Loss 定义为相对于正确排序的标签数量的错误排序标签的数量。排名损失的最佳值可以为零

给定一个真实标签的二进制指示矩阵

y\epsilon \left \{ 0, 1 \right \}^{n_{samples} * n_{labels}}

与每个标签相关的分数表示为\hat{f}在哪里,

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

排名损失可以计算为:
 Ranking-Loss\left ( y, \hat{f} \right ) = \dfrac{1}{n_{samples}} * \sum_{i=0}^{n_{samples}-1}\dfrac{1}{\left \| y_{i} \right \|_0 * \left ( n_{labels}-\left \| y_i \right \|_0 \right )}  \left | \left \{  \left ( k, l \right ) \colon \hat{f_{ik}}\leq\hat{f_{il}} ; y_{ik} = 1, y_{il}=0  \right \} \right |

在哪里 \left \| . \right \|_0表示集合中非零元素的数量,并且\left | . \right |表示向量中元素的数量(集合的基数)。最小排名损失可以为 0。这是当所有标签在预测标签中正确排序时。

代码:使用 scikit-learn 库实现排名损失的Python代码。

# import sklearn and numpy libraries
import numpy as np
from sklearn.metrics import label_ranking_loss
  
# take sample dataset
y_true = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]])
y_pred_score = np.array([[0.75, 0.5, 1], [1, 0.2, 0.1], [0.1, 1, 0.9]])
  
# calculate and print label ranking loss
print(label_ranking_loss(y_true, y_pred_score ))
  
# this will give minimum ranking loss
y_pred_score = np.array([[0.75, 0.5, 0.1], [0.1, 0.6, 0.1], [0.3, 0.3, 0.4]])
print(label_ranking_loss(y_true, y_pred_score ))

输出:

0.5
0

在第一个预测的第一个样本中,唯一的非零标签已排在前 2 个值中。第二个和第三个样本类似。所有人都在基本事实标签中只有一个非标签。


 n_{label} =3 \\ ||y_0||_0 = ||y_1||_0 = ||y_2||_0 = 1 \\

通过将这些值放入我们得到的公式中,

 ranking-loss  = \dfrac{1}{3}\left ( \dfrac{1}{2}*1 +\dfrac{1}{2}*1+\dfrac{1}{2}*1 \right ) \\ ranking-loss = \dfrac{1}{3} * \dfrac{3}{2} \\ ranking-loss = \dfrac{1}{2}

在第二个打印语句中,所有真实标签对应于预测标签中的最大值。因此,ranking loss 为 0。当我们将这些值放入公式时,我们也可以得到相同的答案,因为每个样本的最右边的项是0
参考:
  • Tsoumakas, G., Katakis, I., & Vlahavas, I. (2010)。挖掘多标签数据。在数据挖掘和知识发现手册(第 667-685 页)中。美国施普林格。