Safe Haskell | None |
---|
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.
- parallel :: (Semigroup model, NFData model, Partitionable container, PartitionableConstraint container datapoint) => (container datapoint -> model) -> container datapoint -> model
- online :: Semigroup model => (datapoint -> model) -> model -> datapoint -> model
- offline :: Monoid model => (model -> datapoint -> model) -> datapoint -> model
- batch :: (Monoid model, Functor container, FunctorConstraint container model, FunctorConstraint container datapoint, Foldable container, FoldableConstraint container model) => (datapoint -> model) -> container datapoint -> model
- unbatch :: ([datapoint] -> model) -> datapoint -> model
- semigroup :: (model -> datapoint -> model) -> (model -> datapoint) -> model -> model -> model
- reduce :: (Semigroup sg, Foldable container, FoldableConstraint container sg, FoldableConstraint container [sg]) => container sg -> sg
Parallelism
:: (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
:: 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.
:: Monoid model | |
=> (model -> datapoint -> model) | online singleton trainer |
-> datapoint -> model | singleton trainer |
The inverse of online
. Converts an online trainer into a batch trainer.
:: (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.
:: ([datapoint] -> model) | batch trainer |
-> datapoint -> model | singleton trainer |
Inverse of unbatch
. Converts a semigroup homomorphism into a singleton trainer.
:: (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.