示例#1
0
        public void MultinomialPartDistribution_MaximumLikelihood_FromClassifiedSample_UseSmoothing()
        {
            // arrange
            var sample = new ClassifiedSample <double[]>
            {
                { new[] { 1.0D, 2.0D, 0.0D }, new Class("A", 0) },
                { new[] { 3.0D, 0.0D, 2.0D }, new Class("A", 0) },
                { new[] { 0.0D, 3.0D, 1.0D }, new Class("B", 1) },
                { new[] { 0.0D, 2.0D, 0.0D }, new Class("B", 1) },
                { new[] { 0.0D, 2.0D, 2.0D }, new Class("B", 1) },
            };
            var n     = 3; // sample[i].Key.Length - the length of the word dictionary
            var distr = new MultinomialPartDistribution {
                N = n, UseSmoothing = true, Alpha = 2
            };

            // act
            var res = distr.FromSample(sample);
            var dA1 = res[0][0];
            var dA2 = res[0][1];
            var dA3 = res[0][2];
            var dB1 = res[1][0];
            var dB2 = res[1][1];
            var dB3 = res[1][2];

            // assert
            Assert.AreEqual(6.0D / 14, dA1.P, EPS);
            Assert.AreEqual(4.0D / 14, dA2.P, EPS);
            Assert.AreEqual(4.0D / 14, dA3.P, EPS);
            Assert.AreEqual(2.0D / 16, dB1.P, EPS);
            Assert.AreEqual(9.0D / 16, dB2.P, EPS);
            Assert.AreEqual(5.0D / 16, dB3.P, EPS);
        }
示例#2
0
        public void MultinomialPartDistribution_MaximumLikelihood_FromSample()
        {
            // arrange
            var distr = new MultinomialPartDistribution {
                TotalCount = 10
            };
            var sample = new[] { 2.0D, 1.0D, 0.0D, 3.0D };

            // act
            distr.FromSample(sample);
            var pars = distr.Params;

            // assert
            Assert.AreEqual(0.60D, pars.P, EPS);
        }
示例#3
0
        public void MultinomialPartDistribution_MaximumLikelihood_FromSample_UseSmoothing()
        {
            // arrange
            var distr = new MultinomialPartDistribution {
                N = 10, UseSmoothing = true, Alpha = 2, TotalCount = 80
            };
            var sample = new[] { 0.0D, 0.0D, 0.0D, 0.0D };

            // act
            distr.FromSample(sample);
            var pars = distr.Params;

            // assert
            Assert.AreEqual(0.02D, pars.P, EPS);
        }
示例#4
0
        public void MultinomialPartDistribution_Value()
        {
            // arrange
            var distr = new MultinomialPartDistribution();

            distr.Params = new MultinomialPartDistribution.Parameters(0.3D);

            // act
            var v0 = distr.Value(0);
            var v1 = distr.Value(1);
            var v2 = distr.Value(2);

            // assert
            Assert.AreEqual(1.0D, v0);
            Assert.AreEqual(0.3D, v1);
            Assert.AreEqual(0.09D, v2);
        }