public void TestBaumWelchMultivariate() { var model = HiddenMarkovModelFactory.GetModel(new ModelCreationParameters <IMultivariateDistribution>() { Pi = _startDistribution, TransitionProbabilityMatrix = _tpm, Emissions = _emissions }); //new HiddenMarkovModelMultivariateGaussianDistribution(_startDistribution, _tpm, _emissions) model.Normalized = false; var algo = new BaumWelchMultivariateDistribution(_observations, model) { Normalized = false }; var res = algo.Run(100, LikelihoodTolerance); Assert.AreEqual(1d, res.Pi.Sum()); Assert.AreEqual(1d, Math.Round(res.TransitionProbabilityMatrix[0].Sum(), 5)); Assert.AreEqual(1d, Math.Round(res.TransitionProbabilityMatrix[1].Sum(), 5)); Assert.AreEqual(1d, Math.Round(res.TransitionProbabilityMatrix[2].Sum(), 5)); }
public void Train(double[][] observations, int numberOfIterations, double likelihoodTolerance) { if (_initialize) { Initialize(observations); } if (_pi == null || _transitionProbabilityMatrix == null || _emission == null) { throw new ApplicationException("Initialize the model with initial valuesss"); } var model = HiddenMarkovModelStateFactory.GetState(new ModelCreationParameters <IMultivariateDistribution> { Pi = _pi, TransitionProbabilityMatrix = _transitionProbabilityMatrix, Emissions = _emission }); //new HiddenMarkovModelState<IMultivariateDistribution>(_pi, _transitionProbabilityMatrix, _emission); model.Normalized = Normalized; var alg = new BaumWelchMultivariateDistribution(Helper.Convert(observations), model); var estimatedParameters = alg.Run(numberOfIterations, likelihoodTolerance); _pi = estimatedParameters.Pi; _transitionProbabilityMatrix = estimatedParameters.TransitionProbabilityMatrix; _emission = estimatedParameters.Emission; Likelihood = estimatedParameters.Likelihood; }