Exemplo n.º 1
0
        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;
        }