雅阁机器学习 knn.decide indexOutOfRangeException

Accord Machine Learning knn.decide indexOutOfRangeException

我正在尝试使用 Accord 库实现的 k 最近邻。 首先,我使用

        double[][] inputs = new double[15000][];
        int[] outputs = new int[15000];

        for (int list_counter= 0; list_counter < training_set.Count; list_counter ++ ) {
            outputs[list_counter] = (char.Parse(training_set[list_counter].letter));

            double[] input = new double[16];
            for(int i =0; i< 16; i++) {
                input[i] = (double)training_set[list_counter].integers[i];
            }
            inputs[list_counter] = input;
        }

        var knn = new KNearestNeighbors(k: 4);
        knn.NumberOfInputs = 16;
        Console.WriteLine("Learning the algorithm");
        knn.Learn(inputs, outputs);

这段代码教 knn 算法,我有一组 15000 个整数,我首先将其转换为双精度并用作输入。然后我有一组 15000 个 1 个字符串,我首先将其转换为 char 以获得整数值,然后将它们分类为输出。
输入和输出的一些屏幕截图。

我也把输入的数量设置为16来避免这种问题。 但是在这段代码上

            for (int list_counter = 0; list_counter < validation_set.Count; list_counter++) {
               double[] input = new double[16];
               for (int i = 0; i < 16; i++) {
                   input[i] = (double)validation_set[list_counter].integers[i];
               }
               int answer = knn.Decide(input); 

每当我尝试 knn.decide 时,我都会收到 IndexOutOfRangeException。这看起来很奇怪,因为我使用完全相同的逻辑来插入输入(双[16]数组的数组[15000]。
下面是程序崩溃前输入[]的截图

决定方法文档对我没有帮助,但我会留下链接:
knn decide documentation
knn documentation

编辑:

所以,这个特定问题的答案很奇怪,我在 knn 算法的文档中找不到它。
问题是 knn.Learn 部分的输出必须从 0 开始并向上计数。将大写字符转换为 int 至少给了我 65 ('A') ,我更改了代码的第一个

                outputs[list_counter] = (char.Parse(training_set[list_counter].letter)) -65 ;

现在一切都像发条一样运转!