som-10.1.11: Self-Organising Maps
Copyright(c) 2012-2021 Amy de Buitléir
LicenseBSD-style
Maintaineramy@nualeargais.ie
Stabilityexperimental
Portabilityportable
Safe HaskellSafe-Inferred
LanguageHaskell2010

Data.Datamining.Clustering.DSOMInternal

Description

A module containing private DSOM internals. Most developers should use DSOM instead. This module is subject to change without notice.

Synopsis

Documentation

data DSOM gm x k p Source #

A Self-Organising Map (DSOM).

Although DSOM implements GridMap, most users will only need the interface provided by Data.Datamining.Clustering.Classifier. If you chose to use the GridMap functions, please note:

  1. The functions adjust, and adjustWithKey do not increment the counter. You can do so manually with incrementCounter.
  2. The functions map and mapWithKey are not implemented (they just return an error). It would be problematic to implement them because the input DSOM and the output DSOM would have to have the same Metric type.

Constructors

DSOM 

Fields

  • gridMap :: gm p

    Maps patterns to tiles in a regular grid. In the context of a SOM, the tiles are called "nodes"

  • learningRate :: x -> x -> x -> x

    A function which determines the how quickly the SOM learns.

  • difference :: p -> p -> x

    A function which compares two patterns and returns a non-negative number representing how different the patterns are. A result of 0 indicates that the patterns are identical.

  • makeSimilar :: p -> x -> p -> p

    A function which updates models. If this function is f, then f target amount pattern returns a modified copy of pattern that is more similar to target than pattern is. The magnitude of the adjustment is controlled by the amount parameter, which should be a number between 0 and 1. Larger values for amount permit greater adjustments. If amount=1, the result should be identical to the target. If amount=0, the result should be the unmodified pattern.

Instances

Instances details
(GridMap gm p, k ~ Index (BaseGrid gm p), FiniteGrid (gm p), GridMap gm x, k ~ Index (gm p), k ~ Index (gm x), k ~ Index (BaseGrid gm x), Ord k, Ord x, Num x, Fractional x) => Classifier (DSOM gm) x k p Source # 
Instance details

Defined in Data.Datamining.Clustering.DSOMInternal

Methods

toList :: DSOM gm x k p -> [(k, p)] Source #

numModels :: DSOM gm x k p -> Int Source #

models :: DSOM gm x k p -> [p] Source #

differences :: DSOM gm x k p -> p -> [(k, x)] Source #

classify :: DSOM gm x k p -> p -> k Source #

train :: DSOM gm x k p -> p -> DSOM gm x k p Source #

trainBatch :: DSOM gm x k p -> [p] -> DSOM gm x k p Source #

classifyAndTrain :: DSOM gm x k p -> p -> (k, DSOM gm x k p) Source #

diffAndTrain :: DSOM gm x k p -> p -> ([(k, x)], DSOM gm x k p) Source #

reportAndTrain :: DSOM gm x k p -> p -> (k, [(k, x)], DSOM gm x k p) Source #

Foldable gm => Foldable (DSOM gm x k) Source # 
Instance details

Defined in Data.Datamining.Clustering.DSOMInternal

Methods

fold :: Monoid m => DSOM gm x k m -> m #

foldMap :: Monoid m => (a -> m) -> DSOM gm x k a -> m #

foldMap' :: Monoid m => (a -> m) -> DSOM gm x k a -> m #

foldr :: (a -> b -> b) -> b -> DSOM gm x k a -> b #

foldr' :: (a -> b -> b) -> b -> DSOM gm x k a -> b #

foldl :: (b -> a -> b) -> b -> DSOM gm x k a -> b #

foldl' :: (b -> a -> b) -> b -> DSOM gm x k a -> b #

foldr1 :: (a -> a -> a) -> DSOM gm x k a -> a #

foldl1 :: (a -> a -> a) -> DSOM gm x k a -> a #

