-
Notifications
You must be signed in to change notification settings - Fork 0
Metrics rootmeansquaredlogerror score
The square root of the mean squared log error, taken per output before the outputs are reduced.
public static double Score(ReadOnlySpan<double> yTrue, ReadOnlySpan<double> yPred, int outputCount = 1, ReadOnlySpan<double> sampleWeight = default, ReadOnlySpan<double> outputWeights = default)Parameters — yTrue and yPred are the true and predicted values, row-major when there is
more
than one output, and every value must be above −1. outputCount is how many outputs each row
holds, sampleWeight weights the rows, and outputWeights weights the outputs in the reduction.
Returns — double, never negative, 0 only for an exact prediction. In log units.
Exceptions — ArgumentException when a length disagrees with the shape, the input is empty,
it
holds a non-finite value, or either array holds a value at or below −1;
ArgumentOutOfRangeException when outputCount is below one.
Example — the same four counts MeanSquaredLogError.Score scores 0.0397….
using Lodestar.Metrics;
double[] yTrue = [3.0, 5.0, 2.5, 7.0];
double[] yPred = [2.5, 5.0, 4.0, 8.0];
double error = RootMeanSquaredLogError.Score(yTrue, yPred); // => 0.1993…Remarks — this is the one of the log pair to report, because a root log error has an
approximate
reading a squared one does not: for small values, 0.1993… is roughly "typically out by about
20%".
That approximation breaks down as the number grows — it is exp(x) - 1 that gives the ratio — but
it
is enough to make the metric quotable, which the squared version is not.
A type of its own rather than a flag, for the same reason RootMeanSquaredError is: scikit-learn
exposes it as its own function rather than as a squared parameter.
The trap is the same order-of-operations one: the root is taken per output before the
reduction,
so on more than one output this is not the root of MeanSquaredLogError.Score. And the asymmetry
the
logarithm introduces survives the root — under-prediction is still charged more than
over-prediction
— so this is not a symmetric relative error however much the "about 20%" reading makes it sound
like
one.
Applies to — net10.0, netstandard2.0.
See also — RootMeanSquaredLogError.PerOutput, MeanSquaredLogError.Score,
MeanAbsolutePercentageError.Score,
decision 0028,
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