adapt

Awesome Domain Adaptation Python Toolbox

https://github.com/adapt-python/adapt

Science Score: 23.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
  • DOI references
  • Academic publication links
    Links to: arxiv.org, ieee.org
  • Committers with academic emails
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (15.1%) to scientific vocabulary

Keywords

adversarial-learning adversarial-networks dann deep-learning domain-adaptation feature-selection few-shot-learning generalization importance-sampling machine-learning python regularization-parameters scikit-learn tensorflow transfer-learning zero-shot-learning

Keywords from Contributors

interpretability standardization animal hack
Last synced: 6 months ago · JSON representation

Repository

Awesome Domain Adaptation Python Toolbox

Basic Info
Statistics
  • Stars: 342
  • Watchers: 5
  • Forks: 51
  • Open Issues: 28
  • Releases: 15
Topics
adversarial-learning adversarial-networks dann deep-learning domain-adaptation feature-selection few-shot-learning generalization importance-sampling machine-learning python regularization-parameters scikit-learn tensorflow transfer-learning zero-shot-learning
Created over 5 years ago · Last pushed over 1 year ago
Metadata Files
Readme License

README.md

ADAPT

PyPI version Build Status Python Version Codecov Status

Awesome Domain Adaptation Python Toolbox


ADAPT is an open source library providing numerous tools to perform Transfer Learning and Domain Adaptation.

The purpose of the ADAPT library is to facilitate the access to transfer learning algorithms for a large public, including industrial players. ADAPT is specifically designed for Scikit-learn and Tensorflow users with a "user-friendly" approach. All objects in ADAPT implement the fit, predict and score methods like any scikit-learn object. A very detailed documentation with several examples is provided:

:arrow_right: Documentation


Sample bias correction


Model-based Transfer


Deep Domain Adaptation


Multi-Fidelity Transfer

Installation and Usage

This package is available on Pypi and can be installed with the following command line:

pip install adapt

The following dependencies are required and will be installed with the library: - numpy - scipy - tensorflow (>= 2.0) - scikit-learn - cvxopt - scikeras

If for some reason, these packages failed to install, you can do it manually with:

pip install numpy scipy tensorflow scikit-learn cvxopt scikeras

Finally import the module in your python scripts with:

python import adapt

A simple example of usage is given in the Quick-Start below.

Stable environments [Updated Dec 2023]

ADAPT sometimes encounters incompatibility issue after a new Tensorflow release. In this case, you can use the following environment, which has passed all tests. ADAPT should work well on it: - OS: ubuntu-22.04, windows-2022, macos-12 - Python versions: 3.8 to 3.11

pip install numpy==1.26.2 scipy==1.11.4 tensorflow==2.15.0 scikit-learn==1.3.2 cvxopt==1.3.2 scikeras==0.12.0

ADAPT Guideline

The transfer learning methods implemented in ADAPT can be seen as scikit-learn "Meta-estimators" or tensorflow "Custom Model":


Adapt Estimator

```python AdaptEstimator( estimator = """A scikit-learn estimator (like Ridge(alpha=1.) for example) or a Tensorflow Model""", Xt = "The target input features", yt = "The target output labels (if any)", **params = "Hyper-parameters of the AdaptEstimator" ) ```

Deep Adapt Estimator

```python DeepAdaptEstimator( encoder = "A Tensorflow Model (if required)", task = "A Tensorflow Model (if required)", discriminator = "A Tensorflow Model (if required)", Xt = "The target input features", yt = "The target output labels (if any)", **params = """Hyper-parameters of the DeepAdaptEstimator and the compile and fit params (optimizer, epochs...)""" ) ```

Scikit-learn Meta-Estimator

```python SklearnMetaEstimator( base_estimator = """A scikit-learn estimator (like Ridge(alpha=1.) for example)""", **params = "Hyper-parameters of the SklearnMetaEstimator" ) ```

As you can see, the main difference between ADAPT models and scikit-learn and tensorflow objects is the two arguments Xt, yt which refer to the target data. Indeed, in classical machine learning, one assumes that the fitted model is applied on data distributed according to the training distribution. This is why, in this setting, one performs cross-validation and splits uniformly the training set to evaluate a model.

