ndcg_score#
- sklearn.metrics.ndcg_score(y_true, y_score, *, k=None, sample_weight=None, ignore_ties=False)[source]#
计算归一化折现累积增益。
计算真实分数根据预测分数排序后的对数折扣累加和。然后除以最佳可能分数(理想DCG,通过完美排序获得)以获得0到1之间的分数。
如果真实标签被
y_score排在高位,此排名指标返回高值。- 参数:
- y_true形状为 (n_samples, n_labels) 的类数组对象
多标签分类的真实目标,或待排序实体的真实分数。
y_true中的负值可能导致输出不在0到1之间。- y_score形状为 (n_samples, n_labels) 的类数组对象
目标分数,可以是概率估计、置信值,或非阈值决策度量(如某些分类器返回的“decision_function”)。
- kint, default=None
仅考虑排名中最高的k个分数。如果为
None,则使用所有输出。- sample_weightshape 为 (n_samples,) 的 array-like, default=None
样本权重。如果为
None,则所有样本具有相同的权重。- ignore_tiesbool, default=False
假设 y_score 中没有平局(如果 y_score 是连续的,这种情况很可能发生),以提高效率。
- 返回:
- normalized_discounted_cumulative_gainfloat in [0., 1.]
所有样本的平均NDCG分数。
另请参阅
dcg_score折扣累积增益(未归一化)。
References
Jarvelin, K., & Kekalainen, J. (2002). Cumulated gain-based evaluation of IR techniques. ACM Transactions on Information Systems (TOIS), 20(4), 422-446.
Wang, Y., Wang, L., Li, Y., He, D., Chen, W., & Liu, T. Y. (2013, May). A theoretical analysis of NDCG ranking measures. In Proceedings of the 26th Annual Conference on Learning Theory (COLT 2013)
McSherry, F., & Najork, M. (2008, March). Computing information retrieval performance measures efficiently in the presence of tied scores. In European conference on information retrieval (pp. 414-421). Springer, Berlin, Heidelberg.
示例
>>> import numpy as np >>> from sklearn.metrics import ndcg_score >>> # we have ground-truth relevance of some answers to a query: >>> true_relevance = np.asarray([[10, 0, 0, 1, 5]]) >>> # we predict some scores (relevance) for the answers >>> scores = np.asarray([[.1, .2, .3, 4, 70]]) >>> ndcg_score(true_relevance, scores) 0.69 >>> scores = np.asarray([[.05, 1.1, 1., .5, .0]]) >>> ndcg_score(true_relevance, scores) 0.49 >>> # we can set k to truncate the sum; only top k answers contribute. >>> ndcg_score(true_relevance, scores, k=4) 0.35 >>> # the normalization takes k into account so a perfect answer >>> # would still get 1.0 >>> ndcg_score(true_relevance, true_relevance, k=4) 1.0... >>> # now we have some ties in our prediction >>> scores = np.asarray([[1, 0, 0, 0, 1]]) >>> # by default ties are averaged, so here we get the average (normalized) >>> # true relevance of our top predictions: (10 / 10 + 5 / 10) / 2 = .75 >>> ndcg_score(true_relevance, scores, k=1) 0.75 >>> # we can choose to ignore ties for faster results, but only >>> # if we know there aren't ties in our scores, otherwise we get >>> # wrong results: >>> ndcg_score(true_relevance, ... scores, k=1, ignore_ties=True) 0.5...