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; }
/// <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 }; }