public void WeightedMeanShiftConstructorTest()
{
MeanShift ms1, ms2, ms3;
Accord.Math.Tools.SetupGenerator(0);
double[][] samples1 =
{
new double[] { 0, 1 },
new double[] { 1, 2 },
new double[] { 1, 1 },
new double[] { 0, 1 },
new double[] { 1, 1 },
new double[] { 6, 2 },
new double[] { 6, 5 },
new double[] { 5, 1 },
new double[] { 7, 1 },
new double[] { 5, 1 }
};
int[] weights1 = Vector.Ones<int>(samples1.Length);
ms1 = new MeanShift(2, new GaussianKernel(dimension: 2), 2.0);
ms1.Compute(samples1);
Accord.Math.Tools.SetupGenerator(0);
double[][] samples2 =
{
new double[] { 0, 1 },
new double[] { 1, 2 },
new double[] { 1, 1 },
new double[] { 0, 1 },
new double[] { 6, 2 },
new double[] { 6, 5 },
new double[] { 5, 1 },
new double[] { 7, 1 },
};
int[] weights = { 1, 1, 2, 1, 1, 1, 2, 1 };
ms2 = new MeanShift(2, new GaussianKernel(dimension: 2), 2.0);
ms2.Compute(samples2, weights);
ms3 = new MeanShift(2, new GaussianKernel(dimension: 2), 2.0);
ms3.Compute(samples2);
int[] labels1 = ms1.Clusters.Nearest(samples1);
int[] labels2 = ms2.Clusters.Nearest(samples1);
int[] labels3 = ms3.Clusters.Nearest(samples1);
Assert.IsTrue(Matrix.IsEqual(labels1, labels2));
Assert.IsTrue(Matrix.IsEqual(ms1.Clusters.Modes, ms2.Clusters.Modes, 1e-3));
Assert.IsFalse(Matrix.IsEqual(ms1.Clusters.Modes, ms3.Clusters.Modes, 1e-2));
Assert.IsFalse(Matrix.IsEqual(ms2.Clusters.Modes, ms3.Clusters.Modes, 1e-2));
Assert.IsTrue(Matrix.IsEqual(ms1.Clusters.Proportions, ms2.Clusters.Proportions));
Assert.IsTrue(Matrix.IsEqual(ms1.Clusters.Proportions, ms3.Clusters.Proportions));
Assert.AreEqual(0.5, ms1.Clusters.Proportions[0]);
Assert.AreEqual(0.5, ms1.Clusters.Proportions[1]);
}