public void GaussianMixtureModelTest5()
{
Accord.Math.Tools.SetupGenerator(0);
MemoryStream stream = new MemoryStream(Resources.CircleWithWeights);
ExcelReader reader = new ExcelReader(stream, xlsx: false);
DataTable table = reader.GetWorksheet("Sheet1");
double[,] matrix = table.ToMatrix();
double[][] points = matrix.Submatrix(null, 0, 1).ToJagged();
double[] weights = matrix.GetColumn(2);
GaussianMixtureModel gmm = new GaussianMixtureModel(2);
gmm.Initializations = 1;
gmm.Compute(points, new GaussianMixtureModelOptions()
{
Weights = weights
});
int a = 0;
int b = 1;
double tol = 1e-3;
if ((-0.407859903454185).IsRelativelyEqual(gmm.Gaussians[1].Mean[0], tol))
{
a = 1;
b = 0;
}
Assert.AreEqual(-0.407859903454185, gmm.Gaussians[a].Mean[0], tol);
Assert.AreEqual(-0.053911705279706859, gmm.Gaussians[a].Mean[1], tol);
Assert.AreEqual(0.39380877640250328, gmm.Gaussians[b].Mean[0], tol);
Assert.AreEqual(0.047186154880776772, gmm.Gaussians[b].Mean[1], tol);
Assert.AreEqual(1, gmm.Gaussians[0].Proportion + gmm.Gaussians[1].Proportion, 1e-15);
Assert.IsFalse(gmm.Gaussians[0].Mean.HasNaN());
Assert.IsFalse(gmm.Gaussians[1].Mean.HasNaN());
}