Skip to content

habeeb3579/Spectoprep

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

89 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SpectoPrep

PyPI version CI status Coverage Conda version Documentation Status

Bayesian optimization of spectroscopic preprocessing pipelines for chemometric regression (NIR, MIR, Raman, and related modalities).

Overview

SpectoPrep searches over combinations of scatter correction, smoothing, baseline correction, scaling and related transforms. Each candidate pipeline is scored with group-aware cross-validation and fitted with OptimizedRidgeCV, which selects the ridge penalty by CV. The goal is a reproducible, leakage-aware alternative to hand-tuned preprocessing recipes.

Features

  • Bayesian pipeline search over structure and transform hyperparameters
  • Group-aware CV: group_kfold, group_shuffle_split, leave_p_group_out
  • RidgeCV downstream model (no manual ridge_alpha in the search space)
  • Broad preprocessing catalogue (MSC, EMSC, SNV, Savitzky–Golay, ALS, scalers, PCA, …)
  • Structured logging via structlog and a Typer CLI (spectoprep info)
  • Visualization helpers for spectra and optimization summaries

Installation

pip install spectoprep

Or:

conda install -c habeebest spectoprep

PyPI and the habeebest conda channel are both published automatically from tagged releases (see updated_package_deployment.md).

Requires Python 3.10+.

Quick start

import numpy as np
from spectoprep import PipelineOptimizer

rng = np.random.default_rng(0)
X_train = rng.normal(size=(80, 200))
y_train = rng.normal(size=80)
groups = np.arange(80)

optimizer = PipelineOptimizer(
    X_train=X_train,
    y_train=y_train,
    groups=groups,
    preprocessing_steps=["msc", "savgol", "detrend", "scaler", "snv"],
    cv_method="group_kfold",
    n_splits=5,
    max_pipeline_length=2,
    allowed_preprocess_combinations=[1, 2],
)

best_params, best_pipeline = optimizer.bayesian_optimize(
    init_points=25,
    n_iter=200,
)

summary = optimizer.summarize_optimization()
predictions, rmse, r2 = optimizer.get_best_pipeline_predictions(best_pipeline)

CLI

spectoprep version
spectoprep info

Selected preprocessing methods

  • msc / emsc: multiplicative (extended) scatter correction
  • snv / lsnv / rnv: (localized / robust) standard normal variate
  • savgol: Savitzky–Golay filtering / derivatives
  • detrend / als: linear detrend / asymmetric least squares baseline
  • scaler / robust_scaler / meancn: column scaling and mean centering
  • pca / select_k_best: dimensionality reduction and feature selection

Run spectoprep info for the full catalogue.

Documentation

Limitations

SpectoPrep currently supports regression only. Classification pipelines are out of scope.

Contributing

Contributions are welcome. See CONTRIBUTING.rst and open a pull request.

License

MIT — see LICENSE.

Citation

If you use SpectoPrep in research, please cite:

@article{babatunde2025automated,
  title={Automated Spectral Preprocessing via Bayesian Optimization for Chemometric Analysis of Milk Constituents},
  author={Babatunde, Habeeb Abolaji and McDougal, Owen M and Andersen, Timothy},
  journal={Foods},
  volume={14},
  number={17},
  pages={2996},
  year={2025},
  publisher={MDPI}
}

Packages

 
 
 

Contributors

Languages