RusticSOM
Rust library for Self Organising Maps (SOM).
Using this Crate
Add rusticsom as a dependency in Cargo.toml
[]
= "1.1.0"
Include the crate
use SOM;
API
Use SOM::create to create an SOM object using the API call below, which creates an SOM with length x breadth cells and accepts neurons of length inputs.
randomize is a flag, which, if true, initializes the weights of each cell to random, small, floating-point values.
learning_rate, optional, is the learning_rate of the SOM; by default it will be 0.5.
sigma, optional, is the spread of the neighbourhood function; by default it will be 1.0.
decay_function, optional, is a function pointer that accepts functions that take 3 parameters of types f32, u32, u32, and returns an f64. This function is used to "decay" both the learning_rate and sigma. By default it is
new_value = old_value / (1 + current_iteration/total_iterations)
neighbourhood_function, optional, is also a function pointer that accepts functions that take 3 parameters, a tuple of type (usize, usize) representing the size of the SOM, another tuple of type (usize, usize) representing the position of the winner neuron, and an f32 representing sigma; and returns a 2D Array containing weights of the neighbours of the winning neuron, i.e, centered at winner. By default, the Gaussian function will be used, which returns a "Gaussian centered at the winner neuron".
This function allows to create a SOM from a previously exported SOM json data using SOM::to_json().
Use SOM_Object.train_random() to train the SOM with the input dataset, where samples from the input dataset are picked in a random order.
Samples (rows) from the 2D Array data are picked randomly and the SOM is trained for iterations iterations!
Use SOM_Object.train_batch() to train the SOM with the input dataset, where samples from the input dataset are picked in a sequential order.
Samples (rows) from the 2D Array data are picked sequentially and the SOM is trained for iterations iterations!
Use SOM_Object.winner() to find the winning neuron for a given sample.
This function must be called with an SOM object.
Requires one parameter, a 1D Array of f64s representing the input sample.
Returns a tuple (usize, usize) representing the x and y coordinates of the winning neuron in the SOM.
Use SOM_Object.winner_dist() to find the winning neuron for a given sample, and it's distance from this winner neuron.
This function must be called with an SOM object.
Requires one parameter, a 1D Array of f64s representing the input sample.
Returns a tuple (usize, usize) representing the x and y coordinates of the winning neuron in the SOM.
Also returns an f64 representing the distance of the input sample from this winner neuron.
This function returns the activation map of the SOM. The activation map is a 2D Array where each cell at (i, j) represents the number of times the (i, j) cell of the SOM was picked to be the winner neuron.
This function returns a tuple representing the size of the SOM. Format is (length, breadth).
Returns the distance map of the SOM, i.e, the normalized distance of every neuron with every other neuron.
Returns the internal SOM data as pretty printed json (using serde_json).
Primary Contributors
| Aditi Srinivas | |
| Avinash Shenoy |
Example
We've tested this crate on the famous iris dataset (present in csv format in the extras folder).
The t_full_test function in /tests/test.rs was used to produce the required output. The following plots were obtained using matplotlib for Python.
Using a 5 x 5 SOM, trained for 250 iterations :

Using a 10 x 10 SOM, trained for 1000 iterations :

| Symbol | Represents |
|---|---|
| Circle | setosa |
| Square | versicolor |
| Diamond | virginica |