Skip to main content

AMBER

AMBER is an open-source Python library for building, training, and analysing Self-Organizing Maps (SOMs) developed for time series data.
It covers the full workflow — data normalisation, map training, classification, temporal/recurrent SOMs, feature extraction for biosignals, and interactive visualisation.

Python License: GPL v3 Tests Coverage Docs


Features

Module What it provides
Map Standard SOM with 7 distance metrics, 9 normalisation strategies, 4 weight-initialisation methods, and automatic map-size selection (Vesanto & Alhoniemi 2000)
Classification BMU assignment, activation map, U-matrix, quantisation error, topological error
TemporalMap Recurrent SOM (RSOM, Voegtlin 2002) — context vector accumulates temporal structure
TemporalAnalysis Transition matrix, stability index, mean path length, dwell times
FeatureExtractor Statistical, spectral, and complexity features for time-series/biosignals
IterativeSOM Grid-search over map sizes; selects the best map by combined QE+TE score
Visualization Heat maps, U-matrix, elevation maps, trajectory plots, transition heatmaps

Distance metrics (BMU selection)

euclidean · manhattan · chebyshev · cosine · correlation · dtw · cross_correlation

Normalisation strategies

zscore (fwn) · robust · 01scale · zscore_sample · robust_sample · minmax_sample · l2 (euclidean) · none


Installation

pip install amber-som

From source

git clone https://github.com/albertonogales/AMBER.git
cd AMBER
pip install -e .

Optional dependencies

Extra Install command Required for
librosa pip install librosa MFCC feature extraction

Quick start

import numpy as np
import AMBER

# --- 1. Train a SOM (map size chosen automatically) ---
data = np.random.rand(200, 8)
som = AMBER.Map(data=data, period=100)
print(f"Map size: {som.map_size}×{som.map_size}")   # e.g. 10×10

# --- 2. Classify ---
cls = AMBER.Classification(som, data)
print(f"Quantisation error : {cls.quantization_error:.4f}")
print(f"Topological error  : {cls.topological_error:.4f}")

# --- 3. Visualise ---
AMBER.Visualization.heat_map(cls)
AMBER.Visualization.umatrix(cls)

Custom map size and distance

som = AMBER.Map(
    data=data,
    size=12,
    period=200,
    distance='dtw',          # DTW distance for BMU selection
    normalization='zscore',
    weights='PCA',
    use_decay=True,
)

Temporal / Recurrent SOM

# Train
tsom = AMBER.TemporalMap(
    data=eeg_windows,
    period=100,
    context_weight=0.5,     # α — context memory
    context_influence=0.3,  # β — context vs. signal balance
    confirm=True,           # required: acknowledge temporal ordering assumption
)

# Analyse temporal dynamics
cls  = AMBER.Classification(tsom, eeg_windows)
ta   = AMBER.TemporalAnalysis(cls)
print(ta.summary())

AMBER.Visualization.trajectory(cls, ta)
AMBER.Visualization.transition_matrix_plot(ta)
AMBER.Visualization.dwell_time_map(ta, cls)

Feature extraction for biosignals

from AMBER import FeatureExtractor

fe = FeatureExtractor(fs=256)            # 256 Hz EEG

# Single window → 1-D feature vector
x = fe.extract(eeg_window, features=[
    'rms', 'zero_crossing_rate',
    'alpha_power', 'spectral_entropy',
    'hjorth_mobility',
])

# Batch of windows → (n_windows, n_features) ready for Map.train
X = fe.extract_batch(eeg_windows, features=['rms', 'alpha_power', 'beta_power'])

Application domains

AMBER has been applied to and includes example notebooks for:

