Skip to main content

python-som

CI PyPI Python versions License: MIT

Implementation of Kohonen's 2-D self-organizing map. NumPy is the only dependency. Accepts NumPy arrays, pandas DataFrames, polars, pyarrow, and anything else implementing the __array__ protocol.

Documentation · Changelog

Install

pip install python-som              # requires Python 3.10+
pip install "python-som[cli]"       # adds tqdm progress bars

Quick start

import numpy as np
import python_som

rng = np.random.default_rng(0)
data = rng.normal(size=(150, 4))

som = python_som.SOM(x=20, y=None, input_len=4, data=data, random_seed=42)
som.weight_initialization(mode="linear", data=data)
error = som.train(data, n_iteration=len(data), mode="batch")

umatrix = som.distance_matrix()
winner = som.winner(data[0])

A full worked example with plots is in examples/iris.py and in the getting-started guide.

U-matrix of a SOM trained on Iris

Features

  • Stepwise and batch training
  • Random, random-sampling and linear (PCA) weight initialization
  • Automatic selection of the map size ratio, from PCA
  • Cyclic arrays, for toroidal maps
  • Gaussian, bubble and Mexican hat neighborhood functions
  • Custom decay functions
  • Visualization support: U-matrix, activation matrix
  • Supervised labelling, via the label map
  • Fully type-annotated, with a py.typed marker

Neighborhood functions

All three are functions of the distance between two nodes in the grid, sqdist(c, i) in Eq. (5) of Kohonen (2013).

Name Shape Notes
'gaussian' exp(-r² / 2σ²) Strictly positive, monotonically decreasing. The default.
'bubble' 1 for max(dx, dy) ≤ σ, else 0 The truncated inner lobe of the Mexican hat. Uses the Chebyshev metric, so the region is a square.
'mexicanhat' (1 - u)·exp(-u), u = r² / 2σ² Excitatory near the winner, inhibitory beyond it. Zero at r = √2·σ, minimum -e⁻² at r = 2σ.

The Mexican hat takes negative values, so it cannot be used with mode='batch': the batch update of Kohonen Eq. (8) is a weighted mean whose denominator is not sign-definite for a signed neighborhood function. Use mode='random' or mode='sequential'; mode='batch' raises a ValueError.

See Neighborhood functions for the derivations, including why the Mexican hat is not an outer product of two 1-D wavelets.

Upgrading

0.3.0 corrects several methodology defects, so numerical results are not comparable with earlier versions. In particular random_seed no longer reproduces pre-0.3.0 maps: the generator is now per-instance rather than a call to np.random.seed on NumPy's global state. To reproduce figures made with an older version, pin python-som==0.2.0.

Each change and the passage of Kohonen (2013) behind it is in the changelog.

Development

uv sync --all-extras
uv run pytest --cov          # tests and coverage
uv run ruff check .          # lint
uv run ruff format --check . # formatting
uv run mypy                  # type-check
uv run mkdocs serve          # docs, locally
pre-commit install           # optional, run the gates on commit

If you use the SonarQube for IDE (SonarLint) VS Code extension, it will also apply Sonar's Python rules locally; the ruff configuration is set up to cover most of the same ground.

References

Based on:

Teuvo Kohonen, Essentials of the self-organizing map, Neural Networks, Volume 37, 2013, Pages 52-65, ISSN 0893-6080, https://doi.org/10.1016/j.neunet.2012.09.018

The Mexican hat neighborhood follows the lateral-interaction formulation in:

O. J. Vrieze, Kohonen network, in: Artificial Neural Networks: An Introduction to ANN Theory and Practice, Lecture Notes in Computer Science, Volume 931, Springer, Berlin, Heidelberg, 1995, Pages 83-100, https://doi.org/10.1007/BFb0027024

License

MIT. See LICENSE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

python_som-0.5.0.tar.gz (161.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

python_som-0.5.0-py3-none-any.whl (48.3 kB view details)

Uploaded Python 3

File details

Details for the file python_som-0.5.0.tar.gz.

File metadata

  • Download URL: python_som-0.5.0.tar.gz
  • Upload date:
  • Size: 161.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for python_som-0.5.0.tar.gz
Algorithm Hash digest
SHA256 1fdbe9f06d2b47e1008e0f152fa84b8e4ca56d9294f5bfea3c90a3df113ad918
MD5 dd2a8a4e4dcbe4796eee6ee98172bace
BLAKE2b-256 2c45f6616235a837e5763056b6628fb15972ddc67f988633dffdc2221dd1e22e

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_som-0.5.0.tar.gz:

Publisher: release.yml on andremsouza/python-som

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file python_som-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: python_som-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 48.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for python_som-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 fb4a70d3fd5cc094756263f85a7a6a4d8029e2d83f2d661357c8710a6dd17a91
MD5 d0b81e72b348cb2cb2588719e278c66b
BLAKE2b-256 65a2a7646ddc00e4ae024645f85c50a1fd6823fc93ddef405a3eb2cf4404b29b

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_som-0.5.0-py3-none-any.whl:

Publisher: release.yml on andremsouza/python-som

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.8.0

2 files

0.7.0

2 files

0.6.1

2 files

0.6.0

2 files

This release

0.5.0 This release

2 files

0.4.0

2 files

0.3.0

2 files

0.2.0

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 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