示例#1
0
 public void AssertEqualTo(MyClass that)
 {
     Assert.Equal(0, this.bernoulli.MaxDiff(that.bernoulli));
     Assert.Equal(0, this.beta.MaxDiff(that.beta));
     Assert.Equal(0, this.binomial.MaxDiff(that.binomial));
     Assert.Equal(0, this.conjugateDirichlet.MaxDiff(that.conjugateDirichlet));
     Assert.Equal(0, this.dirichlet.MaxDiff(that.dirichlet));
     Assert.Equal(0, this.discrete.MaxDiff(that.discrete));
     Assert.Equal(0, this.gamma.MaxDiff(that.gamma));
     Assert.Equal(0, this.gammaPower.MaxDiff(that.gammaPower));
     Assert.Equal(0, this.gaussian.MaxDiff(that.gaussian));
     Assert.Equal(0, this.nonconjugateGaussian.MaxDiff(that.nonconjugateGaussian));
     Assert.Equal(0, this.pointMass.MaxDiff(that.pointMass));
     Assert.Equal(0, this.sparseBernoulliList.MaxDiff(that.sparseBernoulliList));
     Assert.Equal(0, this.sparseBetaList.MaxDiff(that.sparseBetaList));
     Assert.Equal(0, this.sparseGammaList.MaxDiff(that.sparseGammaList));
     Assert.Equal(0, this.truncatedGamma.MaxDiff(that.truncatedGamma));
     Assert.Equal(0, this.truncatedGaussian.MaxDiff(that.truncatedGaussian));
     Assert.Equal(0, this.wrappedGaussian.MaxDiff(that.wrappedGaussian));
     Assert.Equal(0, this.sparseGaussianList.MaxDiff(that.sparseGaussianList));
     Assert.Equal(0, this.unnormalizedDiscrete.MaxDiff(that.unnormalizedDiscrete));
     Assert.Equal(0, this.vectorGaussian.MaxDiff(that.vectorGaussian));
     Assert.Equal(0, this.wishart.MaxDiff(that.wishart));
     Assert.Equal(0, this.pareto.MaxDiff(that.pareto));
     Assert.Equal(0, this.poisson.MaxDiff(that.poisson));
     Assert.Equal(0, ga.MaxDiff(that.ga));
     Assert.Equal(0, vga.MaxDiff(that.vga));
     Assert.Equal(0, ga2D.MaxDiff(that.ga2D));
     Assert.Equal(0, vga2D.MaxDiff(that.vga2D));
     Assert.Equal(0, gaJ.MaxDiff(that.gaJ));
     Assert.Equal(0, vgaJ.MaxDiff(that.vgaJ));
     Assert.Equal(0, this.sparseGp.MaxDiff(that.sparseGp));
     Assert.True(this.quantileEstimator.ValueEquals(that.quantileEstimator));
 }
示例#2
0
        public void BugsPumpModified()
        {
            //model
            //{
            //    for (i in 1 : N) {
            //        theta[i] ~ dgamma(alpha, beta)
            //        lambda[i] <- theta[i] * t[i]
            //        x[i] ~ dpois(lambda[i])
            //    }
            //    beta ~ dgamma(0.1, 1.0)
            //}

            // Data:
            //   list(t = c(94.3, 15.7, 62.9, 126, 5.24, 31.4, 1.05, 1.05, 2.1, 10.5),
            //        x = c(5, 1, 5, 14, 3, 19, 1, 1, 4, 22), N = 10, alpha=0.7)

            Rand.Restart(12347);
            int N = 10;

            double[] tData = new double[] { 94.3, 15.7, 62.9, 126, 5.24, 31.4, 1.05, 1.05, 2.1, 10.5 };
            int[]    xData = new int[] { 5, 1, 5, 14, 3, 19, 1, 1, 4, 22 };
            // Exponential distribution is a special case of Gamma distribution (Shape =1)
            //var alpha = Variable.GammaFromShapeAndRate(1.0, 1.0);
            var   beta   = Variable.GammaFromShapeAndRate(0.1, 1.0);
            var   alpha  = 0.7;
            Range i      = new Range(N);
            var   theta  = Variable.Array <double>(i);
            var   lambda = Variable.Array <double>(i);
            var   t      = Variable.Array <double>(i);
            var   x      = Variable.Array <int>(i);

            theta[i]        = Variable.GammaFromShapeAndRate(alpha, beta).ForEach(i);
            lambda[i]       = theta[i] * t[i];
            x[i]            = Variable.Poisson(lambda[i]);
            x.ObservedValue = xData;

            t.ObservedValue = tData;
            var engine = new InferenceEngine(new GibbsSampling());

            engine.NumberOfIterations = 100000;
            engine.ShowProgress       = false;
            engine.ShowTimings        = true;

            // Expected values (from WinBugs)
            double[] expectedThetaPostMean         = { 0.06003, 0.1017, 0.08966, 0.1158, 0.5998, 0.6082, 0.8838, 0.8935, 1.565, 1.987 };
            double[] expectedThetaPostSD           = { 0.02509, 0.07878, 0.03766, 0.03019, 0.3166, 0.1401, 0.7187, 0.7132, 0.7583, 0.4219 };
            IDistribution <double[]> thetaExpected =
                Distribution <double> .Array(Util.ArrayInit(N, k => Gamma.FromMeanAndVariance(expectedThetaPostMean[k], expectedThetaPostSD[k] * expectedThetaPostSD[k])));

            var thetaPost = engine.Infer(theta);

            Console.WriteLine(StringUtil.JoinColumns("theta = ", thetaPost, " should be ", thetaExpected));
            Assert.True(thetaExpected.MaxDiff(thetaPost) < 1.3);
        }
        public void ConstrainEqualCaseArrayTest()
        {
            Range i = new Range(4).Named("i");
            VariableArray <double> x = Variable.Array <double>(i).Named("x");
            VariableArray <int>    c = Variable.Array <int>(i).Named("c");

            using (Variable.ForEach(i))
            {
                c[i] = Variable.Discrete(new double[] { 0.5, 0.5 });
                using (Variable.Case(c[i], 0))
                {
                    x[i] = Variable.GaussianFromMeanAndVariance(1, 1);
                }
                using (Variable.Case(c[i], 1))
                {
                    x[i] = Variable.GaussianFromMeanAndVariance(2, 1);
                }
            }

            VariableArray <double> data = Variable.Observed(new double[] { 0.9, 1.1, 1.9, 2.1 }, i).Named("data");

            Variable.ConstrainEqual(x[i], data[i]);
            InferenceEngine engine = new InferenceEngine(new VariationalMessagePassing());

            Discrete[] cExpectedArray = new Discrete[]
            {
                new Discrete(0.6457, 0.3543),
                new Discrete(0.5987, 0.4013), new Discrete(0.4013, 0.5987),
                new Discrete(0.3543, 0.6457)
            };
            IDistribution <int[]> cExpected = Distribution <int> .Array(cExpectedArray);

            object cActual = engine.Infer(c);

            Console.WriteLine(StringUtil.JoinColumns("c = ", cActual, " should be ", cExpected));
            Assert.True(cExpected.MaxDiff(cActual) < 1e-4);
        }