public void TrainAndClassify_SimpleSample_ReturnsCorrectClass()
        {
            var net = new NaiveBayesNormalClassifier<string>(4);

            var a1 = new byte[] { 10, 10, 100, 10 };
            var a2 = new byte[] { 8, 9, 101, 7 };
            var a3 = new byte[] { 8, 12, 99, 11 };
            var a4 = new byte[] { 8, 2, 109, 3 };

            var b1 = new byte[] { 100, 10, 10, 10 };
            var b2 = new byte[] { 95, 8, 12, 11 };
            var b3 = new byte[] { 102, 6, 9, 15 };
            var b4 = new byte[] { 88, 6, 64, 15 };

            net.Train("a", a1);
            net.Train("a", a2);
            net.Train("a", a3);
            net.Train("a", a4);

            net.Train("b", b1);
            net.Train("b", b2);
            net.Train("b", b3);
            net.Train("b", b4);

            var cls1 = net.ClassifyAsBestMatch(new byte[] { 8, 9, 99, 7 });
            var cls2 = net.ClassifyAsBestMatch(new byte[] { 99, 9, 10, 15 });
            var cls3 = net.ClassifyAsBestMatch(new byte[] { 50, 9, 60, 15 });

            Assert.That(cls1.ClassType, Is.EqualTo("a"));
            Assert.That(cls2.ClassType, Is.EqualTo("b"));
            Assert.That(cls3.ClassType, Is.EqualTo("b"));
        }
        public void TrainAndClassify_HighVariance_ReturnsCorrectClass()
        {
            var net = new NaiveBayesNormalClassifier<string>(4);

            var a1 = new byte[] { 5, 5, 99, 9 };
            var a2 = new byte[] { 4, 4, 100, 90 };

            var b1 = new byte[] { 5, 5, 99, 50 };
            var b2 = new byte[] { 4, 4, 100, 49 };

            net.Train("a", a1);
            net.Train("a", a2);

            net.Train("b", b1);
            net.Train("b", b2);

            var cls1 = net.ClassifyAsBestMatch(new byte[] { 5, 4, 99, 49 });

            Assert.That(cls1.ClassType, Is.EqualTo("b"));
            Assert.That(cls1.Score, Is.GreaterThan(0));
        }
        public void TrainAndClassify_NoVariance_ReturnsCorrectClass()
        {
            var net = new NaiveBayesNormalClassifier<string>(4);

            var a1 = new byte[] { 10, 1, 99, 0 };
            var a2 = new byte[] { 10, 1, 100, 0 };

            var b1 = new byte[] { 10, 1, 0, 0 };
            var b2 = new byte[] { 10, 2, 100, 0 };

            net.Train("a", a1);
            net.Train("a", a2);

            net.Train("b", b1);
            net.Train("b", b2);

            var cls1 = net.ClassifyAsBestMatch(new byte[] { 9, 3, 99, 0 });
            var cls2 = net.ClassifyAsBestMatch(new byte[] { 9, 3, 40, 0 });

            Assert.That(cls1.ClassType, Is.EqualTo("a"));
            Assert.That(cls2.ClassType, Is.EqualTo("b"));
        }