public void LearnTest2()
{
Accord.Math.Tools.SetupGenerator(0);
int[][] sequences = new int[500][];
for (int i = 0; i < sequences.Length; i++)
{
sequences[i] = new int[Accord.Math.Tools.Random.Next(20, 80)];
int start = Accord.Math.Tools.Random.Next();
for (int j = 0; j < sequences[i].Length; j++)
{
double s = Math.Sin(j + start);
double u = ((s + 1) / 2.0);
sequences[i][j] = (int)(u * 10);
}
}
HiddenMarkovModel hmm1;
double ll1;
{
Accord.Math.Tools.SetupGenerator(0);
hmm1 = new HiddenMarkovModel(10, 10, true);
var teacher = new ViterbiLearning(hmm1)
{
Iterations = 1,
Tolerance = 1e-15,
Batches = 1,
UseLaplaceRule = true
};
ll1 = teacher.Run(sequences);
}
HiddenMarkovModel hmm10;
double ll10;
{
Accord.Math.Tools.SetupGenerator(0);
hmm10 = new HiddenMarkovModel(10, 10, true);
var teacher = new ViterbiLearning(hmm10)
{
Iterations = 100,
Tolerance = 1e-15,
Batches = 1,
UseLaplaceRule = true
};
ll10 = teacher.Run(sequences);
}
Assert.IsTrue(ll10 > ll1);
Assert.IsTrue(Math.Abs(ll1 - ll10) > 10);
// Those results must match the ones in ViterbiLearningTest`1.
Assert.AreEqual(-33.834836461044411, ll1);
Assert.AreEqual(-23.362967205628703, ll10);
Assert.IsFalse(AreEqual(hmm1, hmm10));
}