HLearn-algebra-0.1.1.0: Algebraic foundation for homomorphic learning

Safe HaskellNone

HLearn.Algebra.Functions

Contents

Description

This module contains "low-level higher order functions" for manipulating algebraic homomorphisms. You probably want to use the HomTrainer type-class rather than using these functions directly.

Synopsis

Parallelism

parallelSource

Arguments

:: (Semigroup model, NFData model, Partitionable container, PartitionableConstraint container datapoint) 
=> (container datapoint -> model)

sequential batch trainer

-> container datapoint -> model

parallel batch trainer

Parallelizes any batch trainer to run over multiple processors on a single machine. The function automatically detects the number of available processors and parallelizes the function accordingly. This requires the use of unsafePerformIO, however, the result should still be safe.

Manipulating homomorphisms

onlineSource

Arguments

:: Semigroup model 
=> (datapoint -> model)

singleton trainer

-> model -> datapoint -> model

online trainer

Converts a batch trainer into an online trainer. The input function should be a semigroup homomorphism.

offlineSource

Arguments

:: Monoid model 
=> (model -> datapoint -> model)

online singleton trainer

-> datapoint -> model

singleton trainer

The inverse of online. Converts an online trainer into a batch trainer.

batchSource

Arguments

:: (Monoid model, Functor container, FunctorConstraint container model, FunctorConstraint container datapoint, Foldable container, FoldableConstraint container model) 
=> (datapoint -> model)

singleton trainer

-> container datapoint -> model

batch trainer

Converts a singleton trainer into a batch trainer, which is also a semigroup homomorphism.

unbatchSource

Arguments

:: ([datapoint] -> model)

batch trainer

-> datapoint -> model

singleton trainer

Inverse of unbatch. Converts a semigroup homomorphism into a singleton trainer.

semigroupSource

Arguments

:: (model -> datapoint -> model)

online trainer

-> (model -> datapoint)

pseudo inverse

-> model -> model -> model

The semigroup operation

Normally we would define our semigroup operation explicitly. However, it is possible to generate one from an online trainer and a pseudo inverse.

Helper functions

reduce :: (Semigroup sg, Foldable container, FoldableConstraint container sg, FoldableConstraint container [sg]) => container sg -> sgSource

Like fold, but (i) only for use on the semigroup operation (<>) and (ii) uses the fan-in reduction strategy which is more efficient when the semigroup operation takes nonconstant time depending on the size of the data structures being reduced.