-2

I was working on KNN from Accord.NET and I faced this error for some reason when I need to test model.

but this error message didn't help at all (Index was outside the bounds of the array) because this error happen in the library itself.

simple code with random data:

        using Accord.MachineLearning;

        double[][] inputs =
        {
            new double[] { 16, 2 ,0}, new double[] { 4, 5 ,1},
            new double[] { 16, 2 ,0}, new double[] { 4, 5 ,1},
            new double[] { 16, 2 ,0}, new double[] { 4, 5 ,1},
            new double[] { 16, 2 ,0}, new double[] { 4, 5 ,1},
            new double[] { 16, 2 ,0}, new double[] { 4, 5 ,1},
            new double[] { 16, 2 ,0}, new double[] { 4, 5 ,1},
            new double[] { 16, 2 ,0}, new double[] { 4, 5 ,1},
            new double[] { 16, 2 ,0}, new double[] { 4, 5 ,1},
            new double[] { 16, 2 ,0}, new double[] { 4, 5 ,1},
            new double[] { 16, 2 ,0}, new double[] { 4, 5 ,1},
            new double[] { 16, 2 ,0}, new double[] { 4, 5 ,1},
            new double[] { 16, 2 ,0}, new double[] { 4, 15 ,1},
        };

        int[] outputs =
        {
            0, 1, 0, 1, 0, 1,
            0, 1, 0, 1, 0, 1,
            0, 1, 0, 1, 0, 1,
            0, 1, 0, 1, 0, 9
        };

        var knn = new KNearestNeighbors(k: 15);
        knn.Learn(inputs, outputs);

        //test
        var t = new double[] { 16, 2, 0 };
        int answer = knn.Decide(t);

and here the exception:

exception

but I found way around and I share solution with you below :

TECNO
  • 162
  • 2
  • 3
  • 15

1 Answers1

0

after many days and after implementing this simple sample I found that output array should have continues range values (encoded : 0,1,2,3,....) . so here 9 is why that bug happen here

    int[] outputs =
    {
        0, 1, 0, 1, 0, 1,
        0, 1, 0, 1, 0, 1,
        0, 1, 0, 1, 0, 1,
        0, 1, 0, 1, 0, 2
    };
TECNO
  • 162
  • 2
  • 3
  • 15