pp_msc — Multiplicative Scatter Correction (MSC)

Group: Preprocessing · Binding: n4m.sklearn.MSC · C ABI: n4m_pp_msc_*

Description

Multiplicative Scatter Correction.

Full binding docstring
Multiplicative Scatter Correction.

Fit learns the mean reference spectrum from the training matrix. Transform
regresses each row against that reference and applies the conventional
row-wise MSC correction used by prospectr and pls.

Parameters

No constructor parameters.

Explanations

Bibliographic source

Geladi, P., MacDougall, D. & Martens, H. (1985). Linearization and Scatter-Correction for Near-Infrared Reflectance Spectra of Meat. Applied Spectroscopy 39(3), 491–500.

Mathematical principle

Each spectrum is regressed on a reference spectrum (typically the training-set mean \(\bar{\mathbf{x}}\)): \(\mathbf{x}_i = a_i + b_i\,\bar{\mathbf{x}} + \mathbf{e}_i\). The corrected spectrum \((\mathbf{x}_i - a_i)/b_i\) removes the additive (\(a_i\)) and multiplicative (\(b_i\)) scatter estimated by ordinary least squares. Unlike SNV, MSC needs a reference and so is stateful (the reference is fit on training data).

Implementation

C ABI n4m_pp_msc_* in libn4m (create / apply / destroy lifecycle), wrapped by n4m.sklearn.MSC. The same numerical kernel backs every language binding.

Usage

from n4m.sklearn import MSC
op = MSC()
X_transformed = op.fit_transform(X)

Benchmarks

Adaptive wall-clock per cell measured against full_matrix.csv. Only backends that implement this method are listed; libraries without the method are omitted.

Verdict  ·  ✓ ref / ≈ ref / ~ shape mark a reference-gate pass at strict / relaxed / qualitative tolerance  ·  ✓ bind = pls4all binding agrees with the C++ baseline  ·  ⇄ cross-check = documented by-design selector/RNG/model, noncanonical API/facade convention, or secondary oracle  ·  ✗ divergent  ·  ⚠ error  ·  — not run. The fastest backend per column is marked 🏆.

Reference gate: strict — numeric equivalence (rmse_rel_tol 1e-12).

BackendParity50×250 (ms)250×50 (ms)
C++ native · libn4m
pls4all.cpp.blas✓ ref0.02 ms🏆0.02 ms🏆
pls4all.cpp.blas+omp✓ ref0.02 ms0.02 ms
pls4all.cpp.omp✓ ref0.06 ms0.03 ms
pls4all.cpp.ref✓ ref0.05 ms0.05 ms
Python · pls4all
pls4all.python✓ bind0.02 ms0.02 ms
pls4all.sklearn✓ bind0.03 ms0.02 ms
Python · external
nirs4allsource1.07 ms3.76 ms
ref.python_numpysource

See also: methods index · interactive dashboard