hmm-hmatrix 0.0.2 → 0.1
raw patch · 6 files changed
+27/−31 lines, 6 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- Math.HiddenMarkovModel: [distribution] :: T distr prob -> distr
- Math.HiddenMarkovModel: [initial] :: T distr prob -> Vector prob
- Math.HiddenMarkovModel: [trainedDistribution] :: Trained distr prob -> distr
- Math.HiddenMarkovModel: [trainedInitial] :: Trained distr prob -> Vector prob
- Math.HiddenMarkovModel: [trainedTransition] :: Trained distr prob -> Matrix prob
- Math.HiddenMarkovModel: [transition] :: T distr prob -> Matrix prob
- Math.HiddenMarkovModel.Distribution: instance (Control.DeepSeq.NFData a, Foreign.Storable.Storable a) => Control.DeepSeq.NFData (Math.HiddenMarkovModel.Distribution.Gaussian a)
- Math.HiddenMarkovModel.Distribution: instance (Control.DeepSeq.NFData a, Foreign.Storable.Storable a) => Control.DeepSeq.NFData (Math.HiddenMarkovModel.Distribution.GaussianTrained a)
- Math.HiddenMarkovModel.Distribution: instance (Control.DeepSeq.NFData prob, Control.DeepSeq.NFData symbol) => Control.DeepSeq.NFData (Math.HiddenMarkovModel.Distribution.Discrete prob symbol)
- Math.HiddenMarkovModel.Distribution: instance (Control.DeepSeq.NFData prob, Control.DeepSeq.NFData symbol) => Control.DeepSeq.NFData (Math.HiddenMarkovModel.Distribution.DiscreteTrained prob symbol)
- Math.HiddenMarkovModel.Distribution: instance (Data.Packed.Internal.Numeric.Container Data.Vector.Storable.Vector prob, Data.Packed.Internal.Numeric.Product prob, GHC.Classes.Ord symbol) => Math.HiddenMarkovModel.Distribution.EmissionProb (Math.HiddenMarkovModel.Distribution.Discrete prob symbol)
- Math.HiddenMarkovModel.Distribution: instance (Data.Packed.Internal.Numeric.Container Data.Vector.Storable.Vector prob, Data.Packed.Internal.Numeric.Product prob, GHC.Classes.Ord symbol) => Math.HiddenMarkovModel.Distribution.Estimate (Math.HiddenMarkovModel.Distribution.DiscreteTrained prob symbol)
- Math.HiddenMarkovModel.Distribution: instance (Data.Packed.Internal.Numeric.Container Data.Vector.Storable.Vector prob, Data.Packed.Internal.Numeric.Product prob, GHC.Classes.Ord symbol) => Math.HiddenMarkovModel.Distribution.Info (Math.HiddenMarkovModel.Distribution.Discrete prob symbol)
- Math.HiddenMarkovModel.Distribution: instance (Data.Packed.Internal.Numeric.Container Data.Vector.Storable.Vector prob, Data.Packed.Internal.Numeric.Product prob, GHC.Classes.Ord symbol, GHC.Classes.Ord prob, System.Random.Random prob) => Math.HiddenMarkovModel.Distribution.Generate (Math.HiddenMarkovModel.Distribution.Discrete prob symbol)
- Math.HiddenMarkovModel.Distribution: instance (Data.Packed.Numeric.Numeric a, Numeric.LinearAlgebra.Algorithms.Field a) => Math.HiddenMarkovModel.Distribution.EmissionProb (Math.HiddenMarkovModel.Distribution.Gaussian a)
- Math.HiddenMarkovModel.Distribution: instance (Data.Packed.Numeric.Numeric a, Numeric.LinearAlgebra.Algorithms.Field a) => Math.HiddenMarkovModel.Distribution.Estimate (Math.HiddenMarkovModel.Distribution.GaussianTrained a)
- Math.HiddenMarkovModel.Distribution: instance (GHC.Show.Show a, Data.Packed.Internal.Matrix.Element a) => GHC.Show.Show (Math.HiddenMarkovModel.Distribution.Gaussian a)
- Math.HiddenMarkovModel.Distribution: instance (GHC.Show.Show a, Data.Packed.Internal.Matrix.Element a) => GHC.Show.Show (Math.HiddenMarkovModel.Distribution.GaussianTrained a)
- Math.HiddenMarkovModel.Distribution: instance (GHC.Show.Show prob, GHC.Show.Show symbol, Foreign.Storable.Storable prob) => GHC.Show.Show (Math.HiddenMarkovModel.Distribution.Discrete prob symbol)
- Math.HiddenMarkovModel.Distribution: instance (GHC.Show.Show prob, GHC.Show.Show symbol, Foreign.Storable.Storable prob) => GHC.Show.Show (Math.HiddenMarkovModel.Distribution.DiscreteTrained prob symbol)
- Math.HiddenMarkovModel.Distribution: instance (Numeric.LinearAlgebra.Algorithms.Field a, GHC.Classes.Eq a, GHC.Show.Show a, GHC.Read.Read a) => Math.HiddenMarkovModel.Distribution.CSV (Math.HiddenMarkovModel.Distribution.Gaussian a)
- Math.HiddenMarkovModel.Distribution: instance (Numeric.LinearAlgebra.Algorithms.Field prob, GHC.Show.Show prob, GHC.Read.Read prob, Math.HiddenMarkovModel.Distribution.CSVSymbol symbol) => Math.HiddenMarkovModel.Distribution.CSV (Math.HiddenMarkovModel.Distribution.Discrete prob symbol)
- Math.HiddenMarkovModel.Distribution: instance Control.DeepSeq.NFData Math.HiddenMarkovModel.Distribution.State
- Math.HiddenMarkovModel.Distribution: instance GHC.Arr.Ix Math.HiddenMarkovModel.Distribution.State
- Math.HiddenMarkovModel.Distribution: instance GHC.Classes.Eq Math.HiddenMarkovModel.Distribution.State
- Math.HiddenMarkovModel.Distribution: instance GHC.Classes.Ord Math.HiddenMarkovModel.Distribution.State
- Math.HiddenMarkovModel.Distribution: instance GHC.Enum.Enum Math.HiddenMarkovModel.Distribution.State
- Math.HiddenMarkovModel.Distribution: instance GHC.Read.Read Math.HiddenMarkovModel.Distribution.State
- Math.HiddenMarkovModel.Distribution: instance GHC.Show.Show Math.HiddenMarkovModel.Distribution.State
- Math.HiddenMarkovModel.Distribution: instance Math.HiddenMarkovModel.Distribution.CSVSymbol GHC.Types.Char
- Math.HiddenMarkovModel.Distribution: instance Math.HiddenMarkovModel.Distribution.CSVSymbol GHC.Types.Int
- Math.HiddenMarkovModel.Distribution: instance Numeric.LinearAlgebra.Algorithms.Field a => Math.HiddenMarkovModel.Distribution.Generate (Math.HiddenMarkovModel.Distribution.Gaussian a)
- Math.HiddenMarkovModel.Distribution: instance Numeric.LinearAlgebra.Algorithms.Field a => Math.HiddenMarkovModel.Distribution.Info (Math.HiddenMarkovModel.Distribution.Gaussian a)
- Math.HiddenMarkovModel.Example.TrafficLight: instance GHC.Classes.Eq Math.HiddenMarkovModel.Example.TrafficLight.Color
- Math.HiddenMarkovModel.Example.TrafficLight: instance GHC.Classes.Ord Math.HiddenMarkovModel.Example.TrafficLight.Color
- Math.HiddenMarkovModel.Example.TrafficLight: instance GHC.Enum.Enum Math.HiddenMarkovModel.Example.TrafficLight.Color
- Math.HiddenMarkovModel.Example.TrafficLight: instance GHC.Read.Read Math.HiddenMarkovModel.Example.TrafficLight.Color
- Math.HiddenMarkovModel.Example.TrafficLight: instance GHC.Show.Show Math.HiddenMarkovModel.Example.TrafficLight.Color
- Math.HiddenMarkovModel.Example.TrafficLight: instance Math.HiddenMarkovModel.Distribution.CSVSymbol Math.HiddenMarkovModel.Example.TrafficLight.Color
- Math.HiddenMarkovModel.Named: [model] :: T distr prob -> T distr prob
- Math.HiddenMarkovModel.Named: [nameFromStateMap] :: T distr prob -> Map State String
- Math.HiddenMarkovModel.Named: [stateFromNameMap] :: T distr prob -> Map String State
- Math.HiddenMarkovModel.Named: instance (Control.DeepSeq.NFData distr, Control.DeepSeq.NFData prob, Foreign.Storable.Storable prob) => Control.DeepSeq.NFData (Math.HiddenMarkovModel.Named.T distr prob)
- Math.HiddenMarkovModel.Named: instance (GHC.Read.Read distr, GHC.Read.Read prob, Data.Packed.Internal.Matrix.Element prob) => GHC.Read.Read (Math.HiddenMarkovModel.Named.T distr prob)
- Math.HiddenMarkovModel.Named: instance (GHC.Show.Show distr, GHC.Show.Show prob, Data.Packed.Internal.Matrix.Element prob) => GHC.Show.Show (Math.HiddenMarkovModel.Named.T distr prob)
- Math.HiddenMarkovModel.Pattern: instance Numeric.LinearAlgebra.Algorithms.Field prob => Data.Semigroup.Semigroup (Math.HiddenMarkovModel.Pattern.T prob)
+ Math.HiddenMarkovModel: distribution :: T distr prob -> distr
+ Math.HiddenMarkovModel: initial :: T distr prob -> Vector prob
+ Math.HiddenMarkovModel: trainedDistribution :: Trained distr prob -> distr
+ Math.HiddenMarkovModel: trainedInitial :: Trained distr prob -> Vector prob
+ Math.HiddenMarkovModel: trainedTransition :: Trained distr prob -> Matrix prob
+ Math.HiddenMarkovModel: transition :: T distr prob -> Matrix prob
+ Math.HiddenMarkovModel.Distribution: instance (Container Vector prob, Product prob, Ord symbol) => EmissionProb (Discrete prob symbol)
+ Math.HiddenMarkovModel.Distribution: instance (Container Vector prob, Product prob, Ord symbol) => Estimate (DiscreteTrained prob symbol) (Discrete prob symbol)
+ Math.HiddenMarkovModel.Distribution: instance (Container Vector prob, Product prob, Ord symbol) => Info (Discrete prob symbol)
+ Math.HiddenMarkovModel.Distribution: instance (Container Vector prob, Product prob, Ord symbol, Ord prob, Random prob) => Generate (Discrete prob symbol)
+ Math.HiddenMarkovModel.Distribution: instance (Field a, Eq a, Show a, Read a) => CSV (Gaussian a)
+ Math.HiddenMarkovModel.Distribution: instance (Field prob, Show prob, Read prob, CSVSymbol symbol) => CSV (Discrete prob symbol)
+ Math.HiddenMarkovModel.Distribution: instance (NFData a, Storable a) => NFData (Gaussian a)
+ Math.HiddenMarkovModel.Distribution: instance (NFData a, Storable a) => NFData (GaussianTrained a)
+ Math.HiddenMarkovModel.Distribution: instance (NFData prob, NFData symbol) => NFData (Discrete prob symbol)
+ Math.HiddenMarkovModel.Distribution: instance (NFData prob, NFData symbol) => NFData (DiscreteTrained prob symbol)
+ Math.HiddenMarkovModel.Distribution: instance (Numeric a, Field a) => EmissionProb (Gaussian a)
+ Math.HiddenMarkovModel.Distribution: instance (Numeric a, Field a) => Estimate (GaussianTrained a) (Gaussian a)
+ Math.HiddenMarkovModel.Distribution: instance (Show a, Element a) => Show (Gaussian a)
+ Math.HiddenMarkovModel.Distribution: instance (Show a, Element a) => Show (GaussianTrained a)
+ Math.HiddenMarkovModel.Distribution: instance (Show prob, Show symbol, Storable prob) => Show (Discrete prob symbol)
+ Math.HiddenMarkovModel.Distribution: instance (Show prob, Show symbol, Storable prob) => Show (DiscreteTrained prob symbol)
+ Math.HiddenMarkovModel.Distribution: instance CSVSymbol Char
+ Math.HiddenMarkovModel.Distribution: instance CSVSymbol Int
+ Math.HiddenMarkovModel.Distribution: instance Enum State
+ Math.HiddenMarkovModel.Distribution: instance Eq State
+ Math.HiddenMarkovModel.Distribution: instance Field a => Generate (Gaussian a)
+ Math.HiddenMarkovModel.Distribution: instance Field a => Info (Gaussian a)
+ Math.HiddenMarkovModel.Distribution: instance Ix State
+ Math.HiddenMarkovModel.Distribution: instance NFData State
+ Math.HiddenMarkovModel.Distribution: instance Ord State
+ Math.HiddenMarkovModel.Distribution: instance Read State
+ Math.HiddenMarkovModel.Distribution: instance Show State
+ Math.HiddenMarkovModel.Example.TrafficLight: instance CSVSymbol Color
+ Math.HiddenMarkovModel.Example.TrafficLight: instance Enum Color
+ Math.HiddenMarkovModel.Example.TrafficLight: instance Eq Color
+ Math.HiddenMarkovModel.Example.TrafficLight: instance Ord Color
+ Math.HiddenMarkovModel.Example.TrafficLight: instance Read Color
+ Math.HiddenMarkovModel.Example.TrafficLight: instance Show Color
+ Math.HiddenMarkovModel.Named: instance (NFData distr, NFData prob, Storable prob) => NFData (T distr prob)
+ Math.HiddenMarkovModel.Named: instance (Read distr, Read prob, Element prob) => Read (T distr prob)
+ Math.HiddenMarkovModel.Named: instance (Show distr, Show prob, Element prob) => Show (T distr prob)
+ Math.HiddenMarkovModel.Named: model :: T distr prob -> T distr prob
+ Math.HiddenMarkovModel.Named: nameFromStateMap :: T distr prob -> Map State String
+ Math.HiddenMarkovModel.Named: stateFromNameMap :: T distr prob -> Map String State
+ Math.HiddenMarkovModel.Pattern: instance Field prob => Semigroup (T prob)
- Math.HiddenMarkovModel: finishTraining :: (Estimate tdistr, Distribution tdistr ~ distr, Trained distr ~ tdistr, Probability distr ~ prob) => Trained tdistr prob -> T distr prob
+ Math.HiddenMarkovModel: finishTraining :: (Estimate tdistr distr, Probability distr ~ prob) => Trained tdistr prob -> T distr prob
- Math.HiddenMarkovModel: mergeTrained :: (Estimate tdistr, Distribution tdistr ~ distr, Trained distr ~ tdistr, Probability distr ~ prob) => Trained tdistr prob -> Trained tdistr prob -> Trained tdistr prob
+ Math.HiddenMarkovModel: mergeTrained :: (Estimate tdistr distr, Probability distr ~ prob) => Trained tdistr prob -> Trained tdistr prob -> Trained tdistr prob
- Math.HiddenMarkovModel: trainMany :: (Estimate tdistr, Distribution tdistr ~ distr, Trained distr ~ tdistr, Probability distr ~ prob, Foldable f) => (trainingData -> Trained tdistr prob) -> T f trainingData -> T distr prob
+ Math.HiddenMarkovModel: trainMany :: (Estimate tdistr distr, Probability distr ~ prob, Foldable f) => (trainingData -> Trained tdistr prob) -> T f trainingData -> T distr prob
- Math.HiddenMarkovModel: trainSupervised :: (Estimate tdistr, Distribution tdistr ~ distr, Trained distr ~ tdistr, Probability distr ~ prob, Emission distr ~ emission) => Int -> T [] (State, emission) -> Trained tdistr prob
+ Math.HiddenMarkovModel: trainSupervised :: (Estimate tdistr distr, Probability distr ~ prob, Emission distr ~ emission) => Int -> T [] (State, emission) -> Trained tdistr prob
- Math.HiddenMarkovModel: trainUnsupervised :: (Estimate tdistr, Distribution tdistr ~ distr, Trained distr ~ tdistr, Probability distr ~ prob, Emission distr ~ emission) => T distr prob -> T [] emission -> Trained tdistr prob
+ Math.HiddenMarkovModel: trainUnsupervised :: (Estimate tdistr distr, Probability distr ~ prob, Emission distr ~ emission) => T distr prob -> T [] emission -> Trained tdistr prob
- Math.HiddenMarkovModel.Distribution: accumulateEmissions :: (Estimate tdistr, Distribution tdistr ~ distr, Probability distr ~ prob) => [[(Emission distr, prob)]] -> tdistr
+ Math.HiddenMarkovModel.Distribution: accumulateEmissions :: (Estimate tdistr distr, Probability distr ~ prob) => [[(Emission distr, prob)]] -> tdistr
- Math.HiddenMarkovModel.Distribution: class (Ord symbol) => CSVSymbol symbol
+ Math.HiddenMarkovModel.Distribution: class Ord symbol => CSVSymbol symbol
- Math.HiddenMarkovModel.Distribution: class (EmissionProb (Distribution tdistr), Trained (Distribution tdistr) ~ tdistr) => Estimate tdistr where type family Distribution tdistr
+ Math.HiddenMarkovModel.Distribution: class (Distribution tdistr ~ distr, Trained distr ~ tdistr, EmissionProb distr) => Estimate tdistr distr where type family Distribution tdistr type family Trained distr
- Math.HiddenMarkovModel.Distribution: combine :: Estimate tdistr => tdistr -> tdistr -> tdistr
+ Math.HiddenMarkovModel.Distribution: combine :: Estimate tdistr distr => tdistr -> tdistr -> tdistr
- Math.HiddenMarkovModel.Distribution: gaussian :: (Field prob) => [(Vector prob, Matrix prob)] -> Gaussian prob
+ Math.HiddenMarkovModel.Distribution: gaussian :: Field prob => [(Vector prob, Matrix prob)] -> Gaussian prob
- Math.HiddenMarkovModel.Distribution: normalize :: (Estimate tdistr, Distribution tdistr ~ distr) => tdistr -> distr
+ Math.HiddenMarkovModel.Distribution: normalize :: Estimate tdistr distr => tdistr -> distr
- Math.HiddenMarkovModel.Pattern: append :: (Container Vector prob) => T prob -> T prob -> T prob
+ Math.HiddenMarkovModel.Pattern: append :: Container Vector prob => T prob -> T prob -> T prob
- Math.HiddenMarkovModel.Pattern: atom :: (Container Vector prob) => State -> T prob
+ Math.HiddenMarkovModel.Pattern: atom :: Container Vector prob => State -> T prob
- Math.HiddenMarkovModel.Pattern: finish :: (Container Vector prob) => Int -> tdistr -> T prob -> Trained tdistr prob
+ Math.HiddenMarkovModel.Pattern: finish :: Container Vector prob => Int -> tdistr -> T prob -> Trained tdistr prob
- Math.HiddenMarkovModel.Pattern: replicate :: (Container Vector prob) => Int -> T prob -> T prob
+ Math.HiddenMarkovModel.Pattern: replicate :: Container Vector prob => Int -> T prob -> T prob
Files
- Changes.md +3/−0
- hmm-hmatrix.cabal +4/−2
- src/Math/HiddenMarkovModel.hs +3/−6
- src/Math/HiddenMarkovModel/Distribution.hs +13/−14
- src/Math/HiddenMarkovModel/Normalized.hs +1/−2
- src/Math/HiddenMarkovModel/Private.hs +3/−7
+ Changes.md view
@@ -0,0 +1,3 @@+## 0.1++* `Distribution.Estimate` turned into a multi-parameter type class.
hmm-hmatrix.cabal view
@@ -1,5 +1,5 @@ Name: hmm-hmatrix-Version: 0.0.2+Version: 0.1 Synopsis: Hidden Markov Models using HMatrix primitives Description: Hidden Markov Models implemented using HMatrix data types and operations.@@ -37,9 +37,11 @@ Category: Math Build-Type: Simple Cabal-Version: >=1.10+Extra-Source-Files:+ Changes.md Source-Repository this- Tag: 0.0.2+ Tag: 0.1 Type: darcs Location: http://hub.darcs.net/thielema/hmm-hmatrix
src/Math/HiddenMarkovModel.hs view
@@ -116,8 +116,7 @@ Contribute a manually labeled emission sequence to a HMM training. -} trainSupervised ::- (Distr.Estimate tdistr, Distr.Distribution tdistr ~ distr,- Distr.Trained distr ~ tdistr,+ (Distr.Estimate tdistr distr, Distr.Probability distr ~ prob, Distr.Emission distr ~ emission) => Int -> NonEmpty.T [] (State, emission) -> Trained tdistr prob trainSupervised n xs =@@ -133,8 +132,7 @@ } finishTraining ::- (Distr.Estimate tdistr, Distr.Distribution tdistr ~ distr,- Distr.Trained distr ~ tdistr, Distr.Probability distr ~ prob) =>+ (Distr.Estimate tdistr distr, Distr.Probability distr ~ prob) => Trained tdistr prob -> T distr prob finishTraining hmm = Cons {@@ -146,8 +144,7 @@ } trainMany ::- (Distr.Estimate tdistr, Distr.Distribution tdistr ~ distr,- Distr.Trained distr ~ tdistr, Distr.Probability distr ~ prob,+ (Distr.Estimate tdistr distr, Distr.Probability distr ~ prob, Foldable f) => (trainingData -> Trained tdistr prob) -> NonEmpty.T f trainingData -> T distr prob
src/Math/HiddenMarkovModel/Distribution.hs view
@@ -1,8 +1,9 @@ {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE MultiParamTypeClasses #-} module Math.HiddenMarkovModel.Distribution ( State(..),- Emission, Probability, Trained,+ Emission, Probability, Info(..), Generate(..), EmissionProb(..), Estimate(..), Discrete(..), DiscreteTrained(..),@@ -62,7 +63,6 @@ type family Probability distr type family Emission distr-type family Trained distr class@@ -89,16 +89,15 @@ emissionStateProb distr e (State s) = NC.atIndex (emissionProb distr e) s class- (EmissionProb (Distribution tdistr),- Trained (Distribution tdistr) ~ tdistr) =>- Estimate tdistr where+ (Distribution tdistr ~ distr, Trained distr ~ tdistr, EmissionProb distr) =>+ Estimate tdistr distr where type Distribution tdistr+ type Trained distr accumulateEmissions ::- (Distribution tdistr ~ distr, Probability distr ~ prob) =>- [[(Emission distr, prob)]] -> tdistr+ (Probability distr ~ prob) => [[(Emission distr, prob)]] -> tdistr -- could as well be in Semigroup class combine :: tdistr -> tdistr -> tdistr- normalize :: (Distribution tdistr ~ distr) => tdistr -> distr+ normalize :: tdistr -> distr @@ -111,9 +110,7 @@ type instance Probability (Discrete prob symbol) = prob type instance Emission (Discrete prob symbol) = symbol -type instance Trained (Discrete prob symbol) = DiscreteTrained prob symbol - instance (NFData prob, NFData symbol) => NFData (Discrete prob symbol) where rnf (Discrete m) = rnf m @@ -142,8 +139,9 @@ instance (NC.Container Vector prob, NC.Product prob, Ord symbol) =>- Estimate (DiscreteTrained prob symbol) where+ Estimate (DiscreteTrained prob symbol) (Discrete prob symbol) where type Distribution (DiscreteTrained prob symbol) = Discrete prob symbol+ type Trained (Discrete prob symbol) = DiscreteTrained prob symbol accumulateEmissions grouped = let set = Set.toAscList $ foldMap (Set.fromList . map fst) grouped emi = Map.fromAscList $ zip set [0..]@@ -178,9 +176,7 @@ type instance Probability (Gaussian a) = a type instance Emission (Gaussian a) = Vector a -type instance Trained (Gaussian a) = GaussianTrained a - instance (NFData a, Storable a) => NFData (Gaussian a) where rnf (Gaussian params) = rnf params @@ -216,8 +212,11 @@ in c * exp ((-1/2) * NC.dot x0 (cholSolve covarianceChol x0)) -instance (HMatrix.Numeric a, Algo.Field a) => Estimate (GaussianTrained a) where+instance+ (HMatrix.Numeric a, Algo.Field a) =>+ Estimate (GaussianTrained a) (Gaussian a) where type Distribution (GaussianTrained a) = Gaussian a+ type Trained (Gaussian a) = GaussianTrained a accumulateEmissions = let params xs = let center =
src/Math/HiddenMarkovModel/Normalized.hs view
@@ -151,8 +151,7 @@ This is done by the Baum-Welch algorithm. -} trainUnsupervised ::- (Distr.Estimate tdistr, Distr.Distribution tdistr ~ distr,- Distr.Trained distr ~ tdistr,+ (Distr.Estimate tdistr distr, Distr.Probability distr ~ prob, Distr.Emission distr ~ emission) => T distr prob -> NonEmpty.T [] emission -> Trained tdistr prob trainUnsupervised hmm xs =
src/Math/HiddenMarkovModel/Private.hs view
@@ -231,14 +231,12 @@ T distr e -> [Matrix e] -> Matrix e sumTransitions hmm = List.foldl' NC.add (NC.konst 0 $ LinAlg.size $ transition hmm)--- zero = uncurry LinAlg.zeros $ LinAlg.size $ transition hmm {- | Baum-Welch algorithm -} trainUnsupervised ::- (Distr.Estimate tdistr, Distr.Distribution tdistr ~ distr,- Distr.Trained distr ~ tdistr,+ (Distr.Estimate tdistr distr, Distr.Probability distr ~ prob, Distr.Emission distr ~ emission) => T distr prob -> NonEmpty.T [] emission -> Trained tdistr prob trainUnsupervised hmm xs =@@ -257,8 +255,7 @@ mergeTrained ::- (Distr.Estimate tdistr, Distr.Distribution tdistr ~ distr,- Distr.Trained distr ~ tdistr, Distr.Probability distr ~ prob) =>+ (Distr.Estimate tdistr distr, Distr.Probability distr ~ prob) => Trained tdistr prob -> Trained tdistr prob -> Trained tdistr prob mergeTrained hmm0 hmm1 = Trained {@@ -271,8 +268,7 @@ } instance- (Distr.Estimate tdistr, Distr.Distribution tdistr ~ distr,- Distr.Probability distr ~ prob) =>+ (Distr.Estimate tdistr distr, Distr.Probability distr ~ prob) => Sg.Semigroup (Trained tdistr prob) where (<>) = mergeTrained