{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE UndecidableInstances #-} module HLearn.Models.Distributions ( module HLearn.Models.Distributions.Common , module HLearn.Models.Distributions.Categorical , module HLearn.Models.Distributions.Gaussian ) where import HLearn.Models.Distributions.Common import HLearn.Models.Distributions.Categorical import HLearn.Models.Distributions.Gaussian -- import HLearn.DataContainers -- import HLearn.Math.TypeClasses import qualified Data.Map as Map import Debug.Trace import Data.List.Extras ------------------------------------------------------------------------------- -- Training -- instance (OnlineTrainer CategoricalParams (Categorical label) datatype label) => -- BatchTrainer CategoricalParams (Categorical label) datatype label -- where -- -- trainBatch = trainOnline -- -- instance (Label label) => EmptyTrainer CategoricalParams (Categorical label) label where -- emptyModel desc modelparams = Categorical Map.empty (Just desc) -- -- instance (Label label) => OnlineTrainer CategoricalParams (Categorical label) datatype label where -- add1dp desc modelparams model dps = return $ add1sample model $ fst dps -- -- ------------------------------------------------------------------------------- -- -- Classification -- -- instance (Label label) => Classifier (Categorical label) datatype label where -- classify model dp = mean model --fst $ argmaxBy compare snd $ probabilityClassify model dp -- -- instance (Label label) => ProbabilityClassifier (Categorical label) datatype label where -- probabilityClassify model dp = model--trace "CategoricalPC" $ -- -- case Map.keys $ pdfmap model of -- -- [] -> trace "WARNING: ProbabilityClassifier: empty Categorical" $ -- -- case desc model of -- -- Nothing -> error "probabilityClassify: empty Categorical and empty DataDesc" -- -- Just desc -> map (\label -> (label,1/(fromIntegral $ numLabels desc))) $ labelL desc -- -- xs -> map (\k -> (k,pdf model k)) xs