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