我在尝试使用 Libsvm 时,遇到了以下情况:
root@bcfd88c873fa:/home/libsvm# ./svm-train myfileWrong input format at line 1root@bcfd88c873fa:/home/libsvm# head -n 5 myfile2 0:0.00000 8:0.00193 2:0.00000 1:0.00000 10:0.007223 6:0.00235 2:0.00000 0:0.00000 1:0.00000 5:0.001554 0:0.00000 1:0.00000 2:0.00000 4:0.001873 6:0.00121 8:0.00211 1:0.00000 2:0.00000 0:0.000003 0:0.00000 2:0.00000 1:0.00000
你能看出格式有什么问题吗?它在其他svm实现中是可以工作的,比如 这个 Go语言版本的实现。
谢谢,
回答:
提供的格式是正确的。 LIBSVM 3.22
的 Java
接口可以正常处理所提供的文件。
然而,我也在Windows和Linux接口上进行了尝试,结果与您的问题中描述的一致。
svm-train.exe myfileWrong input format at line 1
经过调查,我发现特征ID必须排序才能被工具正确处理(这似乎是一个bug,因为Java
接口没有这种限制…):
2 0:0.00000 1:0.00000 2:0.00000 8:0.00193 10:0.007223 0:0.00000 1:0.00000 2:0.00000 5:0.00155 6:0.002354 0:0.00000 1:0.00000 2:0.00000 4:0.001873 0:0.00000 1:0.00000 2:0.00000 6:0.00121 8:0.002113 0:0.00000 1:0.00000 2:0.00000
此外,由于LIBSVM
使用稀疏数据格式,您可以通过跳过值为零的特征来简化您的数据集:
2 8:0.00193 10:0.007223 5:0.00155 6:0.002354 4:0.001873 6:0.00121 8:0.002113