ndcg_score
- sklearn.metrics.ndcg_score(y_true, y_score, *, k=None, sample_weight=None, ignore_ties=False)[исходный код]
-
Вычисляет нормализованный дисконтированный накопленный выигрыш.
Суммирует истинные оценки, ранжированные в порядке, определяемом предсказанными оценками, с применением логарифмического дисконтирования. Затем результат делится на наилучшую возможную оценку (идеальный DCG, достигаемый при идеальном ранжировании), чтобы получить значение от 0 до 1.
Эта метрика ранжирования возвращает высокое значение, если истинные метки занимают высокие позиции согласно
y_score.- Параметры:
-
- y_trueмассивоподобный объект формы (n_samples, n_labels)
-
Истинные целевые значения многометочной классификации или истинные оценки ранжируемых объектов. Отрицательные значения в
y_trueмогут привести к результату, выходящему за пределы от 0 до 1. - y_scoreмассивоподобный объект формы (n_samples, n_labels)
-
Оценки целевых значений: это могут быть оценки вероятности положительного класса или непреобразованные порогом значения решения (возвращаемые методом decision_function некоторых классификаторов).
- kint, по умолчанию None
-
Учитывать только k наибольших оценок в ранжировании. Если
None, использовать все выходные значения. - sample_weightмассивоподобный объект формы (n_samples,), по умолчанию None
-
Веса образцов. Если
None, всем образцам присваивается одинаковый вес. - ignore_tiesbool, по умолчанию False
-
Для повышения эффективности предполагать отсутствие совпадающих оценок в y_score (что, вероятно, имеет место, если y_score является непрерывной величиной).
- Возвращает:
-
- normalized_discounted_cumulative_gainfloat в диапазоне [0., 1.]
-
Среднее значение NDCG для всех образцов.
См. также
dcg_score-
Дисконтированный накопленный выигрыш (без нормализации).
Литература
Статья в Википедии о дисконтированном накопленном выигрыше
Jarvelin, K., & Kekalainen, J. (2002). Оценка методов информационного поиска на основе накопленного выигрыша. ACM Transactions on Information Systems (TOIS), 20(4), 422-446.
Wang, Y., Wang, L., Li, Y., He, D., Chen, W., & Liu, T. Y. (2013, май). Теоретический анализ мер ранжирования NDCG. В материалах 26-й ежегодной конференции по теории обучения (COLT 2013)
McSherry, F., & Najork, M. (2008, март). Эффективное вычисление мер качества информационного поиска при наличии совпадающих оценок. В материалах Европейской конференции по информационному поиску (с. 414-421). Springer, Берлин, Гейдельберг.
Примеры
>>> 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...
© 2007–2026 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.9/modules/generated/sklearn.metrics.ndcg_score.html