# minisom **Repository Path**: dot23/minisom ## Basic Information - **Project Name**: minisom - **Description**: :red_circle: MiniSom is a minimalistic implementation of the Self Organizing Maps - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-07-14 - **Last Updated**: 2021-12-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

MiniSom

Self Organizing Maps -------------------- MiniSom is a minimalistic and Numpy based implementation of the Self Organizing Maps (SOM). SOM is a type of Artificial Neural Network able to convert complex, nonlinear statistical relationships between high-dimensional data items into simple geometric relationships on a low-dimensional display. Minisom is designed to allow researchers to easily build on top of it and to give students the ability to quickly grasp its details. Updates about MiniSom are posted on Twitter. Installation --------------------- Just use pip: pip install minisom or download MiniSom to a directory of your choice and use the setup script: git clone https://github.com/JustGlowing/minisom.git python setup.py install How to use it --------------------- In order to use MiniSom you need your data organized as a Numpy matrix where each row corresponds to an observation or as list of lists like the following: ```python data = [[ 0.80, 0.55, 0.22, 0.03], [ 0.82, 0.50, 0.23, 0.03], [ 0.80, 0.54, 0.22, 0.03], [ 0.80, 0.53, 0.26, 0.03], [ 0.79, 0.56, 0.22, 0.03], [ 0.75, 0.60, 0.25, 0.03], [ 0.77, 0.59, 0.22, 0.03]] ``` Then you can train MiniSom just as follows: ```python from minisom import MiniSom som = MiniSom(6, 6, 4, sigma=0.3, learning_rate=0.5) # initialization of 6x6 SOM som.train(data, 100) # trains the SOM with 100 iterations ``` You can obtain the position of the winning neuron on the map for a given sample as follows: ``` som.winner(data[0]) ``` For an overview of all the features implemented in minisom you can browse the following examples: https://github.com/JustGlowing/minisom/tree/master/examples #### Export a SOM and load it again A model can be saved using pickle as follows ```python import pickle som = MiniSom(7, 7, 4) # ...train the som here # saving the som in the file som.p with open('som.p', 'wb') as outfile: pickle.dump(som, outfile) ``` and can be loaded as follows ```python with open('som.p', 'rb') as infile: som = pickle.load(infile) ``` Note that if a lambda function is used to define the decay factor MiniSom will not be pickable anymore. Explore parameters --------------------- You can use this dashboard to explore the effect of the parameters on a sample dataset: https://share.streamlit.io/justglowing/minisom/dashboard/dashboard.py Examples --------------------- Here are some of the charts you'll see how to generate in the examples: | | | :-------------------------:|:-------------------------: Seeds map ![](https://github.com/JustGlowing/minisom/raw/master/examples/resulting_images/som_seed.png) | Class assignment ![](https://github.com/JustGlowing/minisom/raw/master/examples/resulting_images/som_seed_pies.png) Handwritteng digits mapping ![](https://github.com/JustGlowing/minisom/raw/master/examples/resulting_images/som_digts.png) | Hexagonal Topology som hexagonal toplogy Color quantization ![](https://github.com/JustGlowing/minisom/raw/master/examples/resulting_images/som_color_quantization.png) | Outliers detection ![](https://github.com/JustGlowing/minisom/raw/master/examples/resulting_images/som_outliers_detection_circle.png) Other tutorials ------------ - Self Organizing Maps on the Glowing Python by me ;-) - Lecture notes from the Machine Learning course at the University of Lisbon - Introduction to Self-Organizing by Derrick Mwiti - Self Organizing Maps on gapminder data [in German] - Discovering SOM, an Unsupervised Neural Network by Gisely Alves - Video tutorials made by the GeoEngineerings School: Part 1; Part 2; Part 3; Part 4 - Video tutorial Self Organizing Maps: Introduction by SuperDataScience - MATLAB Implementations and Applications of the Self-Organizing Map by Teuvo Kohonen (Inventor of SOM) How to cite MiniSom ------------ ``` @misc{vettigliminisom, title={MiniSom: minimalistic and NumPy-based implementation of the Self Organizing Map}, author={Giuseppe Vettigli}, year={2018}, url={https://github.com/JustGlowing/minisom/}, } ``` Who uses Minisom? ------------ Guidelines to contribute --------------------- 1. In the description of your Pull Request explain clearly what does it implements/fixes and your changes. Possibly give an example in the description of the PR. In cases that the PR is about a code speedup, report a reproducible example and quantify the speedup. 2. Give your pull request a helpful title that summarises what your contribution does. 3. Write unit tests for your code and make sure the existing tests are up to date. `pytest` can be used for this: ``` pytest minisom.py ``` 4. Make sure that there a no stylistic issues using `pycodestyle`: ``` pycodestyle minisom.py ``` 5. Make sure your code is properly commented and documented. Each public method needs to be documented as the existing ones.