MeanAveragePrecision 类keras_rs.metrics.MeanAveragePrecision(
k: int | None = None,
shuffle_ties: bool = True,
seed: int | keras.src.random.seed_generator.SeedGenerator | None = None,
**kwargs: Any
)
计算平均精度均值 (MAP)。
此指标用于评估排序质量。它计算在排序列表中出现的每个相关项之后计算的精确度值的平均值。该指标处理 y_true 中的真实相关性标签(相关性的二元指示符 (0 或 1))与 y_pred 中的预测分数。y_pred 中的分数用于确定项目的排序顺序,通过降序排序。分数的范围从 0 到 1,值越高表示相关项通常在排序中位置越高。
对于 y_pred 中的每个预测分数列表 s 和 y_true 中对应的真实标签列表 y,每个查询的 MAP 分数计算如下:
平均精度的公式如下定义。MAP 是为每个列表计算的平均精度的均值。
AP(y, s) = sum_j (P@j(y, s) * rel(j)) / sum_i y_i
rel(j) = y_i if rank(s_i) = j
其中
j 表示排名位置(从 1 开始)。sum_j 表示对所有排名 j 从 1 到列表大小(或 k)的求和。P@j(y, s) 表示排名 j 处的精确度,计算方法是将前 j 个位置中找到的相关项的数量除以 j。rel(j) 表示排名 j 处的项的相关性。如果排名 j 处的项是相关的,则 rel(j) 为 1,否则为 0。y_i 是在排序前原始项 i 的真实相关性标签。rank(s_i) 是根据其分数 s_i 为项 i 分配的排名位置。sum_i y_i 计算原始列表 y 中相关项的总数。报告的最终 MAP 分数通常是数据集中所有查询/列表的这些每个查询分数的加权平均值。
注意:sample_weight 对于排名指标的处理方式不同。对于批处理输入,sample_weight 可以是标量、1D 或 2D。标量情况和 1D 情况(列表式权重)很直接。2D 情况(项式权重)不同,因为样本权重会聚合以获得 1D 权重。有关更多详细信息,请参阅 keras_rs.src.metrics.ranking_metrics_utils.get_list_weights。
参数
True。None,表示使用 keras.backend.floatx()。keras.backend.floatx() 默认为 "float32",除非通过 keras.backend.set_floatx() 设置为其他值。如果提供了 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.MeanAveragePrecision()(
... 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.MeanAveragePrecision()(
... y_true={"labels": labels, "mask": mask}, y_pred=scores
... )