toList :: DSOM gm x k a -> [a] #

null :: DSOM gm x k a -> Bool #

length :: DSOM gm x k a -> Int #

elem :: Eq a => a -> DSOM gm x k a -> Bool #

maximum :: Ord a => DSOM gm x k a -> a #

minimum :: Ord a => DSOM gm x k a -> a #

sum :: Num a => DSOM gm x k a -> a #

product :: Num a => DSOM gm x k a -> a #

(Foldable gm, GridMap gm p, FiniteGrid (BaseGrid gm p)) => GridMap (DSOM gm x k) p Source # 
Instance details

Defined in Data.Datamining.Clustering.DSOMInternal

Associated Types

type BaseGrid (DSOM gm x k) p #

Methods

(!) :: (k0 ~ Index (BaseGrid (DSOM gm x k) p), Ord k0) => DSOM gm x k p -> k0 -> p #

toMap :: k0 ~ Index (BaseGrid (DSOM gm x k) p) => DSOM gm x k p -> Map k0 p #

toGrid :: DSOM gm x k p -> BaseGrid (DSOM gm x k) p #

toList :: k0 ~ Index (BaseGrid (DSOM gm x k) p) => DSOM gm x k p -> [(k0, p)] #

lookup :: (k0 ~ Index (BaseGrid (DSOM gm x k) p), Ord k0) => k0 -> DSOM gm x k p -> Maybe p #

insert :: (k0 ~ Index (BaseGrid (DSOM gm x k) p), Ord k0) => k0 -> p -> DSOM gm x k p -> DSOM gm x k p #

insertWith :: (k0 ~ Index (BaseGrid (DSOM gm x k) p), Ord k0) => (p -> p -> p) -> k0 -> p -> DSOM gm x k p -> DSOM gm x k p #

insertWithKey :: (k0 ~ Index (BaseGrid (DSOM gm x k) p), Ord k0) => (k0 -> p -> p -> p) -> k0 -> p -> DSOM gm x k p -> DSOM gm x k p #

insertLookupWithKey :: (k0 ~ Index (BaseGrid (DSOM gm x k) p), Ord k0) => (k0 -> p -> p -> p) -> k0 -> p -> DSOM gm x k p -> (Maybe p, DSOM gm x k p) #

delete :: (k0 ~ Index (BaseGrid (DSOM gm x k) p), Ord k0) => k0 -> DSOM gm x k p -> DSOM gm x k p #

adjust :: (k0 ~ Index (BaseGrid (DSOM gm x k) p), Ord k0) => (p -> p) -> k0 -> DSOM gm x k p -> DSOM gm x k p #

adjustWithKey :: (k0 ~ Index (BaseGrid (DSOM gm x k) p), Ord k0) => (k0 -> p -> p) -> k0 -> DSOM gm x k p -> DSOM gm x k p #

alter :: (k0 ~ Index (BaseGrid (DSOM gm x k) p), Ord k0) => (Maybe p -> Maybe p) -> k0 -> DSOM gm x k p -> DSOM gm x k p #

findWithDefault :: (k0 ~ Index (BaseGrid (DSOM gm x k) p), Ord k0) => p -> k0 -> DSOM gm x k p -> p #

keys :: (k0 ~ Index (BaseGrid (DSOM gm x k) p), Ord k0) => DSOM gm x k p -> [k0] #

elems :: DSOM gm x k p -> [p] #

map :: (GridMap (DSOM gm x k) v2, Index (BaseGrid (DSOM gm x k) p) ~ Index (BaseGrid (DSOM gm x k) v2)) => (p -> v2) -> DSOM gm x k p -> DSOM gm x k v2 #

mapWithKey :: (k0 ~ Index (BaseGrid (DSOM gm x k) p), k0 ~ Index (BaseGrid (DSOM gm x k) v2), GridMap (DSOM gm x k) v2) => (k0 -> p -> v2) -> DSOM gm x k p -> DSOM gm x k v2 #

