Accord.NET 扔 "Index was outside the bounds of the array"

Accord.NET throw "Index was outside the bounds of the array"

我从 Accord.NET 开始研究 KNN,当我需要测试模型时出于某种原因遇到了这个错误。

但是这个错误消息根本没有帮助(Index was outside the bounds of the array),因为这个错误发生在库本身。

带有随机数据的简单代码:

        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);

这里是个例外:

但我找到了解决方法,并在下面与您分享解决方案:

在实施这个简单示例很多天后,我发现输出数组应该具有连续的范围值(编码:0,1,2,3,....)。 所以这里 9 就是为什么这个错误发生在这里

    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
    };