Module: aprender::metrics

Public module of the aprender-core crate.

Source

crates/aprender-core/src/metrics.rs or directory.

Example

use aprender::metrics::{r_squared, mse, mae, rmse};
use aprender::metrics::classification::{accuracy, f1_score, Average};
// See `cargo doc -p aprender-core --open` for full API reference.

Module summary

aprender::metrics is the evaluation toolkit — separate from loss because metrics are non-differentiable scoring functions, not training signals. Regression metrics (mse, mae, rmse, r_squared) live at the top level; classification metrics (accuracy, precision, recall, f1_score) live under metrics::classification; clustering metrics (silhouette_score, inertia) sit alongside them; and specialized subdomains have their own submodules: drift, perplexity, ranking, percentile, grad_norm, evaluator.

Key types

SymbolDescription
r_squared, mse, mae, rmseRegression metrics (top-level free functions).
metrics::classification::accuracyAccuracy on &[usize] predictions vs targets.
metrics::classification::{precision, recall, f1_score, Average}Per-class / macro / micro / weighted averages.
silhouette_score, inertiaCluster-quality scores.
metrics::ranking::*Information-retrieval style ranking metrics (NDCG, MAP, MRR).
metrics::perplexity::*Language-model perplexity.
metrics::drift::*Distribution-drift detectors (KS, PSI, etc.).

Usage patterns

Pattern 1: Regression scoring

use aprender::metrics::{r_squared, mse, rmse};
use aprender::primitives::Vector;

let y_true = Vector::from_slice(&[3.0, 5.0, 7.0, 9.0]);
let y_pred = Vector::from_slice(&[2.9, 5.1, 7.2, 8.8]);

let r2 = r_squared(&y_pred, &y_true);
let mse_val = mse(&y_pred, &y_true);
let rmse_val = rmse(&y_pred, &y_true);

assert!(r2 > 0.99);
println!("R²={:.4}  MSE={:.4}  RMSE={:.4}", r2, mse_val, rmse_val);

Pattern 2: Classification metrics with multiple averages

use aprender::metrics::classification::{accuracy, f1_score, precision, recall, Average};

let y_true: Vec<usize> = vec![0, 0, 1, 1, 2, 2, 1, 0];
let y_pred: Vec<usize> = vec![0, 1, 1, 1, 2, 0, 1, 0];

let acc = accuracy(&y_pred, &y_true);
let f1_macro = f1_score(&y_pred, &y_true, Average::Macro);
let p_micro = precision(&y_pred, &y_true, Average::Micro);
let r_weighted = recall(&y_pred, &y_true, Average::Weighted);

println!("acc={:.3}  f1_macro={:.3}  p_micro={:.3}  r_weighted={:.3}",
    acc, f1_macro, p_micro, r_weighted);

See also

  • loss — differentiable losses (use these for training, not evaluation)
  • calibrationexpected_calibration_error, brier_score, reliability diagrams
  • model_selection — cross-validation orchestrates these metrics over folds
  • interpret — feature-importance scoring complements aggregate metrics

Full API

Run cargo doc -p aprender-core --open for the rendered rustdoc, or browse docs.rs/aprender for the published version.