filter :: (p -> Bool) -> DSOM gm x k p -> DSOM gm x k p #

filterWithKey :: k0 ~ Index (BaseGrid (DSOM gm x k) p) => (k0 -> p -> Bool) -> DSOM gm x k p -> DSOM gm x k p #

Generic (DSOM gm x k p) Source # 
Instance details

Defined in Data.Datamining.Clustering.DSOMInternal

Associated Types

type Rep (DSOM gm x k p) :: Type -> Type #

Methods

from :: DSOM gm x k p -> Rep (DSOM gm x k p) x0 #

to :: Rep (DSOM gm x k p) x0 -> DSOM gm x k p #

NFData (gm p) => NFData (DSOM gm x k p) Source # 
Instance details

Defined in Data.Datamining.Clustering.DSOMInternal

Methods

rnf :: DSOM gm x k p -> () #

Grid (gm p) => Grid (DSOM gm x k p) Source # 
Instance details

Defined in Data.Datamining.Clustering.DSOMInternal

Associated Types

type Index (DSOM gm x k p) #

type Direction (DSOM gm x k p) #

Methods

indices :: DSOM gm x k p -> [Index (DSOM gm x k p)] #

distance :: DSOM gm x k p -> Index (DSOM gm x k p) -> Index (DSOM gm x k p) -> Int #

minDistance :: DSOM gm x k p -> [Index (DSOM gm x k p)] -> Index (DSOM gm x k p) -> Int #

neighbours :: DSOM gm x k p -> Index (DSOM gm x k p) -> [Index (DSOM gm x k p)] #

neighboursOfSet :: DSOM gm x k p -> [Index (DSOM gm x k p)] -> [Index (DSOM gm x k p)] #

neighbour :: DSOM gm x k p -> Index (DSOM gm x k p) -> Direction (DSOM gm x k p) -> Maybe (Index (DSOM gm x k p)) #

numNeighbours :: DSOM gm x k p -> Index (DSOM gm x k p) -> Int #

contains :: DSOM gm x k p -> Index (DSOM gm x k p) -> Bool #

tileCount :: DSOM gm x k p -> Int #

null :: DSOM gm x k p -> Bool #

nonNull :: DSOM gm x k p -> Bool #

edges :: DSOM gm x k p -> [(Index (DSOM gm x k p), Index (DSOM gm x k p))] #

viewpoint :: DSOM gm x k p -> Index (DSOM gm x k p) -> [(Index (DSOM gm x k p), Int)] #

isAdjacent :: DSOM gm x k p -> Index (DSOM gm x k p) -> Index (DSOM gm x k p) -> Bool #

adjacentTilesToward :: DSOM gm x k p -> Index (DSOM gm x k p) -> Index (DSOM gm x k p) -> [Index (DSOM gm x k p)] #

minimalPaths :: DSOM gm x k p -> Index (DSOM gm x k p) -> Index (DSOM gm x k p) -> [[Index (DSOM gm x k p)]] #

directionTo :: DSOM gm x k p -> Index (DSOM gm x k p) -> Index (DSOM gm x k p) -> [Direction (DSOM gm x k p)] #

defaultMinDistance :: DSOM gm x k p -> [Index (DSOM gm x k p)] -> Index (DSOM gm x k p) -> Int #

defaultNeighbours :: DSOM gm x k p -> Index (DSOM gm x k p) -> [Index (DSOM gm x k p)] #

defaultNeighboursOfSet :: DSOM gm x k p -> [Index (DSOM gm x k p)] -> [Index (DSOM gm x k p)] #

defaultNeighbour :: DSOM gm x k p -> Index (DSOM gm x k p) -> Direction (DSOM gm x k p) -> Maybe (Index (DSOM gm x k p)) #

defaultTileCount :: DSOM gm x k p -> Int #

