public void PushTest() { double[][] sequences; var classifier = createClassifier(out sequences); var running = new RunningMarkovClassifier<NormalDistribution>(classifier); for (int i = 0; i < sequences.Length; i++) { double[] sequence = sequences[i]; running.Clear(); for (int j = 0; j < sequence.Length; j++) running.Push(sequence[j]); double actualLikelihood; int actual = running.Classification; actualLikelihood = Math.Exp(running.Responses[actual]) / running.Responses.Exp().Sum(); double expectedLikelihood; int expected = classifier.Compute(sequence, out expectedLikelihood); Assert.AreEqual(expected, actual); Assert.AreEqual(expectedLikelihood, actualLikelihood, 1e-8); } }
public void PushTest() { int[][] sequences; var classifier = createClassifier(out sequences); var running = new RunningMarkovClassifier(classifier); for (int i = 0; i < sequences.Length; i++) { int[] sequence = sequences[i]; running.Clear(); for (int j = 0; j < sequence.Length; j++) { running.Push(sequence[j]); } double actualLikelihood; int actual = running.Classification; actualLikelihood = Math.Exp(running.Responses[actual]) / running.Responses.Exp().Sum(); double expectedLikelihood; int expected = classifier.Compute(sequence, out expectedLikelihood); Assert.AreEqual(expected, actual); Assert.AreEqual(expectedLikelihood, actualLikelihood, 1e-8); } }
public void PushTest2() { int[][] sequences; var classifier = createClassifier(out sequences, rejection: true); var running = new RunningMarkovClassifier(classifier); for (int i = 0; i < sequences.Length; i++) { int[] sequence = sequences[i]; running.Clear(); for (int j = 0; j < sequence.Length; j++) { running.Push(sequence[j]); } double actualLikelihood; int actual = running.Classification; if (actual > -1) { double sum = running.Responses.Exp().Sum() + Math.Exp(running.Threshold); actualLikelihood = Math.Exp(running.Responses[actual]) / sum; } else { double sum = running.Responses.Exp().Sum(); actualLikelihood = Math.Exp(running.Threshold) / (sum + Math.Exp(running.Threshold)); } double expectedLikelihood; int expected = classifier.Compute(sequence, out expectedLikelihood); Assert.AreEqual(expected, actual); Assert.AreEqual(expectedLikelihood, actualLikelihood, 1e-8); } }
public void PushTest2() { int[][] sequences; var classifier = createClassifier(out sequences, rejection: true); var running = new RunningMarkovClassifier(classifier); for (int i = 0; i < sequences.Length; i++) { int[] sequence = sequences[i]; running.Clear(); for (int j = 0; j < sequence.Length; j++) running.Push(sequence[j]); double actualLikelihood; int actual = running.Classification; if (actual > -1) { double sum = running.Responses.Exp().Sum() + Math.Exp(running.Threshold); actualLikelihood = Math.Exp(running.Responses[actual]) / sum; } else { double sum = running.Responses.Exp().Sum(); actualLikelihood = Math.Exp(running.Threshold) / (sum + Math.Exp(running.Threshold)); } double expectedLikelihood; int expected = classifier.Compute(sequence, out expectedLikelihood); Assert.AreEqual(expected, actual); Assert.AreEqual(expectedLikelihood, actualLikelihood, 1e-8); } }