-
Notifications
You must be signed in to change notification settings - Fork 0
Metrics meanabsoluteerror 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 the absolute residuals.
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. outputCount is how many outputs each row holds. sampleWeight weights the rows
—
one weight per sample, not per value. outputWeights weights the outputs in the reduction; omit
it
for a plain mean.
Returns — double, never negative, 0 only for an exact prediction. In the target's own
units.
Exceptions — ArgumentException when a length disagrees with the shape, the input is empty,
or
it holds a non-finite value; ArgumentOutOfRangeException when outputCount is below one.
Example — four predictions, out by 0.5, 0.5, 0 and 1.
using Lodestar.Metrics;
double[] yTrue = [3.0, -0.5, 2.0, 7.0];
double[] yPred = [2.5, 0.0, 2.0, 8.0];
double error = MeanAbsoluteError.Score(yTrue, yPred); // => 0.5Remarks — start here. It is the only error on this page that reads directly as a sentence a non-specialist understands — "on average we are half a unit out" — and it charges every unit of error the same, which is what most costs actually do.
Its defining property is what it does not do: nothing is squared, so one prediction that is
ten
times worse counts ten times, not a hundred times. That is the whole choice between this and
MeanSquaredError.Score. On [1, 2, 3, 100] against [1, 2, 3, 4] this reports 24 and mean
squared error reports 2304, and neither is wrong — they answer "how far out on average" and "how
badly does the worst case hurt".
Two things worth knowing. It is not differentiable at zero, which is why models are so often trained on squared error and then reported with this one; that mismatch is normal and not a mistake. And the accumulation is Neumaier-compensated, so the answer is at least as accurate as numpy's pairwise reduction rather than merely close to it — decision 0033.
The trap is comparing it across targets. 0.5 is excellent on a target that ranges over thousands
and hopeless on one that ranges over one; it carries units, so it cannot rank two different
problems.
R2.Score is what does that.
Applies to — net10.0, netstandard2.0.
See also — MeanAbsoluteError.PerOutput, MeanSquaredError.Score,
MedianAbsoluteError.Score,
R2.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