|
AI::NeuralNet::Kohonen - Kohonen's Self-organising Maps |
AI::NeuralNet::Kohonen - Kohonen's Self-organising Maps
$_ = AI::NeuralNet::Kohonen->new(
map_dim_x => 39,
map_dim_y => 19,
epochs => 100,
table =>
"3
1 0 0 red
0 1 0 yellow
0 0 1 blue
0 1 1 cyan
1 1 0 yellow
1 .5 0 orange
1 .5 1 pink"
);
$_->train;
$_->save_file('mydata.txt');
exit;
An illustrative implimentation of Kohonen's Self-organising Feature Maps (SOMs) in Perl. It's not fast - it's illustrative. In fact, it's slow: but it is illustrative....
Have a look at the AI::NeuralNet::Kohonen::Demo::RGB manpage for an example of visualisation of the map.
I'll maybe add some more text here later.
AI::NeuralNet::Kohonen::Node
AI::NeuralNet::Kohonen::Input
None
Instantiates object fields:
input, table) being processed, but
it does over-ride any specifications (weight_dim) which may
have been explicitly handed to the constructor.
See also FILE FORMAT and METHOD load_input.
[ [v1a, v1b, v1c], [v2a,v2b,v2c], ..., [vNa,vNb,vNc] ]
See also table.
input_file field.
1.
smooth
is applied (see METHOD smooth).
x.
Private fields:
Populates the map with nodes that contain random real nubmers.
See CONSTRUCTOR new in the AI::NerualNet::Kohonen::Node manpage.
As METHOD randomise_map but sets all map nodes to
either the value supplied as the only paramter, or undef.
Optionally accepts a parameter that is the number of epochs
for which to train: the default is the value in the epochs field.
An epoch is composed of A number of generations, the number being the total number of input vectors.
For every generation, iterates:
At the end of every generation, the learning rate is decayed (see PRIVATE METHOD _decay_learning_rate).
See CONSTRUCTOR new for details of applicable callbacks.
Returns a true value.
For a specific taraget, finds the Best Matching Unit in the map and return the x/y index.
Accepts: a reference to an array that is the target.
Returns: a reference to an array that is the BMU (and should perhaps be abstracted as an object in its own right), indexed as follows:
See METHOD get_weight_at, and distance_from in the AI::NeuralNet::Kohonen::Node manpage,
Returns a reference to the weight array at the supplied x,y co-ordinates.
Accepts: x,y co-ordinates, each a scalar.
Returns: reference to an array that is the weight of the node, or
undef on failure.
Finds and returns the results for all input vectors in the supplied
reference to an array of arrays,
placing the values in the results field (array reference),
and, returning it either as an array or as it is, depending on
the calling context
If no array reference of input vectors is supplied, will use
the values in the input field.
Individual results are in the array format as described in METHOD find_bmu.
See METHOD find_bmu, and METHOD get_weight_at.
Clears the map and fills it with the results.
The sole paramter is passed to the METHOD clear_map.
METHOD get_results is then called, and the results
returned fed into the object field map.
This may change, as it seems misleading to re-use that field.
Print the current weight values to the screen.
Perform gaussian smoothing upon the map.
Accepts: the length of the side of the square gaussian mask to apply.
If not supplied, uses the value in the field smoothing; if that is
empty, uses the square root of the average of the map dimensions
(map_dim_a).
Returns: a true value.
Loads a SOM_PAK-format file of input vectors.
This method is automatically accessed if the constructor is supplied
with an input_file field.
Requires: a path to a file.
Returns undef on failure.
See FILE FORMAT.
Saves the map file in SOM_PAK format (see METHOD load_input) at the path specified in the first argument.
Return undef on failure, a true value on success.
Return a random target from the training set in the input field,
unless the targeting field is defined, when the targets are
iterated over.
Accepts: a reference to an array containing
the distance of the BMU from the target, as well
as the x and y co-ordinates of the BMU in the map;
a reference to the target, which is an
AI::NeuralNet::Kohonen::Input object.
Returns: true.
( t )
sigma(t) = sigma(0) exp ( - ------ )
( lambda )
Where sigma is the width of the map at any stage
in time (t), and lambda is a time constant.
Lambda is our field time_constant.
The map radius is naturally just half the map width.
W(t+1) = W(t) + THETA(t) L(t)( V(t)-W(t) )
Where L is the learning rate, V the target vector,
and W the weight. THETA(t) represents the influence
of distance from the BMU upon a node's learning, and
is calculated by the Node class - see
distance_effect in the AI::NeuralNet::Kohonen::Node manpage.
Performs a gaussian decay upon the learning rate (our l field).
( t )
L(t) = L exp ( - ------ )
0 ( lambda )
Accepts: size of mask.
Returns: reference to a 2d array that is the mask.
Accepts: two paramters: the first, r, gives the distance from the mask centre,
the second, sigma, specifies the width of the mask.
Returns the gaussian weight.
See also _decay_learning_rate.
Returns the quantise error for either the supplied points,
or those in the input field.
Adds to the input field an input vector in SOM_PAK-format
whitespace-delimited ASCII.
Returns undef on failure to add an item (perhaps because
the data passed was a comment, or the weight_dim flag was
not set); a true value on success.
This module has begun to attempt the SOM_PAK format: SOM_PAK file format version 3.1 (April 7, 1995), Helsinki University of Technology, Espoo:
The input data is stored in ASCII-form as a list of entries, one line ...for each vectorial sample.
The first line of the file is reserved for status knowledge of the entries; in the present version it is used to define the following items (these items MUST occur in the indicated order):
- Dimensionality of the vectors (integer, compulsory).
- Topology type, either hexa or rect (string, optional, case-sensitive).
- Map dimension in x-direction (integer, optional).
- Map dimension in y-direction (integer, optional).
- Neighborhood type, either bubble or gaussian (string, optional, case-sen-
sitive).
...
Subsequent lines consist of n floating-point numbers followed by an optional class label (that can be any string) and two optional qualifiers (see below) that determine the usage of the corresponding data entry in training programs. The data files can also contain an arbitrary number of comment lines that begin with '#', and are ignored. (One '#' for each comment line is needed.)
If some components of some data vectors are missing (due to data collection failures or any other reason) those components should be marked with 'x'...[in processing, these] are ignored.
...
Each data line may have two optional qualifiers that determine the usage of the data entry during training. The qualifiers are of the form codeword=value, where spaces are not allowed between the parts of the qualifier. The optional qualifiers are the following:
Not (yet) implimented in file format:
See distance_from in the AI::NeuralNet::Kohonen::Node manpage; the AI::NeuralNet::Kohonen::Demo::RGB manpage.
The documentation for SOM_PAK,
which has lots of advice on map building that may or may not be applicable yet.
A very nice explanation of Kohonen's algorithm: AI-Junkie SOM tutorial part 1
This implimentation Copyright (C) Lee Goddard, 2003-2006. All Rights Reserved.
Available under the same terms as Perl itself.
|
AI::NeuralNet::Kohonen - Kohonen's Self-organising Maps |