public void GaussianMixtureModelConstructorTest()
{
Accord.Math.Tools.SetupGenerator(0);
// Test Samples
double[][] samples =
{
new double[] { 0, 1 },
new double[] { 1, 2 },
new double[] { 1, 1 },
new double[] { 0, 7 },
new double[] { 1, 1 },
new double[] { 6, 2 },
new double[] { 6, 5 },
new double[] { 5, 1 },
new double[] { 7, 1 },
new double[] { 5, 1 }
};
double[] sample = samples[0];
// Create a new Gaussian Mixture Model with 2 components
GaussianMixtureModel gmm = new GaussianMixtureModel(2);
// Compute the model (estimate)
double ll = gmm.Compute(samples, 0.0001);
Assert.AreEqual(-35.930732550698494, ll, 1e-10);
Assert.AreEqual(2, gmm.Gaussians.Count);
Assert.IsTrue(gmm.Gaussians.Means[0].IsEqual(new[] { 5.8, 2.0 }, 1e-3));
Assert.IsTrue(gmm.Gaussians.Means[1].IsEqual(new[] { 0.6, 2.4 }, 1e-3));
int[] c = samples.Apply(gmm.Clusters.Nearest);
for (int i = 0; i < samples.Length; i++)
{
double[] responses;
int e = gmm.Gaussians.Nearest(samples[i], out responses);
int a = responses.ArgMax();
Assert.AreEqual(a, e);
Assert.AreEqual(c[i], (i < 5) ? 1 : 0);
}
}