• 机器学习sklearn(二十六): 模型评估(六)量化预测的质量(三)多标签排名指标


    在多分类学习中,每个样本可以具有与其相关联的任何数量的真实标签。目标是给予高分,更好地评价真实标签。

    1. 覆盖误差

    coverage_error 函数计算必须包含在最终预测中的标签的平均数,以便预测所有真正的标签。 如果您想知道有多少 top 评分标签,您必须通过平均来预测,而不会丢失任何真正的标签,这很有用。 因此,此指标的最佳价值是真正标签的平均数量。

    注意

    我们的实现的得分比 Tsoumakas 等人在2010年的提出的计算方式大1。这扩展了它来处理一个具有0个真实标签实例的退化情况的能力。

    正式地,给定真实标签 y in left{0, 1
ight}^{n_	ext{samples} 	imes n_	ext{labels}} 的二进制指示矩阵和与每个标签 hat{f} in mathbb{R}^{n_	ext{samples} 	imes n_	ext{labels}} 相关联的分数,覆盖范围被定义为

    coverage(y, hat{f}) = frac{1}{n_{	ext{samples}}}
  sum_{i=0}^{n_{	ext{samples}} - 1} max_{j:y_{ij} = 1} 	ext{rank}_{ij}

    与 	ext{rank}_{ij} = left|left{k: hat{f}_{ik} geq hat{f}_{ij} 
ight}
ight| 。给定等级定义,通过给出将被分配给所有绑定值的最大等级, y_scores 中的关系会被破坏。

    这是一个使用这个函数的小示例:

    >>> import numpy as np
    >>> from sklearn.metrics import coverage_error
    >>> y_true = np.array([[1, 0, 0], [0, 0, 1]])
    >>> y_score = np.array([[0.75, 0.5, 1], [1, 0.2, 0.1]])
    >>> coverage_error(y_true, y_score)
    2.5

    2. 标签排名平均精度

    label_ranking_average_precision_score 函数实现标签排名平均精度(LRAP)。 该度量值与 average_precision_score 函数相关联,但是基于标签排名的概念,而不是精确度和召回。

    标签排名平均精度(LRAP)是分配给每个样本的每个真实标签的平均值,真实对总标签与较低分数的比率。 如果能够为每个样本相关标签提供更好的排名,这个指标就会产生更好的分数。 获得的得分总是严格大于0,最佳值为1。如果每个样本只有一个相关标签,则标签排名平均精度等于 平均倒数等级 。

    正式地,给定真实标签 y in mathcal{R}^{n_	ext{samples} 	imes n_	ext{labels}} 的二进制指示矩阵和与每个标签 hat{f} in mathcal{R}^{n_	ext{samples} 	imes n_	ext{labels}} 相关联的得分,平均精度被定义为

    LRAP(y, hat{f}) = frac{1}{n_{	ext{samples}}}sum_{i=0}^{n_{	ext{samples}} - 1} frac{1}{|y_i|}sum_{j:y_{ij} = 1} frac{|mathcal{L}_{ij}|}{	ext{rank}_{ij}}

    与 mathcal{L}_{ij} = left{k: y_{ik} = 1, hat{f}_{ik} geq hat{f}_{ij} 
ight}, 	ext{rank}_{ij} = left|left{k: hat{f}_{ik} geq hat{f}_{ij} 
ight}
ight| 和 |cdot| 是集合的 l0 范数或基数。

    这是一个使用这个函数的小示例:

    >>> import numpy as np
    >>> from sklearn.metrics import label_ranking_average_precision_score
    >>> y_true = np.array([[1, 0, 0], [0, 0, 1]])
    >>> y_score = np.array([[0.75, 0.5, 1], [1, 0.2, 0.1]])
    >>> label_ranking_average_precision_score(y_true, y_score)
    0.416...

    3. 排序损失

    label_ranking_loss 函数计算在样本上平均排序错误的标签对数量的排序损失,即真实标签的分数低于假标签,由虚假和真实标签的倒数加权。最低可实现的排名损失为零。

    正式地,给定真相标签 y in left{0, 1
ight}^{n_	ext{samples} 	imes n_	ext{labels}} 的二进制指示矩阵和与每个标签 hat{f} in mathbb{R}^{n_	ext{samples} 	imes n_	ext{labels}} 相关联的得分,排序损失被定义为

    	ext{ranking\_loss}(y, hat{f}) =  frac{1}{n_{	ext{samples}}}
  sum_{i=0}^{n_{	ext{samples}} - 1} frac{1}{|y_i|(n_	ext{labels} - |y_i|)}
  left|left{(k, l): hat{f}_{ik} < hat{f}_{il}, y_{ik} = 1, y_{il} = 0 
ight}
ight|

    其中 |cdot| 是 ell_0 范数或集合的基数。

    这是一个使用这个函数的小示例:

    >>> import numpy as np
    >>> from sklearn.metrics import label_ranking_loss
    >>> y_true = np.array([[1, 0, 0], [0, 0, 1]])
    >>> y_score = np.array([[0.75, 0.5, 1], [1, 0.2, 0.1]])
    >>> label_ranking_loss(y_true, y_score)
    0.75...
    >>> # With the following prediction, we have perfect and minimal loss
    >>> y_score = np.array([[1.0, 0.1, 0.2], [0.1, 0.2, 0.9]])
    >>> label_ranking_loss(y_true, y_score)
    0.0

    参考资料:

    • Tsoumakas, G., Katakis, I., & Vlahavas, I. (2010). 挖掘多标签数据。在数据挖掘和知识发现手册(第667-685页)。美国 Springer.
  • 相关阅读:
    nullptr和NULL
    tmux用于恢复远程屏幕
    如何改变git的默认路径
    scp拷贝文件
    C++头文件<bits/stdc++.h>
    MAME模拟器使用简单教程
    typescript接口扩展
    Typescript中的可索引接口 类类型接口
    typescript函数类型接口
    typescript静态属性 静态方法 抽象类 多态
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/14905486.html
Copyright © 2020-2023  润新知