private static void checkDegenerate(double[][][] observations, int states)
{
bool thrown = false;
try
{
var density = new MultivariateNormalDistribution(2);
var model = new HiddenMarkovModel<MultivariateNormalDistribution>(new Forward(states), density);
var learning = new BaumWelchLearning<MultivariateNormalDistribution>(model)
{
Tolerance = 0.0001,
Iterations = 0,
};
double logLikelihood = learning.Run(observations);
Assert.AreEqual(0, logLikelihood);
}
catch (NonPositiveDefiniteMatrixException)
{
thrown = true;
}
Assert.IsTrue(thrown);
{
var density = new MultivariateNormalDistribution(2);
var model = new HiddenMarkovModel<MultivariateNormalDistribution>(new Forward(states), density);
var learning = new BaumWelchLearning<MultivariateNormalDistribution>(model)
{
Tolerance = 0.0001,
Iterations = 0,
FittingOptions = new NormalOptions() { Robust = true }
};
double logLikelihood = learning.Run(observations);
Assert.IsFalse(Double.IsNaN(logLikelihood));
foreach (double value in model.Transitions)
Assert.IsFalse(Double.IsNaN(value));
foreach (double value in model.Probabilities)
Assert.IsFalse(Double.IsNaN(value));
}
}