HLearn-algebra-0.1.1.0: Algebraic foundation for homomorphic learning

HLearn.Algebra.Functions

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

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

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.

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.

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.

Arguments

 :: ([datapoint] -> model) batch trainer -> datapoint -> model singleton trainer

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

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.