Наследование: IFittingOptions
        public void FitTest2()
        {
            double[][] observations = 
            {
                new double[] { 1, 2 },
                new double[] { 1, 2 },
                new double[] { 1, 2 },
                new double[] { 1, 2 }
            };


            var target = new MultivariateNormalDistribution(2);

            bool thrown = false;
            try { target.Fit(observations); }
            catch (NonPositiveDefiniteMatrixException) { thrown = true; }

            Assert.IsTrue(thrown);

            NormalOptions options = new NormalOptions() { Regularization = double.Epsilon };

            // No exception thrown
            target.Fit(observations, options);
        }
        public void EstimateTest()
        {
            double[] observations = { 2, 2, 2, 2, 2 };

            NormalOptions options = new NormalOptions() { Regularization = 0.1 };

            LognormalDistribution actual = LognormalDistribution.Estimate(observations, options);
            Assert.AreEqual(System.Math.Log(2), actual.Location);
            Assert.AreEqual(System.Math.Sqrt(0.1), actual.Shape);
        }
        public void FitTest3()
        {
            double[][] observations = 
            {
                new double[] { 1, 2 },
                new double[] { 2, 4 },
                new double[] { 3, 6 },
                new double[] { 4, 8 }
            };


            var target = new MultivariateNormalDistribution(2);

            NormalOptions options = new NormalOptions()
            {
                Robust = true
            };

            target.Fit(observations, options);

            double pdf = target.ProbabilityDensityFunction(4, 2);
            double cdf = target.DistributionFunction(4, 2);
            bool psd = target.Covariance.IsPositiveDefinite();

            Assert.AreEqual(0.043239154739844896, pdf);
            Assert.AreEqual(0.12263905840338646, cdf);
            Assert.IsFalse(psd);
        }
        public void FitTest()
        {
            IDistribution target = CreateMultivariateContinuousDistribution(); // TODO: Initialize to an appropriate value
            
            double[][] observations = 
            {
                new double[] { 1, 1 },
                new double[] { 1, 1 },
            };

            double[] weights = { 0.50, 0.50 };

            bool thrown;

            IFittingOptions options = new NormalOptions()
            {
                Regularization = 0.1
            };

            thrown = false;
            try
            {
                target.Fit(observations, weights);
            }
            catch
            {
                thrown = true;
            }

            Assert.AreEqual(true, thrown);


            thrown = false;
            try
            {
                target.Fit(observations, weights, options);
            }
            catch
            {
                thrown = true;
            }

            Assert.AreEqual(false, thrown);
        }
        public void FitTest5()
        {
            double[][] observations = 
            {
                new double[] { 1, 2 },
                new double[] { 1, 2 },
                new double[] { 0, 1 },
                new double[] { 5, 7 }
            };

            double[] weights = { 1, 1, 0, 0 };

            var target = new MultivariateNormalDistribution(2);

            bool thrown = false;
            try { target.Fit(observations, weights); }
            catch (NonPositiveDefiniteMatrixException) { thrown = true; }

            Assert.IsTrue(thrown);

            NormalOptions options = new NormalOptions() { Robust = true };

            // No exception thrown
            target.Fit(observations, weights, options);

            checkDegenerate(target);
        }
 /// <summary>
 ///   Estimates a new Normal distribution from a given set of observations.
 /// </summary>
 /// 
 public static NormalDistribution Estimate(double[] observations, double[] weights, NormalOptions options)
 {
     NormalDistribution n = new NormalDistribution();
     n.Fit(observations, weights, options);
     return n;
 }
 /// <summary>
 ///   Estimates a new Normal distribution from a given set of observations.
 /// </summary>
 /// 
 public static NormalDistribution Estimate(double[] observations, NormalOptions options)
 {
     return Estimate(observations, null, options);
 }
 /// <summary>
 ///   Estimates a new Normal distribution from a given set of observations.
 /// </summary>
 /// 
 public static MultivariateNormalDistribution Estimate(double[][] observations, double[] weights, NormalOptions options)
 {
     MultivariateNormalDistribution n = new MultivariateNormalDistribution(observations[0].Length);
     n.Fit(observations, weights, options);
     return n;
 }
Пример #9
0
        /// <summary>
        ///   Creates a Baum-Welch with default configurations for
        ///   hidden Markov models with normal mixture densities.
        /// </summary>
        /// 
        public static BaumWelchLearning<MultivariateMixture<MultivariateNormalDistribution>> FromMixtureModel(
            HiddenMarkovModel<MultivariateMixture<MultivariateNormalDistribution>> model, NormalOptions options)
        {
            MixtureOptions mixOptions = new MixtureOptions()
            {
                Iterations = 1,
                InnerOptions = options
            };

            return new BaumWelchLearning<MultivariateMixture<MultivariateNormalDistribution>>(model)
            {
                FittingOptions = mixOptions
            };
        }