Domain Signal type Key AMBER feature
EEG / biosignals Brain, muscle, cardiac FeatureExtractor (Hjorth, band power) + TemporalMap for state transitions — see eeg_som.ipynb
Audio / speech MFCC, spectral features FeatureExtractor(mfcc) + Map for speaker/instrument clustering — see audio_som.ipynb
Climate SST, MSLP, wind TemporalMap for weather-regime discovery and transition analysis
Predictive maintenance Vibration (bearing) FeatureExtractor (kurtosis, RMS) + degradation trajectory via TemporalAnalysis
Finance / HAR Returns, accelerometers TemporalMap for regime / activity detection

Running the tests

pip install -r requirements-dev.txt
pytest               # 374 tests, ~99 % coverage

A coverage HTML report is written to coverage_html/.


Repository structure

AMBER/
├── AMBER/
│   ├── __init__.py
│   ├── map.py                 # Core SOM
│   ├── classification.py      # BMU assignment & metrics
│   ├── distances.py           # All signal and grid distance functions
│   ├── features.py            # Feature extraction for time series
│   ├── temporal_map.py        # Recurrent SOM (RSOM)
│   ├── temporal_analysis.py   # Temporal metrics
│   ├── iterativesom.py        # Grid-search over map sizes
│   └── visualization.py       # Plots
├── tests/
│   ├── conftest.py
│   ├── test_distances.py
│   ├── test_map.py
│   ├── test_classification.py
│   ├── test_features.py
│   ├── test_temporal_map.py
│   ├── test_temporal_analysis.py
│   ├── test_iterativesom.py
│   ├── test_visualization.py
│   └── test_integration.py
├── examples/
│   ├── colors_example.ipynb              # Basic SOM on RGB colour data
│   ├── eeg_som.ipynb                     # EEG sleep staging (Sleep-EDF)
│   ├── audio_som.ipynb                   # Audio/instrument clustering (NSynth/FSDD)
│   ├── climate_som.ipynb                 # Weather-regime discovery (ERA5)
│   ├── predictive_maintenance_som.ipynb  # Bearing degradation tracking (CWRU)
│   └── ablation_study.ipynb              # Systematic validation of all design choices
├── requirements.txt
├── requirements-dev.txt
└── LICENSE

Citing AMBER

If you use AMBER in your research, please cite the companion paper:

@article{nogales2026amber,
  title   = {{AMBER}: Autoassociative Map Builder for tEmporal Representations —
             a Python library for Self-Organizing Maps},
  author  = {Nogales, Alberto and Sicilia, Miguel {\'A}ngel and
             Garc{\'i}a Barriocanal, Elena and Mora Cantallops, Mar{\c{c}}al and
             Ballesteros Rodr{\'i}guez, Alberto},
  journal = {Information Sciences},
  year    = {2026},
  note    = {Under review}
}

A machine-readable CITATION.cff file is included in the repository for automated citation tools (GitHub "Cite this repository", Zenodo, etc.).


Contact

Under license of IERU Research Group at Universidad de Alcalá (Spain)

Metadata

Release files for amber-som 2.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for amber-som 2.2.0
File Size Uploaded
amber_som-2.2.0.tar.gz 8.3 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for amber-som 2.2.0
File Interpreter ABI Platform
amber_som-2.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 8.4 MB

Release files / amber_som-2.2.0.tar.gz

Download URL amber_som-2.2.0.tar.gz
Size 8.3 MB
Tags Source
SHA-256 checksum
How to use checksums
a0ec4f45cd5be64c5ef3cbe26ea930259bf20d2de6496fd88d418d7d901a85c5
BLAKE2b-256 checksum
How to use checksums
97cc06cc2eb510ce85c7cf15bcac537f016133a3f536ba6c404cdf9789f89aa2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.6

Release files / amber_som-2.2.0-py3-none-any.whl

Download URL amber_som-2.2.0-py3-none-any.whl
Size 51.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
44b593ffc7c903c2be5b0016fb9708068ac656dabe2171cf6afab34947bd4d22
BLAKE2b-256 checksum
How to use checksums
8c9cc0c09a9ae10a869ae9d17a06169c0f11a1e23ad175bc822210a3b2f0f60a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.6

Release history Release notifications | RSS feed

This release

2.2.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page