DCG
类keras_rs.metrics.DCG(
k: int | None = None,
gain_fn: Callable[[Any], Any] = default_gain_fn,
rank_discount_fn: Callable[[Any], Any] = default_rank_discount_fn,
**kwargs: Any
)
计算折现累积增益 (DCG)。
此指标评估排名质量。它计算项目分级相关性分数的总和,并根据位置应用可配置的折现。该指标处理 y_true
中的真实相关性标签(分级相关性分数,非负数,值越高表示相关性越大)与 y_pred
中的预测分数。y_pred
中的分数用于确定项目的排名顺序,通过降序排序。分数是非负的,值越高表示排名质量越好(高度相关的项目排名越高)。单个列表的分数没有边界或标准化,即它不落在某个范围内。
对于 y_pred
中的每个预测分数列表 s
和 y_true
中的相应真实标签列表 y
,每次查询的 DCG 分数计算如下
DCG@k(y', w') = sum_{i=1}^{k} (gain_fn(y'_i) / rank_discount_fn(i))
其中
y'_i
是排名在位置 i
的项目的真实相关性分数(通过根据 y_pred
排序 y_true
获得)。gain_fn
是用户提供的将相关性 y'_i
映射到增益值的函数。默认函数 (default_gain_fn
) 通常等效于 lambda y: 2**y - 1
。rank_discount_fn
是用户提供的将排名 i
映射到折现值的函数。默认函数 (default_rank_discount_fn
) 通常等效于 lambda rank: 1 / log2(rank + 1)
。报告的最终 DCG 分数通常是数据集中所有查询/列表的这些每次查询分数的加权平均值。
注意:对于排名指标,sample_weight
的处理方式不同。对于批量输入,sample_weight
可以是标量、1D 或 2D。标量情况和 1D 情况(列表级权重)很简单。2D 情况(项目级权重)不同,因为样本权重被聚合以获得 1D 权重。有关更多详细信息,请参阅 keras_rs.src.metrics.ranking_metrics_utils.get_list_weights
。
参数
y_true
) 映射到增益值。默认实现 2**y - 1
。default_rank_discount_fn
) 实现 1 / log2(rank + 1)
。True
。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, 3, size=(batch_size, list_size))
>>> scores = np.random.random(size=(batch_size, list_size))
>>> metric = keras_rs.metrics.DCG()(
... y_true=labels, y_pred=scores
... )
屏蔽某些元素(可用于不均匀输入)
>>> batch_size = 2
>>> list_size = 5
>>> labels = np.random.randint(0, 3, 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.DCG()(
... y_true={"labels": labels, "mask": mask}, y_pred=scores
... )