-
Notifications
You must be signed in to change notification settings - Fork 0
Metrics confusionmatrix toarray
Copies the cells into a rectangular array, raw or scaled.
public double[,] ToArray()
public double[,] ToArray(Normalization normalization)Parameters — normalization says which sum each cell is divided by: none, its row, its
column,
or the grand total. The parameterless overload is Normalization.None.
Returns — a fresh double[,] of Labels.Count rows and columns. The matrix keeps its own
storage, so writing into the result changes nothing.
Exceptions — ArgumentOutOfRangeException when normalization is not one of the four modes.
Example — the same matrix as counts and as per-class recalls.
using Lodestar.Metrics;
int[] yTrue = [1, 1, 1, 1, 0, 0, 0, 0];
int[] yPred = [1, 1, 0, 0, 1, 0, 0, 0];
ConfusionMatrix cm = ConfusionMatrix.Compute(yTrue, yPred);
double counted = cm.ToArray()[1, 1]; // => 2
double recallOfSpam = cm.ToArray(Normalization.True)[1, 1]; // => 0.5
double shareOfAll = cm.ToArray(Normalization.All)[0, 0]; // => 0.375Remarks — the array is what you hand to a plotting library or a serializer; the indexer is
what
you use to read one cell. Normalizing is a projection and not a state: the matrix is
unchanged,
and asking for it twice with different modes is legal and cheap. That choice is deliberate,
because
several metrics read a ConfusionMatrix and would be silently wrong if its cells had become
fractions —
decision 0020 has the
argument.
Each mode answers a different question. True divides each row by its own sum, so the diagonal
becomes per-class recall — the most useful heat map of the four. Pred divides each column by its
sum, giving per-class precision on the diagonal. All turns every cell into a share of the
dataset.
The trap is the zero row. A row, column or total that counted nothing yields zeros, not NaN,
which is what scikit-learn's nan_to_num does to the same division. A row of zeros in a
Normalization.True array therefore means "this class never occurred", and is indistinguishable
from "this class was never once predicted correctly" if you only look at the diagonal. Check the
support before reading a normalized row as a recall.
Applies to — net10.0, netstandard2.0.
See also — ConfusionMatrix.Compute, Normalization, Recall.PerClass,
decision 0020,
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