defaultEdges :: DSOM gm x k p -> [(Index (DSOM gm x k p), Index (DSOM gm x k p))] #

defaultIsAdjacent :: DSOM gm x k p -> Index (DSOM gm x k p) -> Index (DSOM gm x k p) -> Bool #

defaultAdjacentTilesToward :: DSOM gm x k p -> Index (DSOM gm x k p) -> Index (DSOM gm x k p) -> [Index (DSOM gm x k p)] #

defaultMinimalPaths :: DSOM gm x k p -> Index (DSOM gm x k p) -> Index (DSOM gm x k p) -> [[Index (DSOM gm x k p)]] #

type BaseGrid (DSOM gm x k) p Source # 
Instance details

Defined in Data.Datamining.Clustering.DSOMInternal

type BaseGrid (DSOM gm x k) p = BaseGrid gm p
type Rep (DSOM gm x k p) Source # 
Instance details

Defined in Data.Datamining.Clustering.DSOMInternal

type Rep (DSOM gm x k p) = D1 ('MetaData "DSOM" "Data.Datamining.Clustering.DSOMInternal" "som-10.1.11-inplace" 'False) (C1 ('MetaCons "DSOM" 'PrefixI 'True) ((S1 ('MetaSel ('Just "gridMap") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (gm p)) :*: S1 ('MetaSel ('Just "learningRate") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (x -> x -> x -> x))) :*: (S1 ('MetaSel ('Just "difference") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (p -> p -> x)) :*: S1 ('MetaSel ('Just "makeSimilar") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (p -> x -> p -> p)))))
type Direction (DSOM gm x k p) Source # 
Instance details

Defined in Data.Datamining.Clustering.DSOMInternal

type Direction (DSOM gm x k p) = Direction (gm p)
type Index (DSOM gm x k p) Source # 
Instance details

Defined in Data.Datamining.Clustering.DSOMInternal

type Index (DSOM gm x k p) = Index (gm p)

withGridMap :: (gm p -> gm p) -> DSOM gm x k p -> DSOM gm x k p Source #

Internal method.

toGridMap :: GridMap gm p => DSOM gm x k p -> gm p Source #

Extracts the grid and current models from the DSOM.

adjustNode :: (FiniteGrid (gm p), GridMap gm p, k ~ Index (gm p), k ~ Index (BaseGrid gm p), Ord k, Num x, Fractional x) => gm p -> (p -> x -> p -> p) -> (p -> p -> x) -> (x -> x -> x) -> p -> k -> k -> p -> p Source #

Internal method.

scaleDistance :: (Num a, Fractional a) => Int -> Int -> a Source #

Internal method.

trainNeighbourhood :: (FiniteGrid (gm p), GridMap gm p, k ~ Index (gm p), k ~ Index (BaseGrid gm p), Ord k, Num x, Fractional x) => DSOM gm x t p -> k -> p -> DSOM gm x k p Source #

Trains the specified node and the neighbourood around it to better match a target. Most users should use train, which automatically determines the BMU and trains it and its neighbourhood.

justTrain :: (FiniteGrid (gm p), GridMap gm p, GridMap gm x, k ~ Index (gm p), k ~ Index (gm x), k ~ Index (BaseGrid gm p), k ~ Index (BaseGrid gm x), Ord k, Ord x, Num x, Fractional x) => DSOM gm x t p -> p -> DSOM gm x k p Source #

Internal method.

rougierLearningFunction :: (Eq a, Ord a, Floating a) => a -> a -> a -> a -> a -> a Source #

Configures a learning function that depends not on the time, but on how good a model we already have for the target. If the BMU is an exact match for the target, no learning occurs. Usage is rougierLearningFunction r p, where r is the maximal learning rate (0 <= r <= 1), and p is the elasticity.

NOTE: When using this learning function, ensure that abs . difference is always between 0 and 1, inclusive. Otherwise you may get invalid learning rates.