public void MeanShiftConstructorTest()
{
Accord.Math.Random.Generator.Seed = 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 }
};
var kernel = new GaussianKernel(dimension: 2);
MeanShift meanShift = new MeanShift(2, kernel, 2.0);
meanShift.UseParallelProcessing = false;
// Compute the model (estimate)
int[] labels = meanShift.Compute(samples);
int a = labels[0];
int b = (a == 0) ? 1 : 0;
for (int i = 0; i < 5; i++)
Assert.AreEqual(a, labels[i]);
for (int i = 5; i < samples.Length; i++)
Assert.AreEqual(b, labels[i]);
Assert.AreEqual(1.1922811512028066, meanShift.Clusters.Modes[a][0], 1e-3);
Assert.AreEqual(1.2567196159235963, meanShift.Clusters.Modes[a][1], 1e-3);
Assert.AreEqual(5.2696337859175868, meanShift.Clusters.Modes[b][0], 1e-3);
Assert.AreEqual(1.4380326532534968, meanShift.Clusters.Modes[b][1], 1e-3);
Assert.AreEqual(2, meanShift.Clusters.Count);
Assert.AreEqual(2, meanShift.Clusters.Modes.Length);
Assert.AreEqual(0.5, meanShift.Clusters.Proportions[0]);
Assert.AreEqual(0.5, meanShift.Clusters.Proportions[1]);
}