遇到和错误:尝试使用带有 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 超出范围”的主要内容,如果未能解决你的问题,请参考以下文章

libsvm 交叉验证与 matlab 中的预计算内核

将置换后的数据放入 LibSVM 预计算内核

libsvm 准确吗?

带有预计算内核的 libsvm:如何计算分类分数?

Libsvm 预计算内核

带有 LIBSVM 数据错误的 Spark 决策树