4

我在教程中使用SVM-light将数据分类为 2 类:

火车档案:

 +1 6357:1 8984:1 11814:1 15465:1 16031:1
 +1 6357:1 7629:0.727 7630:42 7631:0.025
 -1 6357:1 11814:1 11960:1 13973:1
 ...

和测试文件:

 0 6357:1 8984:1 11814:1 15465:1
 0 6357:1 7629:1.08 7630:33 7631:0.049 7632:0.03
 0 6357:1 7629:0.069 7630:6 7631:0.016
 ...

通过执行svm_learn.exe train_file model->svm_classify.exe test_file model output我得到了一些意想不到的值output

 -1.0016219
 -1.0016328
 -1.0016218
 -0.99985838
 -0.99985853

作为火车文件中的类,它不应该是 +1 或 -1 吗?或-1和+1之间的某种浮点数手动选择0作为分类或其他数字的解决方案,但对我来说,当所有数字都接近-1并且其中一些数字时,这是非常出乎意料的情况甚至更少。

UPD1:据说如果结果数是负数,那么它的类-1,如果是正数- +1。还在质疑这个符号后面的值是什么意思?我刚刚开始探索 SVM,所以这可能是一个简单或愚蠢的问题 :) 如果我的预测很糟糕,我应该采取哪些步骤 - 另一个内核?或者也许其他一些选项可以使 SVM-light 与我的数据更相关?

4

1 回答 1

3

简短的回答:只取结果的符号

更长的答案:SVM 接受一个输入并返回一个实值输出(这就是您所看到的)。

在训练数据上,学习算法尝试将所有正例的输出设置为 >= +1,对于所有负例,设置为 <= -1。这样的点没有错误。-1 和 +1 之间的这个差距就是“边距”。“无人区”中介于 -1 和 +1 之间的点以及完全错误一侧的点(例如输出为 >+1 的负点)是错误(学习算法试图在训练数据上最小化) .

因此,在测试时,如果结果小于 -1,您可以合理地确定它是一个反例。如果它大于 +1,您可以合理地确定它是一个正面的例子。如果介于两者之间,则 SVM 对此非常不确定。通常,您必须做出决定(并且不能说“我不知道”),因此人们使用 0 作为正面和负面标签之间的分界线。

于 2014-05-27T22:52:28.323 回答