Accord.Tests.Statistics.ViterbiLearningTest.LearnTest2 C# (CSharp) Method

LearnTest2() private method

private LearnTest2 ( ) : void
return void
        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));
        }