0

我正在尝试将预计算内核与 LibSVM 3.17(Java 版本)一起使用,但在 svm_train 类的 read_problem() 方法中遇到错误,指出:“输入格式错误:sample_serial_number 超出范围”。

我使用线性内核开始,即取两个向量的点积。我使用的数据已使用 [-1,1] 范围内的 svm_scale 进行了缩放。在保存我的预计算内核时,我为我的第一列保存了行的 ID(这实际上是行的唯一标识符),为后续列保存了矩阵的内容。我生成的矩阵是对称的,我在下面包含了文件内容的前几个条目以供您评估:

1   0:10.3098007199 1:9.691388073999995 2:8.269529587900001 3:10.836359234799996
2   0:9.691388073999995 1:10.441238090599997    2:7.5937360488  3:9.193978496500002
3   0:8.269529587900001 1:7.5937360488  2:8.1263441462  3:9.8885507424
4   0:10.836359234799996    1:9.193978496500002 2:9.8885507424  3:13.705259598099996    

当值:

    48:0.015231278900000159 

在我预先计算的内核文件中遇到(恰好在第一行)。出现错误是因为上面的值未通过以下测试:

if ((int)prob.x[i][0].value <= 0 || (int)prob.x[i][0].value > max_index)

其中 prob.x[i][0].value = 0.015231278900000159 在 svm_train 的 read_problem() 中。

我对如何进行此操作有点困惑。我想知道我是否以正确的文件格式保存了数据?我已经阅读了 LibSVM 中的自述文件,我认为我做的一切都是正确的(但显然不是)!!我还查看了已经给出的其他答案,例如:

Libsvm 预计算内核Python 中带有 LibSVM 的预计算内核

但不幸的是,我在其中看不到答案。

最后一点:当我在 [0,1] 范围内缩放数据时,并没有发生上述错误(因为矩阵中的所有值现在 >= 1)但我很困惑为什么其中的负值矩阵似乎首先引起了问题。

提供的任何帮助/见解将不胜感激。

4

2 回答 2

0

我通过再次仔细阅读 John Robertson 的以下帖子解决了这个问题:

在 Python 中使用 LibSVM 预计算内核

于 2013-08-22T15:40:49.083 回答
0

我收到了同样的消息,结果证明为训练指定的参数范围无效。例如,在我的情况下,我试图输入“-t 4”,而 t 标志选项仅为 (0,1,2,3)。

于 2017-08-01T16:18:02.933 回答