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 <Mixture <IMultivariateDistribution> > { Pi = _pi, TransitionProbabilityMatrix = _transitionProbabilityMatrix, Emissions = _emission }); //new HiddenMarkovModelState<Mixture<IMultivariateDistribution>>(_pi, _transitionProbabilityMatrix, _emission); model.Normalized = Normalized; var alg = new BaumWelchWeightedMixtureDistribution(Helper.Convert(observations), TimeSensitiveWeightCalculator.Calculate(7, observations.Length), model); var estimatedParameters = alg.Run(numberOfIterations, likelihoodTolerance); _pi = estimatedParameters.Pi; _transitionProbabilityMatrix = estimatedParameters.TransitionProbabilityMatrix; _emission = estimatedParameters.Emission; Likelihood = estimatedParameters.Likelihood; }
public void Calculate_kIs3Tis6_EMAFrom3To4() { var k = 3; var T = 6; var r = 2d / (k + 1); var result = TimeSensitiveWeightCalculator.Calculate(k, T); Assert.AreEqual(result[3], r * Math.Pow(1 - r, T - 3)); Assert.AreEqual(result[4], r * Math.Pow(1 - r, T - 4)); }
public void Calculate_kIs3Tis5_EMAFrom1To3() { var k = 3; var T = 5; var r = 2d / (k + 1); var result = TimeSensitiveWeightCalculator.Calculate(k, T); Assert.AreEqual(result[0], Math.Pow(1 - r, T - k) * (1d / k)); Assert.AreEqual(result[1], Math.Pow(1 - r, T - k) * (1d / k)); Assert.AreEqual(result[2], Math.Pow(1 - r, T - k) * (1d / k)); }
public void Run_TrainingSetAndModel_TrainedModel() { var util = new TestDataUtils(); var observationArray = util.GetSvcData(util.FTSEFilePath, new DateTime(2010, 12, 18), new DateTime(2011, 12, 18)); var observations = Helper.Convert(observationArray); var observationsWeight = Array.ConvertAll(TimeSensitiveWeightCalculator.Calculate(14, observations.Count), x => (decimal)x); Initialize(observationArray); var model = HiddenMarkovModelFactory.GetModel(new ModelCreationParameters <Mixture <IMultivariateDistribution> >() { Pi = _pi, TransitionProbabilityMatrix = _tpm, Emissions = _emission }); model.Normalized = true; var algo = new BaumWelchWeightedMixtureDistribution(observations, observationsWeight, model); var trainedModelState = algo.Run(MaxIterationNumber, LikelihoodTolerance); Assert.AreEqual(1d, Math.Round(trainedModelState.Pi.Sum(), 5)); Assert.AreEqual(1d, Math.Round(trainedModelState.TransitionProbabilityMatrix[0].Sum(), 5)); Assert.AreEqual(1d, Math.Round(trainedModelState.TransitionProbabilityMatrix[1].Sum(), 5)); Assert.AreEqual(1d, Math.Round(trainedModelState.TransitionProbabilityMatrix[2].Sum(), 5)); }
public void Calculate_kIs5Tis5_EMA5isRo() { var result = TimeSensitiveWeightCalculator.Calculate(5, 5); Assert.AreEqual(result[4], 2d / (1d + 5d)); }