雅阁机器学习 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 ;
现在一切都像发条一样运转!
我正在尝试使用 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 ;
现在一切都像发条一样运转!