module HLearn.Algebra.Models
(
Model (..)
, DefaultModel (..)
, HomTrainer (..)
, DefaultHomTrainer (..)
)
where
import qualified Control.ConstraintKinds as CK
import HLearn.Algebra.Functions
import HLearn.Algebra.Structures.Groups
import HLearn.Algebra.Structures.Modules
class Model modelparams model | modelparams -> model where
getparams :: model -> modelparams
class (Model modelparams model) => DefaultModel modelparams model | model -> modelparams where
defparams :: modelparams
class
( Semigroup model
, Monoid model
, Model modelparams model
) => HomTrainer modelparams datapoint model
where
train1dp' :: modelparams -> datapoint -> model
train1dp' modelparams = unbatch (train' modelparams)
train' ::
( CK.Functor container
, CK.FunctorConstraint container model
, CK.FunctorConstraint container datapoint
, CK.Foldable container
, CK.FoldableConstraint container model
) => modelparams -> container datapoint -> model
train' modelparams = batch (train1dp' modelparams)
add1dp :: model -> datapoint -> model
add1dp model = online (train1dp' (getparams model :: modelparams)) model
addBatch ::
( CK.Functor container
, CK.FunctorConstraint container model
, CK.FunctorConstraint container datapoint
, CK.Foldable container
, CK.FoldableConstraint container model
) => model -> container datapoint -> model
addBatch model = online (train' (getparams model :: modelparams)) model
instance
( HomTrainer modelparams datapoint model
, LeftOperator r model
) => HomTrainer modelparams (r,datapoint) model where
train1dp' modelparams (r,dp) = r .* (train1dp' modelparams dp)
class
( DefaultModel modelparams model
, HomTrainer modelparams datapoint model
) => DefaultHomTrainer modelparams datapoint model | model -> modelparams
where
train1dp :: datapoint -> model
train1dp = train1dp' (defparams :: modelparams)
train ::
( CK.Functor container
, CK.FunctorConstraint container model
, CK.FunctorConstraint container datapoint
, CK.Foldable container
, CK.FoldableConstraint container model
) => container datapoint -> model
train = train' (defparams :: modelparams)
instance
( DefaultModel modelparams model
, HomTrainer modelparams datapoint model
) => DefaultHomTrainer modelparams datapoint model