public void MultivariateNormalGenerateTest() { // mean vector double[] mu = { 2.0, 6.0 }; // covariance double[,] cov = { { 2, 1 }, { 1, 5 } }; // Create a multivariate Normal distribution var normal = new MultivariateNormalDistribution(mu, cov); // Generate 1000000 samples from it double[][] samples = normal.Generate(1000000); // Try to estimate a new Normal distribution from // generated samples to check if they indeed match var actual = MultivariateNormalDistribution.Estimate(samples); Assert.IsTrue(mu.IsEqual(actual.Mean, 0.1)); Assert.IsTrue(cov.IsEqual(actual.Covariance, 0.1)); }
private void btnGenerateRandom_Click(object sender, EventArgs e) { k = (int)numClusters.Value; // Generate data with n Gaussian distributions double[][][] data = new double[k][][]; for (int i = 0; i < k; i++) { // Create random centroid to place the Gaussian distribution double[] mean = Matrix.Random(2, -6.0, +6.0); // Create random covariance matrix for the distribution double[,] covariance = Accord.Statistics.Tools.RandomCovariance(2, -5, 5); // Create the Gaussian distribution var gaussian = new MultivariateNormalDistribution(mean, covariance); int samples = Accord.Math.Tools.Random.Next(150, 250); data[i] = gaussian.Generate(samples); } // Join the generated data mixture = Matrix.Stack(data); // Update the scatterplot CreateScatterplot(graph, mixture, k); // Forget previous initialization kmeans = null; }
public void GenerateTest1() { Accord.Math.Tools.SetupGenerator(0); double[] mean = { 2, 6 }; double[,] cov = { { 2, 1 }, { 1, 5 } }; var normal = new MultivariateNormalDistribution(mean, cov); double[][] source = normal.Generate(10000000); var target = new MultivariateEmpiricalDistribution(source); Assert.IsTrue(mean.IsEqual(target.Mean, 0.001)); Assert.IsTrue(cov.IsEqual(target.Covariance, 0.003)); double[][] samples = target.Generate(10000000); double[] sampleMean = samples.Mean(); double[,] sampleCov = samples.Covariance(); Assert.AreEqual(2, sampleMean[0], 1e-2); Assert.AreEqual(6, sampleMean[1], 1e-2); Assert.AreEqual(2, sampleCov[0, 0], 1e-2); Assert.AreEqual(1, sampleCov[0, 1], 1e-2); Assert.AreEqual(1, sampleCov[1, 0], 1e-2); Assert.AreEqual(5, sampleCov[1, 1], 2e-2); }
/// <summary> /// Generates a random vector of observations from a distribution with the given parameters. /// </summary> /// /// <param name="samples">The number of samples to generate.</param> /// <param name="mean">The mean vector μ (mu) for the distribution.</param> /// <param name="covariance">The covariance matrix Σ (sigma) for the distribution.</param> /// /// <returns>A random vector of observations drawn from this distribution.</returns> /// public static double[][] Generate(int samples, double[] mean, double[,] covariance) { var normal = new MultivariateNormalDistribution(mean, covariance); return(normal.Generate(samples)); }
public void GenerateTest2() { Accord.Math.Tools.SetupGenerator(0); var normal = new MultivariateNormalDistribution( new double[] { 2, 6 }, new double[,] { { 2, 1 }, { 1, 5 } }); double[][] sample = new double[1000000][]; for (int i = 0; i < sample.Length; i++) sample[i] = normal.Generate(); double[] mean = sample.Mean(); double[,] cov = sample.Covariance(); Assert.AreEqual(2, mean[0], 1e-2); Assert.AreEqual(6, mean[1], 1e-2); Assert.AreEqual(2, cov[0, 0], 1e-2); Assert.AreEqual(1, cov[0, 1], 1e-2); Assert.AreEqual(1, cov[1, 0], 1e-2); Assert.AreEqual(5, cov[1, 1], 2e-2); }
public void GenerateTest() { Accord.Math.Tools.SetupGenerator(0); var normal = new MultivariateNormalDistribution( new double[] { 2, 6 }, new double[,] { { 2, 1 }, { 1, 5 } }); double[][] sample = normal.Generate(1000000); double[] mean = sample.Mean(dimension: 0); double[][] cov = sample.Covariance(dimension: 0); Assert.AreEqual(2, mean[0], 1e-2); Assert.AreEqual(6, mean[1], 1e-2); Assert.AreEqual(2, cov[0][0], 1e-2); Assert.AreEqual(1, cov[0][1], 1e-2); Assert.AreEqual(1, cov[1][0], 1e-2); Assert.AreEqual(5, cov[1][1], 2e-2); }