Skip to content

Python implementation of domain-invariant partial least squares regression (di-PLS)

License

Notifications You must be signed in to change notification settings

B-Analytics/diPLSlib

Repository files navigation

diPLSlib: A Python library for domain adaptation in multivariate calibration

diPLSlib has been created to build privacy-preserving regression models and to perform calibration model maintenance by domain adaptation. It has a scikit-learn compatible API and features following methods:

  • (Multiple) Domain-invariant partial least squares regression (di-PLS/mdi-PLS)
  • Graph-based calibration transfer (GCT-PLS)
  • $(\epsilon, \delta)$-differentially private partial least squares regression (edPLS)

Citation: If you use this library in your research, please cite the following reference:

Nikzad-Langerodi R.(2024). diPLSlib : A Python library for domain adaptation in multivariate calibration (version 2.4.1). URL: https://di-pls.readthedocs.io/

or in Bibtex format :

@misc{nikzad2024diPLSlib,
author = {Nikzad-Langerodi, Ramin},
month = {12},
title = {diPLSlib: A Python library for domain adaptation in multivariate calibration},
url = {https://di-pls.readthedocs.io/},
year = {2024}
}

Installation

pip install diPLSlib

Quick Start

How to apply di-PLS

Train regression model

from diPLSlib.models import DIPLS
from diPLSlib.utils import misc

l = 100000                    # or l = (10000, 100) Regularization
m = DIPLS(A=2, l=l)
m.fit(X, y, X_source, X_target)

# Typically X=X_source and y are the corresponding response values

Apply the model

yhat_dipls = m.predict(X_test)
err = misc.rmse(y_test, yhat_dipls)

How to apply mdi-PLS

from diPLSlib.models import DIPLS

l = 100000                    # or l = (5, 100, 1000)  Regularization
m = DIPLS(A=3, l=l, target_domain=2)
m.fit(X, y, X_source, X_target)

# X_target = [X1, X2, ... , Xk] is a list of target domain data
# The parameter target_domain specifies for which domain the model should be trained (here X2).

How to apply GCT-PLS

from diPLSlib.models import GCTPLS

# Training
l = 10                         # or l = (10, 10) Regularization
m = GCTPLS(A=2, l=l)
m.fit(X, y, X_source, X_target)

# X_source and X_target hold the same samples measured in the source and target domain, respectively.

How to apply EDPLS

from diPLSlib.models import EDPLS

# Training
epsilon = 1                      # Privacy loss
delta = 0.05                     # Failure probability of the privacy guarantee
m = EDPLS(A=2, epsilon=epsilon, delta=delta)
m.fit(X, y)

Examples

For more examples, please refer to the Notebooks:

Documentation

The documentation can be found here.

Acknowledgements

The first version of di-PLS was developed by Ramin Nikzad-Langerodi, Werner Zellinger, Edwin Lughofer, Bernhard Moser and Susanne Saminger-Platz and published in:

Further refinements to the initial algorithm were published in:

  • R. Nikzad-Langerodi, W. Zellinger, S. Saminger-Platz and B. Moser, "Domain-Invariant Regression Under Beer-Lambert's Law," 2019 18th IEEE International Conference On Machine Learning And Applications (ICMLA), Boca Raton, FL, USA, 2019, pp. 581-586, https://doi.org/10.1109/ICMLA.2019.00108.

  • Ramin Nikzad-Langerodi, Werner Zellinger, Susanne Saminger-Platz, Bernhard A. Moser, Domain adaptation for regression under Beer–Lambert’s law, Knowledge-Based Systems, Volume 210, 2020, https://doi.org/10.1016/j.knosys.2020.106447.

  • Bianca Mikulasek, Valeria Fonseca Diaz, David Gabauer, Christoph Herwig, Ramin Nikzad-Langerodi, "Partial least squares regression with multiple domains" Journal of Chemometrics 2023 37 (5), e3477, https://doi.org/10.13140/RG.2.2.23750.75845

  • Ramin Nikzad-Langerodi & Florian Sobieczky (2021). Graph‐based calibration transfer. Journal of Chemometrics, 35(4), e3319. https://doi.org/10.1002/cem.3319

  • Ramin Nikzad-Langerodi, Mohit Kumar, Du Nguyen Duy, and Mahtab Alghasi (2024), "(epsilon, delta)-Differentially Private Partial Least Squares Regression", unpublished.

Contact us

Bottleneck Analytics GmbH
[email protected]

About

Python implementation of domain-invariant partial least squares regression (di-PLS)

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published