Gaussian kernel = new Gaussian(0.6);
Func<double[], double[], double> distance = (x, y) => kernel.Distance(x, y);
double[][] inputs =
{
new double[] { -5, -2, -1 },
new double[] { -5, -5, -6 },
new double[] { 2, 1, 1 },
new double[] { 1, 1, 2 },
new double[] { 1, 2, 2 },
new double[] { 3, 1, 2 },
new double[] { 11, 5, 4 },
new double[] { 15, 5, 6 },
new double[] { 10, 5, 6 },
};
int[] outputs =
{
0, 0,
1, 1, 1, 1,
2, 2, 2
};
int k = 4;
int classes = 3;
KNearestNeighbors target = new KNearestNeighbors(k, classes, inputs, outputs, distance); Gaussian kernel = new Gaussian(0.6);
Func<double[], double[], double> distance = (x, y) => kernel.Function(x, x) + kernel.Function(y, y) - 2 * kernel.Function(x, y);
double[][] inputs =
{
new double[] { -5, -2, -1 },
new double[] { -5, -5, -6 },
new double[] { 2, 1, 1 },
new double[] { 1, 1, 2 },
new double[] { 1, 2, 2 },
new double[] { 3, 1, 2 },
new double[] { 11, 5, 4 },
new double[] { 15, 5, 6 },
new double[] { 10, 5, 6 },
};
int[] outputs =
{
0, 0,
1, 1, 1, 1,
2, 2, 2
};
int k = 4;
int classes = 3;
KNearestNeighbors target = new KNearestNeighbors(k, classes, inputs, outputs, distance);Does this mean that the existing Gaussian.Distance function is incorrect and should be replaced with the equivalent of that formula (1 + 1 - 2 * Gaussian.Function(x, y))? Or is the existing Distance function useful in some specific circumstances where the "1.0 - 0.5 * norm" is not negative?
Thanks again,
Keith
Func<double[], double[], double> distance =
(x, y) => Math.Sqrt(kernel.Function(x, x) + kernel.Function(y, y) - 2 * kernel.Function(x, y));