Kohonen/self_organized_map_utilities [ Modules ]
NAME
MODULE self_organized_map_utilities
PURPOSE
This module defines a class for simple self_organized_map (one kohonen layer)
AUTHOR
Oscar Garcia-Cabrejo NOTES
MODIFICATION HISTORY
self_organized_map_utilities/calculate_coordinates [ Functions ]
[ Top ] [ self_organized_map_utilities ] [ Functions ]
NAME
calculate_coordinates
PURPOSE
Subroutine to calculate the coordinates of the units inside a kohonen layer
SYNOPSIS
!======================================================================================== subroutine calculate_coordinates(current_index,ix,iy,iz,nx,ny,nz,coordinates,node_type) !======================================================================================== integer,intent(inout) :: current_index,ix,iy,iz,nx,ny,nz real(kind=8),dimension(:,:),intent(out) :: coordinates character(len=*),intent(in) :: node_type
self_organized_map_utilities/calculate_distance_between_prototypes [ Functions ]
[ Top ] [ self_organized_map_utilities ] [ Functions ]
NAME
calculate_distance_between_prototypes
PURPOSE
Subroutine to calculate the distance between the prototypes
SYNOPSIS
!======================================================================================== subroutine calculate_distance_between_prototypes(kohonen_map) !======================================================================================== class(self_organized_map) :: kohonen_map
self_organized_map_utilities/calculate_distance_matrix [ Functions ]
[ Top ] [ self_organized_map_utilities ] [ Functions ]
NAME
calculate_distance_matrix
PURPOSE
Subroutine to calculate the distance between the units inside a kohonen layer
SYNOPSIS
!======================================================================================== subroutine calculate_distance_matrix(coordinates,distance_matrix,grid_type,toroidal) !======================================================================================== real(kind=8),dimension(:,:),intent(inout) :: coordinates,distance_matrix character(len=*) :: grid_type logical :: toroidal
self_organized_map_utilities/calculate_sigma [ Functions ]
[ Top ] [ self_organized_map_utilities ] [ Functions ]
NAME
calculate_sigma
PURPOSE
Function to calculate the scaling factor sigma
SYNOPSIS
!======================================================================================== function calculate_sigma(kohonen_map,input_data,seed) result(sigma) !======================================================================================== class(self_organized_map) :: kohonen_map real(kind=8),dimension(:,:),intent(inout) :: input_data integer,intent(inout),optional :: seed real(kind=8) :: sigma
self_organized_map_utilities/calculate_u_matrix [ Functions ]
[ Top ] [ self_organized_map_utilities ] [ Functions ]
NAME
calculate_u_matrix
PURPOSE
Subroutine to calculate the u_matrix
SYNOPSIS
!======================================================================================== subroutine calculate_u_matrix(kohonen_map) !======================================================================================== class(self_organized_map) :: kohonen_map
self_organized_map_utilities/create [ Functions ]
[ Top ] [ self_organized_map_utilities ] [ Functions ]
NAME
create
PURPOSE
Constructor for self_organized_map
SYNOPSIS
!======================================================================================== subroutine create_som(kohonen_map,training_parameters) !======================================================================================== class(self_organized_map) :: kohonen_map type(kohonen_layer_parameters),dimension(:) :: training_parameters
self_organized_map_utilities/destroy [ Functions ]
[ Top ] [ self_organized_map_utilities ] [ Functions ]
NAME
destroy
PURPOSE
Destructor for self_organized_map
SYNOPSIS
!======================================================================================== subroutine destroy_som(kohonen_map) !======================================================================================== class(self_organized_map) :: kohonen_map
self_organized_map_utilities/external_predict_map [ Functions ]
[ Top ] [ self_organized_map_utilities ] [ Functions ]
NAME
external_predict_map
PURPOSE
Subroutine to connect this module to R
SYNOPSIS
!======================================================================================== subroutine external_predict_map(prot,nx,ny,new_pat,npat,nvar,node_index) & bind(C, name="predict_som_") !======================================================================================== use, intrinsic :: iso_c_binding, only : c_double, c_int integer(c_int),intent(in) :: nx,ny,npat,nvar real(c_double),intent(in) :: prot(nx*ny,nvar),new_pat(npat,nvar) integer(c_int),intent(out) :: node_index(npat,3)
self_organized_map_utilities/external_train_map [ Functions ]
[ Top ] [ self_organized_map_utilities ] [ Functions ]
NAME
external_train_map
PURPOSE
Subroutine to connect the self_organizing_map module to R o C
SYNOPSIS
!======================================================================================== subroutine external_train_map(x,nvar,npat,nx,ny,nepoch,alpha,grid_type,& distance_type,neigh_type,toroidal,prot,distortion,& u_matrix,coords,number_patterns,node_index) bind(C, name="train_som_") !======================================================================================== use, intrinsic :: iso_c_binding, only : c_double, c_int, c_char real(kind=8),parameter :: version=0.1d0 character(len=*),parameter :: program_name="som_train" integer(c_int), intent(in) :: nvar,npat,nx,ny,nepoch,toroidal real(c_double),intent(out) :: prot(nx*ny,nvar),distortion(nepoch) real(c_double),intent(out) :: u_matrix(2*nx-1,2*ny-1),coords(nx*ny,3) integer(c_int),intent(out) :: number_patterns(nx,ny),node_index(npat,3) real(c_double),intent(in) :: x(npat,nvar) real(c_double),intent(in) :: alpha integer(c_int),intent(in) :: grid_type,distance_type,neigh_type
self_organized_map_utilities/find_best_match_unit [ Functions ]
[ Top ] [ self_organized_map_utilities ] [ Functions ]
NAME
find_best_match_unit
PURPOSE
Subroutine to calculate the best match unit
SYNOPSIS
!======================================================================================== subroutine find_best_match_unit(kohonen_map,current_prototype,ihit,jhit,khit,dist_hit) !======================================================================================== class(self_organized_map) :: kohonen_map type(kohonen_prototype),intent(inout) :: current_prototype integer,intent(out) :: ihit,jhit,khit real(kind=8),intent(out) :: dist_hit
self_organized_map_utilities/find_bmu_grid [ Functions ]
[ Top ] [ self_organized_map_utilities ] [ Functions ]
NAME
find_bmu_grid
PURPOSE
Subroutine to calculate the best match unit over the grid
SYNOPSIS
!======================================================================================== subroutine find_bmu_grid(kohonen_map,input_data) !======================================================================================== class(self_organized_map) :: kohonen_map type(kohonen_pattern),dimension(:),intent(inout) :: input_data
self_organized_map_utilities/get_count [ Functions ]
[ Top ] [ self_organized_map_utilities ] [ Functions ]
NAME
get_count
PURPOSE
Function to get count matrix for self_organized_map
SYNOPSIS
!======================================================================================== subroutine get_count_som(kohonen_map,count_) !======================================================================================== class(self_organized_map) :: kohonen_map integer,dimension(:,:,:),intent(inout) :: count_
self_organized_map_utilities/get_prototypes [ Functions ]
[ Top ] [ self_organized_map_utilities ] [ Functions ]
NAME
get_prototypes
PURPOSE
Subroutine to get SOM prototypes
SYNOPSIS
!======================================================================================== subroutine get_prototypes(kohonen_map,prototypes) !======================================================================================== class(self_organized_map) :: kohonen_map real(kind=8),dimension(:,:),intent(out) :: prototypes
self_organized_map_utilities/index2position [ Functions ]
[ Top ] [ self_organized_map_utilities ] [ Functions ]
NAME
position2index
PURPOSE
Subroutine to calculate the position ix,iy,iz inside a rectangular grid from index
SYNOPSIS
!======================================================================================== subroutine index2position(index_,nx,ny,nz,cx,cy,cz) !======================================================================================== integer,intent(inout) :: index_,nx,ny,nz integer,intent(inout) :: cx,cy,cz
self_organized_map_utilities/position2index [ Functions ]
[ Top ] [ self_organized_map_utilities ] [ Functions ]
NAME
position2index
PURPOSE
Function to calculate the index inside a rectangular grid from position ix,iy,iz
SYNOPSIS
!======================================================================================== function position2index(ix,iy,iz,nx,ny) result(index_) !======================================================================================== integer,intent(inout) :: ix,iy,iz,nx,ny integer ::index_
self_organized_map_utilities/predict [ Functions ]
[ Top ] [ self_organized_map_utilities ] [ Functions ]
NAME
predict
PURPOSE
Prediction function for self_organized_map
SYNOPSIS
!======================================================================================== subroutine predict_som(kohonen_map,input_data,map_output) !======================================================================================== class(self_organized_map) :: kohonen_map type(kohonen_pattern),dimension(:),intent(inout) :: input_data integer,dimension(:,:),intent(out) :: map_output
self_organized_map_utilities/print [ Functions ]
[ Top ] [ self_organized_map_utilities ] [ Functions ]
NAME
PURPOSE
Print function for self_organized_map
SYNOPSIS
!======================================================================================== subroutine print_som(kohonen_map,unit_) !======================================================================================== class(self_organized_map) :: kohonen_map integer,intent(inout),optional :: unit_
self_organized_map_utilities/query_som [ Functions ]
[ Top ] [ self_organized_map_utilities ] [ Functions ]
NAME
query_som
PURPOSE
Function to find the input samples associated with specific vector
SYNOPSIS
!======================================================================================== subroutine query_som(kohonen_map,input_pattern,sample_index) !,output_patterns) !======================================================================================== class(self_organized_map) :: kohonen_map real(kind=8),dimension(:,:),intent(inout) :: input_pattern integer,allocatable :: sample_index(:)
self_organized_map_utilities/read_som [ Functions ]
[ Top ] [ self_organized_map_utilities ] [ Functions ]
NAME
read_som
PURPOSE
Subroutine to read the prototypes to define a self_organized_map
SYNOPSIS
!======================================================================================== subroutine read_som(kohonen_map,som_fl) !======================================================================================== class(self_organized_map) :: kohonen_map character(len=*) :: som_fl
self_organized_map_utilities/self_organized_map [ Classes ]
[ Top ] [ self_organized_map_utilities ] [ Classes ]
NAME
self_organized_map
PURPOSE
Class to represent a self_organized_map
ATTRIBUTES
type(kohonen_prototype),allocatable :: grid(:,:,:) integer,allocatable :: number_patterns(:,:,:),cells_index(:,:) real(kind=8),allocatable :: u_matrix(:,:,:),distance(:,:) real(kind=8),allocatable :: cells_distances(:,:),coordinates(:,:) type(kohonen_layer_parameters) :: parameters type(factory_distance) :: factory class(distance_base),allocatable :: distance_function real(kind=8),allocatable :: distortion(:) ! integer,allocatable :: grid_pattern_index(:,:,:),list_node_grid(:,:,:,:) ! contains
METHODS
procedure,public :: create => create_som procedure,public :: destroy => destroy_som procedure,private :: train_som_data procedure,public :: train => train_som_data procedure,public :: predict => predict_som procedure,public :: print => print_som procedure,public :: read => read_som procedure,public :: get_count => get_count_som procedure,public :: query => query_som procedure,public :: get_prototypes !procedure,public :: get_index => get_index_som !procedure,public :: get_u_matrix => get_u_matrix_som procedure,private :: find_best_match_unit procedure,private :: update_weights ! procedure,private :: update_weights1 procedure,private :: find_bmu_grid procedure,private :: calculate_u_matrix procedure,private :: calculate_sigma ! procedure,nopass,private :: position2index procedure,nopass,private :: index2position procedure,nopass,private :: calculate_distance_matrix procedure,nopass,private :: calculate_coordinates procedure,private :: calculate_distance_between_prototypes ! procedure,nopass,public :: external_train_map procedure,nopass,public :: external_predict_map
self_organized_map_utilities/train_som_data [ Functions ]
[ Top ] [ self_organized_map_utilities ] [ Functions ]
NAME
train_som_data
PURPOSE
Training function for self_organized_map
SYNOPSIS
!======================================================================================== subroutine train_som_data(kohonen_map,input_data) !======================================================================================== class(self_organized_map) :: kohonen_map type(kohonen_pattern),dimension(:),intent(inout) :: input_data
self_organized_map_utilities/update_weights [ Functions ]
[ Top ] [ self_organized_map_utilities ] [ Functions ]
NAME
update_weights
PURPOSE
Subroutine to update the weights
SYNOPSIS
!======================================================================================== subroutine update_weights(kohonen_map,current_values,ihit,jhit,khit,& maximum_radius,iteration) !======================================================================================== class(self_organized_map) :: kohonen_map real(kind=8),dimension(:,:),intent(inout) :: current_values integer,intent(inout) :: ihit,jhit,khit,iteration real(kind=8),intent(inout) :: maximum_radius