未标记测试数据时如何运行 LIBSVM 的“svm-predict.exe”?

Posted

技术标签:

【中文标题】未标记测试数据时如何运行 LIBSVM 的“svm-predict.exe”?【英文标题】:How to run 'svm-predict.exe' of LIBSVM when test data is not labeled? 【发布时间】:2016-06-20 20:08:03 【问题描述】:

我正在尝试使用LIBSVM 对手写字符进行分类。我已成功执行 'svm-train.exe' 进行训练和 'svm-predict.exe' 进行测试。对于两者,输入文件格式为-

0 1:1 2:0 3:1 4:0
1 1:0 2:1 3:0 4:1
0 1:1 2:0 3:1 4:1
1 1:0 2:1 3:0 4:1

现在,我想使用 'svm-predict.exe' 对未标记的数据进行分类。所以,现在输入文件会是这样的-

1:1 2:0 3:1 4:0
1:0 2:1 3:0 4:1
1:1 2:0 3:1 4:1
1:0 2:1 3:0 4:1

但是,当我使用上述输入运行 'svm-predict.exe' 时,会显示以下 错误 -

第 1 行输入格式错误

这意味着 - 我不能将未标记的数据提供给 'svm-predict.exe'。那么我想如何在实际应用程序中使用它,我想在其中标记未标记的数据?我用谷歌搜索过,也问过其他人,但没有得到有用的解决方案。

备注:我得到的一个建议是用任何随机值标记测试数据(因为我不需要准确性)。但这对我来说似乎不合逻辑。有没有直接的方法来做到这一点?

【问题讨论】:

svm-predict.exe 仅用于“玩”而不是用于实际应用。最好的方法是使用该库并编写一些自己的代码。 真的!?!?!但我看到有人用它! @rzo 'svm-predict.exe' 是为评估目的而编写的(目标:准确性)。如果只想预测未标记的数据,则需要重写输入解析器... 这是否意味着我不能在没有 label 的情况下使用 'svm-predict.exe'? @rzo 是的。或者你使用随机标签... 【参考方案1】:

您需要将“svm-predict.exe”与“test”、“model”和“out”文件一起使用。 让我们假设您的训练文件 -> abc.train 和您的测试文件 -> abc.test。 当你在cmd中执行“svm-train.exe abc.train”时,会在当前目录下创建“abc.train.model”文件。 为了预测,需要在cmd中执行“svm-predict.exe abc.test abc.train.model abc.out”。不用担心“abc.out”,它会自动生成。 PS:在测试文件中,您需要像在火车文件中那样描述行的类。 它将在 abc.out 上打印结果类,并通过比较 out 和 test 文件来给出准确性。

【讨论】:

【参考方案2】:

简单来说,答案是 - 不,'svm-predict.exe' 不能在没有 label 的情况下使用。正如rzo 评论的那样,“可执行文件”并非为现实世界使用而设计-

svm-predict.exe 仅用于“玩”而不是用于实际应用程序。最好的方法是使用该库并编写一些自己的代码。

但是,如果我们只想将它用于演示避免编程的复杂性,那么除了使用“随机标签”之外别无他法。

关于在项目中使用LIBSVM库,您可以访问这里-

C C# Java1, Java2 MATLAB

【讨论】:

以上是关于未标记测试数据时如何运行 LIBSVM 的“svm-predict.exe”?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Libsvm - SVM_Predict.exe 计算“准确度”

libsvm 中的未分类数据点?

多类 SVM。二元决策树。 LIBSVM 的问题

SVM LibSVM 在预测时忽略特征 1,3,5

LIBSVM 对未训练类的样本给出相同的预测。为啥?

如何通过 LIBSVM 使用 platt 缩放和交叉验证?