Kohonen/self_organized_map_utilities [ Modules ]

[ Top ] [ 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

   print

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