-
Notifications
You must be signed in to change notification settings - Fork 0
Metrics logloss
The cross-entropy of a probabilistic prediction: how surprised the model should be by what actually
happened. 0 is perfect and it is unbounded above — one confident mistake dominates the whole
average, which is the property the metric exists for.
Three questions, three metrics. Accuracy asks whether the prediction was right.
RocAuc asks whether the ranking was right. This asks whether the confidence was
honest, and it is the one to read before choosing a threshold.
A predicted 0 for the class that actually occurred would make the logarithm infinite, so the
reference clips every probability into [eps, 1 - eps]. That bound is machine epsilon,
2.220446049250313e-16 — measured against scikit-learn 1.9.0 rather than assumed, because it has
changed across versions, and it is what decides the number in exactly the cases a caller cares about.
Three consequences worth knowing:
- A predicted
0for the true class contributes-log(eps), about36.04. Two samples of[0.0, 0.5]against labels[1, 0]score18.36840028483855. -
Anything below the clip scores the same.
1e-20and0.0are one number;1e-15is above it and scores17.6159…instead. - A perfect prediction is not
0but2.2204460492503136e-16, because the upper end is clipped too.
The reference warns and computes with the values as given. C# has no warning channel, so this is
silent — and the number is what carries the behaviour. Measured, halving every row of a four-sample
matrix takes the loss from 0.5017… to 1.1948… rather than leaving it alone. If rows may not be
normalised, normalise them.
| Member | What it does |
|---|---|
LogLoss.Score |
The binary case, from one probability per sample. |
LogLoss.MultiClass |
The same over a probability matrix. |
- 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