遇到和错误:尝试使用带有 LibSVM 的预计算内核时出现“错误的输入格式:sample_serial_number 超出范围”
Posted
技术标签:
【中文标题】遇到和错误:尝试使用带有 LibSVM 的预计算内核时出现“错误的输入格式:sample_serial_number 超出范围”【英文标题】:Encountering and error: "Wrong input format: sample_serial_number out of range" when trying to use a precomputed kernel with LibSVM 【发布时间】:2013-08-23 03:57:37 【问题描述】:我正在尝试使用带有 LibSVM 3.17(Java 版本)的预计算内核,但在 svm_train 类的 read_problem() 方法中遇到错误,指出:“输入格式错误:sample_serial_number out of range”。
我使用线性内核开始,即取两个向量的点积。我使用的数据已使用 [-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 中的 README,并且我认为我做的一切都是正确的(但显然不是)!我还查看了已经给出的其他答案,例如:
Libsvm precomputed kernels 和 Precomputed Kernels with LibSVM in Python
但不幸的是,我在其中看不到答案。
最后一点:当我在 [0,1] 范围内缩放数据时,并没有发生上述错误(因为矩阵中的所有值现在 >= 1)但我不明白为什么矩阵中的负值似乎首先引起了问题。
我们将不胜感激提供的任何帮助/见解。
【问题讨论】:
【参考方案1】:我又仔细阅读了 John Robertson 在下面的帖子解决了这个问题:
Precomputed Kernels with LibSVM in Python
【讨论】:
【参考方案2】:我收到了同样的消息,结果证明为训练指定的参数范围无效。例如,在我的情况下,我试图输入“-t 4”,而 t 标志选项仅为 (0,1,2,3)。
【讨论】:
以上是关于遇到和错误:尝试使用带有 LibSVM 的预计算内核时出现“错误的输入格式:sample_serial_number 超出范围”的主要内容,如果未能解决你的问题,请参考以下文章