In the transfer learning framework, however, one assumes that the target data (on which the model will be used at the end) are not distributed like the source training data. Moreover, one assumes that the target distribution can be estimated and compared to the training distribution. Either because a small sample of labeled target data Xt, yt is available or because a large sample of unlabeled target data Xt is at one's disposal.

Thus, the transfer learning models from the ADAPT library can be seen as machine learning models that are fitted with a specific target in mind. This target is different but somewhat related to the training data. This is generally achieved by a transformation of the input features (see feature-based transfer) or by importance weighting (see instance-based transfer). In some cases, the training data are no more available but one aims at fine-tuning a pre-trained source model on a new target dataset (see parameter-based transfer).

Navigate into ADAPT

The ADAPT library proposes numerous transfer algorithms and it can be hard to know which algorithm is best suited for a particular problem. If you do not know which algorithm to choose, this flowchart may help you:

Quick Start

Here is a simple usage example of the ADAPT library. This is a simulation of a 1D sample bias problem with binary classification task. The source input data are distributed according to a Gaussian distribution centered in -1 with standard deviation of 2. The target data are drawn from Gaussian distribution centered in 1 with standard deviation of 2. The output labels are equal to 1 in the interval [-1, 1] and 0 elsewhere. We apply the transfer method KMM which is an unsupervised instance-based algorithm.

```python

Import standard libraries

import numpy as np from sklearn.linear_model import LogisticRegression

Import KMM method form adapt.instance_based module

from adapt.instance_based import KMM

np.random.seed(0)

Create source dataset (Xs ~ N(-1, 2))

ys = 1 for ys in [-1, 1] else, ys = 0

Xs = np.random.randn(1000, 1)*2-1 ys = (Xs[:, 0] > -1.) & (Xs[:, 0] < 1.)

Create target dataset (Xt ~ N(1, 2)), yt ~ ys

Xt = np.random.randn(1000, 1)*2+1 yt = (Xt[:, 0] > -1.) & (Xt[:, 0] < 1.)

Instantiate and fit a source only model for comparison

srconly = LogisticRegression(penalty="none") srconly.fit(Xs, ys)

Instantiate a KMM model : estimator and target input

data Xt are given as parameters with the kernel parameters

adaptmodel = KMM( estimator=LogisticRegression(penalty="none"), Xt=Xt, kernel="rbf", # Gaussian kernel gamma=1., # Bandwidth of the kernel verbose=0, randomstate=0 )

Fit the model.

adapt_model.fit(Xs, ys);

Get the score on target data

adapt_model.score(Xt, yt) python

0.574 ```

| | |:--:| | Quick-Start Plotting Results. The dotted and dashed lines are respectively the class separation of the "source only" and KMM models. Note that the predicted positive class is on the right of the dotted line for the "source only" model but on the left of the dashed line for KMM. (The code for plotting the Figure is available here) |

Contents

ADAPT package is divided in three sub-modules containing the following domain adaptation methods:

Feature-based methods

Instance-based methods

Parameter-based methods

Reference

If you use this library in your research, please cite ADAPT using the following reference: https://arxiv.org/pdf/2107.03049.pdf

@article{de2021adapt, title={ADAPT: Awesome Domain Adaptation Python Toolbox}, author={de Mathelin, Antoine and Deheeger, Fran{\c{c}}ois and Richard, Guillaume and Mougeot, Mathilde and Vayatis, Nicolas}, journal={arXiv preprint arXiv:2107.03049}, year={2021} }

Acknowledgement

This work has been funded by Michelin and the Industrial Data Analytics and Machine Learning chair from ENS Paris-Saclay, Borelli center.

Michelin IDAML Centre Borelli

Owner

  • Login: adapt-python
  • Kind: user

GitHub Events

Total
  • Issues event: 7
  • Watch event: 40
  • Issue comment event: 5
  • Push event: 1
  • Pull request event: 2
  • Fork event: 7
Last Year
  • Issues event: 7
  • Watch event: 40
  • Issue comment event: 5
  • Push event: 1
  • Pull request event: 2
  • Fork event: 7

Committers

Last synced: 9 months ago

All Time
  • Total Commits: 467
  • Total Committers: 9
  • Avg Commits per committer: 51.889
  • Development Distribution Score (DDS): 0.116
Past Year
  • Commits: 5
  • Committers: 1
  • Avg Commits per committer: 5.0
  • Development Distribution Score (DDS): 0.0
Top Committers
Name Email Commits
antoinedemathelin a****t@g****m 413
github-actions[bot] 4****] 20
atiqm 5****m 15
ymouad m****c@i****m 6
AnonymousAccount0 a****y@s****r 5
Mounir a****q@c****r 4
adapt-python 8****n 2
AlejandrodelaConcha a****o@g****m 1
BastienZim b****n@i****t 1
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 7 months ago

All Time
  • Total issues: 87
  • Total pull requests: 109
  • Average time to close issues: about 2 months
  • Average time to close pull requests: 1 day
  • Total issue authors: 36
  • Total pull request authors: 7
  • Average comments per issue: 2.13
  • Average comments per pull request: 0.67
  • Merged pull requests: 102
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 6
  • Pull requests: 1
  • Average time to close issues: about 19 hours
  • Average time to close pull requests: 6 days
  • Issue authors: 6
  • Pull request authors: 1
  • Average comments per issue: 0.83
  • Average comments per pull request: 1.0
  • Merged pull requests: 1
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • antoinedemathelin (18)
  • davidshumway (6)
  • sreenivasaupadhyaya (5)
  • ymouad (2)
  • findyy99 (2)
  • adhamenaya (2)
  • 9527-ly (2)
  • zobapt (1)
  • MarStreicher (1)
  • hmckay (1)
  • treena908 (1)
  • simon-minami (1)
  • rack570 (1)
  • ToniaPf (1)
  • ceavilest (1)
Pull Request Authors
  • antoinedemathelin (58)
  • atiqm (6)
  • ymouad (4)
  • etiennevandebijl (2)
  • BastienZim (1)
  • ghost (1)
  • AlejandrodelaConcha (1)
Top Labels
Issue Labels
Pull Request Labels
Type: Documentation (19) Type: Feature (17) Type: Fix (14) Type: Testing (3) Type: CI (3) Type: Refactoring (1)

Packages

  • Total packages: 2
  • Total downloads:
    • pypi 1,132 last-month
  • Total dependent packages: 0
    (may contain duplicates)
  • Total dependent repositories: 8
    (may contain duplicates)
  • Total versions: 22
  • Total maintainers: 1
pypi.org: adapt

Awesome Domain Adaptation Python Toolbox for Tensorflow and Scikit-learn

  • Versions: 18
  • Dependent Packages: 0
  • Dependent Repositories: 7
  • Downloads: 1,043 Last month
Rankings
Stargazers count: 4.4%
Dependent repos count: 5.6%
Average: 6.6%
Forks count: 7.2%
Dependent packages count: 7.3%
Downloads: 8.5%
Maintainers (1)
Last synced: 7 months ago
pypi.org: adaptation

Awesome Domain Adaptation Package Toolbox for Tensorflow and Scikit-learn

  • Versions: 4
  • Dependent Packages: 0
  • Dependent Repositories: 1
  • Downloads: 89 Last month
Rankings
Stargazers count: 4.4%
Forks count: 7.2%
Dependent packages count: 7.3%
Average: 12.5%
Downloads: 21.6%
Dependent repos count: 22.1%
Maintainers (1)
Last synced: 7 months ago

Dependencies

requirements.txt pypi
  • cvxopt *
  • numpy *
  • scikit-learn *
  • scipy *
  • tensorflow >=2.0
setup.py pypi
  • numpy >=1.16
.github/workflows/check-docs.yml actions
  • actions/checkout v2 composite
  • actions/setup-python v2 composite
  • actions/upload-artifact v1 composite
.github/workflows/pr-labeler.yml actions
  • jimschubert/labeler-action v2 composite
.github/workflows/publish-doc-to-remote.yml actions
  • actions/checkout v2 composite
  • actions/setup-python v2 composite
.github/workflows/release-drafter.yml actions
  • release-drafter/release-drafter v5 composite
.github/workflows/run-test-coverage.yml actions
  • actions/checkout v2 composite
  • actions/setup-python v2 composite
.github/workflows/run-test.yml actions
  • actions/checkout v2 composite
  • actions/setup-python v2 composite
.github/workflows/upload-to-pypi.yml actions
  • actions/checkout v1 composite
  • actions/setup-python v2 composite
  • actions/upload-artifact v2 composite