-
Notifications
You must be signed in to change notification settings - Fork 0
Metrics fowlkesmallows score
The geometric mean of pair precision and pair recall for two labellings.
public static double Score(ReadOnlySpan<int> labelsTrue, ReadOnlySpan<int> labelsPred)Parameters — labelsTrue is the reference labelling and labelsPred the one being scored;
they must be the same length. The label values carry no meaning — only which samples share one.
Returns — double in [0, 1]. 1 when both labellings put exactly the same pairs together,
0 when they share no pair at all.
Exceptions — ArgumentException when the two labellings disagree in length.
Example — a renaming, a disagreement, and the degenerate case that surprises.
using Lodestar.Metrics;
double renamed = FowlkesMallows.Score([0, 0, 1, 1], [2, 2, 0, 0]); // => 1
double independent = FowlkesMallows.Score([0, 0, 1, 1], [0, 1, 0, 1]); // => 0
double empty = FowlkesMallows.Score([], []); // => 0Remarks — an empty input and a single sample score 0 here, where the other five metrics in
this namespace score 1. That is not an inconsistency to route around: those five ask whether the
two labellings disagree anywhere, and agreeing about nothing is agreeing. This one counts agreeing
pairs, and an input with no pairs has none. The value is scikit-learn's.
Nothing here is corrected for chance, which is the difference from
AdjustedMutualInformation.Score and
AdjustedRand.Score. Splitting a labelling into more clusters can raise
this score without the clustering having improved.
The result is grouped as sqrt(tk/pk) · sqrt(tk/qk) rather than tk / sqrt(pk·qk), following the
reference's own associativity — the two disagree in the last places, and the frozen corpus reads
them at 1e-9.
Applies to — net10.0, netstandard2.0.
See also — FowlkesMallows, AdjustedRand.Score,
the clustering index.
- 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