# scikit-learn-contrib/imbalanced-learn architecture

> Architecture diagram of the GitHub repository scikit-learn-contrib/imbalanced-learn, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/scikit-learn-contrib/imbalanced-learn
- Repository: https://github.com/scikit-learn-contrib/imbalanced-learn

## Overview

imbalanced-learn is a scikit-learn-compatible toolkit for resampling imbalanced classification data. A typical user supplies training data to a sampler or an imbalanced-learn pipeline; the pipeline applies resampling steps before fitting or using a classifier, and the user can assess predictions with imbalance-aware metrics. The package also provides combined samplers, balanced ensembles, dataset utilities, specialized cross-validation, and optional Keras/TensorFlow batch generators. The tree and excerpts support these capabilities, but do not expose the wiring of every unsampled algorithm, so only documented relationships are shown.

Main entry points: [`imblearn/base.py`](https://github.com/scikit-learn-contrib/imbalanced-learn/blob/master/imblearn/base.py) (Sampler interface), [`imblearn/keras/_generator.py`](https://github.com/scikit-learn-contrib/imbalanced-learn/blob/master/imblearn/keras/_generator.py) (Keras batches), [`imblearn/pipeline.py`](https://github.com/scikit-learn-contrib/imbalanced-learn/blob/master/imblearn/pipeline.py) (Estimator pipeline), [`imblearn/over_sampling`](https://github.com/scikit-learn-contrib/imbalanced-learn/tree/master/imblearn/over_sampling) (Oversampling)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_workflow["Training workflow"]
  node_pipeline["Estimator pipeline<br/>[pipeline.py]"]
  node_sampler_base["Sampler interface<br/>[base.py]"]
end

subgraph group_sampling["Resampling methods"]
  node_over["Oversampling"]
  node_under["Undersampling"]
  node_combine["Combined sampling"]
  node_smote["SMOTE family<br/>[base.py]"]
  node_ensemble["Balanced ensembles"]
end

subgraph group_learning["Learning utilities"]
  node_metrics["Classification metrics<br/>[_classification.py]"]
  node_pairwise["Pairwise metrics<br/>[pairwise.py]"]
  node_splitter["Hardness CV<br/>[_split.py]"]
  node_datasets["Dataset utilities"]
end

subgraph group_integration["Model integrations"]
  node_keras_gen["Keras batches<br/>[_generator.py]"]
  node_tensorflow_gen["TensorFlow batches<br/>[_generator.py]"]
end

node_user(("ML practitioner"))
node_data["Training data"]
node_classifier["Classifier"]
node_predictions["Predictions"]
node_dataset_service["Dataset sources"]
node_keras_model["Keras model"]
node_tensorflow_model["TensorFlow model"]

node_user -->|"configures"| node_pipeline
node_user -->|"provides"| node_data
node_data -->|"supplies training data"| node_pipeline
node_pipeline -->|"runs resampling steps"| node_sampler_base
node_sampler_base -->|"resamples"| node_over
node_sampler_base -->|"resamples"| node_under
node_sampler_base -->|"resamples"| node_combine
node_over -->|"includes"| node_smote
node_pipeline -->|"fits or predicts"| node_classifier
node_classifier -->|"returns"| node_predictions
node_user -->|"evaluates predictions"| node_metrics
node_predictions -->|"scores"| node_metrics
node_user -->|"evaluates distances"| node_pairwise
node_user -->|"requests folds"| node_splitter
node_splitter -->|"estimates hardness with"| node_classifier
node_user -->|"requests data"| node_datasets
node_datasets -->|"downloads datasets"| node_dataset_service
node_user -->|"requests balanced batches"| node_keras_gen
node_keras_gen -->|"uses sampler"| node_over
node_keras_gen -->|"uses sampler"| node_under
node_keras_gen -->|"supplies batches"| node_keras_model
node_user -->|"requests balanced batches"| node_tensorflow_gen
node_tensorflow_gen -->|"supplies batches"| node_tensorflow_model
node_ensemble -->|"uses undersampling"| node_under

click node_pipeline "https://github.com/scikit-learn-contrib/imbalanced-learn/blob/master/imblearn/pipeline.py"
click node_sampler_base "https://github.com/scikit-learn-contrib/imbalanced-learn/blob/master/imblearn/base.py"
click node_over "https://github.com/scikit-learn-contrib/imbalanced-learn/tree/master/imblearn/over_sampling"
click node_under "https://github.com/scikit-learn-contrib/imbalanced-learn/tree/master/imblearn/under_sampling"
click node_combine "https://github.com/scikit-learn-contrib/imbalanced-learn/tree/master/imblearn/combine"
click node_smote "https://github.com/scikit-learn-contrib/imbalanced-learn/blob/master/imblearn/over_sampling/_smote/base.py"
click node_ensemble "https://github.com/scikit-learn-contrib/imbalanced-learn/tree/master/imblearn/ensemble"
click node_metrics "https://github.com/scikit-learn-contrib/imbalanced-learn/blob/master/imblearn/metrics/_classification.py"
click node_pairwise "https://github.com/scikit-learn-contrib/imbalanced-learn/blob/master/imblearn/metrics/pairwise.py"
click node_splitter "https://github.com/scikit-learn-contrib/imbalanced-learn/blob/master/imblearn/model_selection/_split.py"
click node_datasets "https://github.com/scikit-learn-contrib/imbalanced-learn/tree/master/imblearn/datasets"
click node_keras_gen "https://github.com/scikit-learn-contrib/imbalanced-learn/blob/master/imblearn/keras/_generator.py"
click node_tensorflow_gen "https://github.com/scikit-learn-contrib/imbalanced-learn/blob/master/imblearn/tensorflow/_generator.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_pipeline,node_sampler_base toneBlue
class node_over,node_under,node_combine,node_smote,node_ensemble toneAmber
class node_metrics,node_pairwise,node_splitter,node_datasets toneMint
class node_keras_gen,node_tensorflow_gen toneRose
class node_user,node_data,node_classifier,node_predictions,node_dataset_service,node_keras_model,node_tensorflow_model toneIndigo
```

## Components

### Training workflow

- [Estimator pipeline](https://github.com/scikit-learn-contrib/imbalanced-learn/blob/master/imblearn/pipeline.py): `imblearn/pipeline.py`
- [Sampler interface](https://github.com/scikit-learn-contrib/imbalanced-learn/blob/master/imblearn/base.py): `imblearn/base.py`

### Resampling methods

- [Oversampling](https://github.com/scikit-learn-contrib/imbalanced-learn/tree/master/imblearn/over_sampling): `imblearn/over_sampling`
- [Undersampling](https://github.com/scikit-learn-contrib/imbalanced-learn/tree/master/imblearn/under_sampling): `imblearn/under_sampling`
- [Combined sampling](https://github.com/scikit-learn-contrib/imbalanced-learn/tree/master/imblearn/combine): `imblearn/combine`
- [SMOTE family](https://github.com/scikit-learn-contrib/imbalanced-learn/blob/master/imblearn/over_sampling/_smote/base.py): `imblearn/over_sampling/_smote/base.py`
- [Balanced ensembles](https://github.com/scikit-learn-contrib/imbalanced-learn/tree/master/imblearn/ensemble): `imblearn/ensemble`

### Learning utilities

- [Classification metrics](https://github.com/scikit-learn-contrib/imbalanced-learn/blob/master/imblearn/metrics/_classification.py): `imblearn/metrics/_classification.py`
- [Pairwise metrics](https://github.com/scikit-learn-contrib/imbalanced-learn/blob/master/imblearn/metrics/pairwise.py): `imblearn/metrics/pairwise.py`
- [Hardness CV](https://github.com/scikit-learn-contrib/imbalanced-learn/blob/master/imblearn/model_selection/_split.py): `imblearn/model_selection/_split.py`
- [Dataset utilities](https://github.com/scikit-learn-contrib/imbalanced-learn/tree/master/imblearn/datasets): `imblearn/datasets`

### Model integrations

- [Keras batches](https://github.com/scikit-learn-contrib/imbalanced-learn/blob/master/imblearn/keras/_generator.py): `imblearn/keras/_generator.py`
- [TensorFlow batches](https://github.com/scikit-learn-contrib/imbalanced-learn/blob/master/imblearn/tensorflow/_generator.py): `imblearn/tensorflow/_generator.py`

### Other components

- **ML practitioner**
- **Training data**
- **Classifier**
- **Predictions**
- **Dataset sources**
- **Keras model**
- **TensorFlow model**

## Connections

- ML practitioner → Estimator pipeline: configures
- ML practitioner → Training data: provides
- Training data → Estimator pipeline: supplies training data
- Estimator pipeline → Sampler interface: runs resampling steps
- Sampler interface → Oversampling: resamples
- Sampler interface → Undersampling: resamples
- Sampler interface → Combined sampling: resamples
- Oversampling → SMOTE family: includes
- Estimator pipeline → Classifier: fits or predicts
- Classifier → Predictions: returns
- ML practitioner → Classification metrics: evaluates predictions
- Predictions → Classification metrics: scores
- ML practitioner → Pairwise metrics: evaluates distances
- ML practitioner → Hardness CV: requests folds
- Hardness CV → Classifier: estimates hardness with
- ML practitioner → Dataset utilities: requests data
- Dataset utilities → Dataset sources: downloads datasets
- ML practitioner → Keras batches: requests balanced batches
- Keras batches → Oversampling: uses sampler
- Keras batches → Undersampling: uses sampler
- Keras batches → Keras model: supplies batches
- ML practitioner → TensorFlow batches: requests balanced batches
- TensorFlow batches → TensorFlow model: supplies batches
- Balanced ensembles → Undersampling: uses undersampling
