Adaptive Operator-Mixture PLS and Ridge for near-infrared spectroscopy: companion code for the paper.
Project description
nirs4all-aom
Adaptive Operator-Mixture PLS and Ridge for near-infrared spectroscopy.
Companion code for the paper "Operator-adaptive PLS and Ridge calibration for NIR spectroscopy" (manuscript in paper/).
This repository ships three sklearn-compatible model families plus benchmark runners:
aom_nirs.pls— AOM-PLS, POP-PLS, AOM-PLS-DA, POP-PLS-DA. Operator-adaptive PLS that integrates strict-linear preprocessing operators (identity, Savitzky-Golay, finite difference, detrend, Norris-Williams, Whittaker, FCK) into the calibration via covariance / NIPALS / SIMPLS identities. Replaces external preprocessing grid-search.aom_nirs.ridge— AOM-Ridge family (AOMRidgeRegressor,AOMRidgeBlender,AOMRidgeAutoSelector,AOMRidgeClassifier, plusAOMRidgePLS,AOMMultiKernelRidge,AOMMultiBranchMKL,AOMLocalRidge). Dual / kernel Ridge with operator-mixture preprocessing. The paper's best empirical result (median RMSEP ratio 0.918 vs Ridge-default on 32 NIRS datasets, Wilcoxon Holm-corrected $p = 2.6\times 10^{-4}$).aom_nirs.fast— FastAOM chain-screening framework. Adjoint-only covariance screening with diversity-aware top-k, low-rank kernel evaluator, and four sklearn-style models (SingleChainPLSRidge,HardAOMChainPLSRidge,SoftAOMChainPLSRidge,SparseMultiKernelRidge).
Installation
pip install nirs4all-aom # core
pip install "nirs4all-aom[torch]" # GPU NIPALS / SIMPLS / superblock
pip install "nirs4all-aom[tabpfn]" # TabPFN-residual experimental stacker
pip install "nirs4all-aom[bench]" # benchmark runners and reporting tools
nirs4all-aom is pure Python; no compilation is required. The optional pybaselines dependency drives aom_nirs.pls.preprocessing.ASLSBaseline.
Quick start
from sklearn.cross_decomposition import PLSRegression
from sklearn.model_selection import KFold
from aom_nirs.pls import AOMPLSRegressor
from aom_nirs.ridge import AOMRidgeRegressor, AOMRidgeBlender
# AOM-PLS, paper "simple" preset
aom_pls = AOMPLSRegressor(bank="compact", criterion="cv", cv=5)
aom_pls.fit(X_train, y_train)
y_pred = aom_pls.predict(X_test)
# AOM-Ridge, paper "best" preset
aom_ridge = AOMRidgeBlender() # convex non-negative blend of Ridge candidates
aom_ridge.fit(X_train, y_train)
A full reproduction of one smoke dataset for AOM-PLS, AOM-Ridge, and FastAOM is in examples/paper_smoke.py.
Relationship to other repos
nirs4all(GitHub) — NIRS instrumentation, acquisition, and provenance context for local benchmark inputs. The AOM methods, benchmark runners, result tables, and manuscript artifacts are distributed from thisnirs4all-aomrepository.aompls(GitHub) — older multi-language prototype. Superseded bynirs4all-aomfor the Python reference implementation used in the paper.
Paper
The manuscript and supplement live under paper/. The review dossier (paper/review/) contains the inventory, migration plan, cohort coverage audit, and per-variant score evidence used for the arXiv draft.
License
Dual-license: AGPL-3.0-or-later (default open-source) or commercial. See LICENSE.
Citation
@software{beurier_aom_nirs_2026,
author = {Beurier, Gregory},
title = {nirs4all-aom: Adaptive Operator-Mixture PLS and Ridge for NIR spectroscopy},
year = {2026},
url = {https://github.com/GBeurier/nirs4all-aom},
version = {0.1.0}
}
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file nirs4all_aom-0.1.1.tar.gz.
File metadata
- Download URL: nirs4all_aom-0.1.1.tar.gz
- Upload date:
- Size: 258.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7cad6d177091e13d56e9a9a5db2607a9a074ef3677153ea11248d34c6f3b4df6
|
|
| MD5 |
8a13b7b1e788a08965615ea5ec150bb0
|
|
| BLAKE2b-256 |
447cf9d374051da32ddb83dd0514e378b4a32eb05cac2a4491a23fe0d89717ea
|
Provenance
The following attestation bundles were made for nirs4all_aom-0.1.1.tar.gz:
Publisher:
publish-pypi.yml on GBeurier/nirs4all-aom
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
nirs4all_aom-0.1.1.tar.gz -
Subject digest:
7cad6d177091e13d56e9a9a5db2607a9a074ef3677153ea11248d34c6f3b4df6 - Sigstore transparency entry: 1669875834
- Sigstore integration time:
-
Permalink:
GBeurier/nirs4all-aom@7d2f21d04b265acb4ed4fe2a9d8dda50fc710763 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/GBeurier
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@7d2f21d04b265acb4ed4fe2a9d8dda50fc710763 -
Trigger Event:
release
-
Statement type:
File details
Details for the file nirs4all_aom-0.1.1-py3-none-any.whl.
File metadata
- Download URL: nirs4all_aom-0.1.1-py3-none-any.whl
- Upload date:
- Size: 206.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f5d889e217a51a82edf46caa524093bdfa623ab9ec1f0a0ffafc78c8f98e5cf3
|
|
| MD5 |
cef3bde4ccde9f444f7f83425b4ec729
|
|
| BLAKE2b-256 |
5aba2a250cfc250b1afbd0b8fc08ab5032fd8e1c20a7a056bd03945851e6b305
|
Provenance
The following attestation bundles were made for nirs4all_aom-0.1.1-py3-none-any.whl:
Publisher:
publish-pypi.yml on GBeurier/nirs4all-aom
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
nirs4all_aom-0.1.1-py3-none-any.whl -
Subject digest:
f5d889e217a51a82edf46caa524093bdfa623ab9ec1f0a0ffafc78c8f98e5cf3 - Sigstore transparency entry: 1669875888
- Sigstore integration time:
-
Permalink:
GBeurier/nirs4all-aom@7d2f21d04b265acb4ed4fe2a9d8dda50fc710763 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/GBeurier
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@7d2f21d04b265acb4ed4fe2a9d8dda50fc710763 -
Trigger Event:
release
-
Statement type: