我在教程中使用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与我的数据更相关?
答案 0 :(得分:2)
简短回答:只需取结果的标志
更长的回答: SVM接受输入并返回实值输出(这是您所看到的)。
在训练数据上,学习算法尝试将所有正例的输出设置为> = +1,并且对于所有负例,< = -1。这些点没有错误。 -1和+1之间的差距是“边际”。在-1和+1之间的“无人区域”中的点和在完全错误的一侧上的点(如输出> +1的负点)是错误(学习算法试图使训练数据最小化) )。
因此,在测试时,如果结果小于-1,您可以合理地确定它是一个反面的例子。如果它大于+1,你可以合理地确定它是一个积极的例子。如果介于两者之间,则SVM对此非常不确定。通常,你必须做出决定(并且不能说“我不知道”),因此人们使用0作为正面和负面标签之间的界限。