KerasRS / API 文档 / 指标 / MeanReciprocalRank 指标

MeanReciprocalRank 指标

[源]

MeanReciprocalRank

keras_rs.metrics.MeanReciprocalRank(
    k: Optional[int] = None,
    shuffle_ties: bool = True,
    seed: Union[int, keras.src.random.seed_generator.SeedGenerator, NoneType] = None,
    **kwargs: Any
)

计算平均倒数排名 (Mean Reciprocal Rank, MRR)。

该指标评估排序质量。它关注单个得分最高的 relevante 项的排名位置。该指标处理 y_true 中的真实相关性标签(相关性的二进制指示符(0 或 1))与 y_pred 中的预测得分。y_pred 中的得分通过按降序排序来确定项的排名顺序。得分范围从 0 到 1,其中 1 表示第一个 relevante 项始终排在首位。

对于 y_pred 中的每个预测得分列表 sy_true 中的相应真实标签列表 y,按查询计算的 MRR 得分如下:

MRR(y, s) = max_{i} y_{i} / rank(s_{i})

报告的最终 MRR 得分通常是数据集中所有查询/列表的这些按查询得分的加权平均值。

注意:对于排序指标,sample_weight 的处理方式不同。对于批处理输入,sample_weight 可以是标量、一维或二维。标量情况和一维情况(按列表权重)很简单。二维情况(按项权重)有所不同,因为样本权重会被聚合并生成一维权重。欲了解更多详细信息,请参阅 keras_rs.src.metrics.ranking_metrics_utils.get_list_weights

参数

  • k: int。要考虑的排名靠前的项数(“top-k”中的“k”)。必须是正整数。
  • shuffle_ties: bool。在排序之前是否随机打乱得分。这是为了打破并列。默认为 True
  • seed: int。用于打乱的随机种子。
  • name: 可选的损失实例名称。
  • dtype: 指标计算的数据类型 (dtype)。默认为 None,表示使用 keras.backend.floatx()。除非设置为其他值(通过 keras.backend.set_floatx()),否则 keras.backend.floatx()"float32"。如果提供了 keras.DTypePolicy,则将使用 compute_dtype

示例

>>> batch_size = 2
>>> list_size = 5
>>> labels = np.random.randint(0, 2, size=(batch_size, list_size))
>>> scores = np.random.random(size=(batch_size, list_size))
>>> metric = keras_rs.metrics.MeanReciprocalRank()(
...     y_true=labels, y_pred=scores
... )

遮盖某些元素(可用于不均匀输入)

>>> batch_size = 2
>>> list_size = 5
>>> labels = np.random.randint(0, 2, size=(batch_size, list_size))
>>> scores = np.random.random(size=(batch_size, list_size))
>>> mask = np.random.randint(0, 2, size=(batch_size, list_size), dtype=bool)
>>> metric = keras_rs.metrics.MeanReciprocalRank()(
...     y_true={"labels": labels, "mask": mask}, y_pred=scores
... )