-
Notifications
You must be signed in to change notification settings - Fork 0
Metrics reciprocalrank score
Development build. This page describes
main, not a released package. The latest published Lodestar.Metrics is 0.3.0 — read its documentation.
The mean of 1 / rank over the queries, where rank is the position of the first relevant document.
Not verified against a reference. There is no reciprocal function in sklearn.metrics to
freeze a corpus from, so this member's definition is pinned by tests rather than by an oracle —
decision 0036 is the
rule that admits it, and says what would retire the exception.
public static double Score(ReadOnlySpan<double> relevance, ReadOnlySpan<double> yScore, int labelCount)Parameters — relevance says whether each document is relevant and yScore holds the scores
the ranking was made from, both row-major: one row per query, labelCount values each, and the same
length. Relevance is read as a judgement, not a magnitude: any non-zero value is relevant, and 3
counts no more than 1. labelCount is how many documents each row holds.
Returns — double in [0, 1]. 1 when every query puts a relevant document first, 0 when no
query retrieves one at all.
Exceptions — ArgumentException when labelCount is below 2, when relevance and yScore
disagree in length, or when the length is not a whole number of rows of labelCount.
Example — two queries, the first relevant document second and then first.
using Lodestar.Metrics;
double[] relevance = [0, 1, 0, 0, 1, 0, 0, 0];
double[] scores = [0.9, 0.5, 0.4, 0.1, 0.9, 0.5, 0.4, 0.1];
double mrr = ReciprocalRank.Score(relevance, scores, labelCount: 4); // => 0.75Remarks — the definition, in the three clauses the tests pin one by one: the reciprocal of the
rank of the first relevant document, averaged over queries, with a query holding no relevant
document contributing 0 rather than being dropped from the average. That last clause is the one
implementations disagree about — dropping such queries raises the score and makes two runs over
different query sets incomparable.
Everything after the first relevant document is invisible to this number, which is what makes it the
wrong metric when the reader consumes the whole list. Report it beside
Ndcg.Score, not instead of one.
Applies to — net10.0, netstandard2.0.
See also — Ndcg.Score, Dcg.Score, the
Python equivalence table.
- 0001-target-framework
- 0002-unicode-comparison-unit
- 0003-provenance-and-licensing
- 0004-levenshtein-myers-backlog
- 0005-hamming-jellyfish-divergence
- 0006-ratcliff-autojunk
- 0007-metaphone-scope
- 0008-italian-enza-nltk-divergence
- 0009-sample-consumes-a-local-feed
- 0010-stop-word-list-provenance
- 0011-persistence-format
- 0012-per-package-versioning
- 0013-sentencepiece-parity-scope
- 0014-precompiled-normalizer
- 0015-sonar-rules-in-the-build
- 0016-metrics-package-placement
- 0017-bpe-parity-scope
- 0018-multiclass-roc-auc-parallelism-is-opt-in
- 0019-the-net-analysers-run-in-the-build-too
- 0020-normalize-is-a-projection-not-a-parameter
- 0021-multioutput-is-a-method-not-an-enum
- 0022-added-token-matching-flags
- 0023-byte-level-decode-substitutes
- 0024-weighted-median-averages-within-scikit-learns-epsilon
- 0025-quickselect-replaces-a-full-sort-for-the-median
- 0026-r2-and-explainedvariance-split-their-undefined-cases-differently
- 0027-r2-and-explainedvariance-vectorize-only-a-single-output
- 0028-log1p-is-kahans-identity-not-math-log-1-plus-x
- 0029-balanced-accuracy-adjusted-is-left-to-ieee-754-at-the-edge
- 0030-cohen-kappa-keeps-scikit-learns-expected-matrix-orientation
- 0031-nosamplecorrect-mirrors-numpys-float64-upcast
- 0032-fbeta-substitutes-tp-predicted-and-support-algebraically
- 0033-compensated-sum-is-neumaiers-variant
- 0034-dropout-is-refused-for-want-of-a-user
- 0035-a-null-pre-split-is-removed-with-invert-not-isolated
- 0036-a-member-may-ship-without-an-oracle-if-it-says-so
- 0037-the-guards-run-before-the-commit
- 0038-the-gate-confronts-an-exception-tag-with-the-page-that-documents-it
- 0039-mutual-information-returns-zero-on-an-empty-input
- 0040-a-curve-is-a-sealed-class-per-curve
- 0041-one-sample-file-per-public-class
- 0042-phonetic-encoders-refuse-a-null-word
- 0043-the-equality-table-is-sized-to-the-pattern
- 0044-compression-belongs-to-the-caller
- 0045-a-console-call-carries-its-reason-on-the-line
- 0046-check-adr-immutable-runs-in-ci-only
- 0047-one-gate-per-kernel-not-one-per-alphabet
- 0048-the-gate-depends-on-the-kernel-and-the-alphabet
- 0049-two-gates-per-kernel-tested-where-the-width-is-known
- 0050-the-sentencepiece-bpe-lineage-stays-a-bpe-model
- benchmark_latest
- decisions
- equivalence
- matplotlib
- migration
- nightly_run
- numpy
- pandas
- performance
- pytorch
- seaborn
- sklearn
- statsmodels