1

我正在使用我自己的 SVM 粗略实现,使用 cvxopt 来解决固有的二次规划问题。我是 SVM 的新手。

因为这是我自己的实现,所以我有责任找出边缘支持向量和分离平面的阈值 b。在一个大小合适的(大约 5K 个样本,二维数字输入)数据集上,在一个软 SVM 公式中,我在试图找出边际支持向量时遇到了这个问题。

边距支持向量是小于 C 的非零 alpha。但是,如果我盲目地使用 cvxopt 的 feastol 参数来确定哪些 alpha 可以被视为 C,哪些可以被视为小于 C,我发现阈值 b 来自每个边距支持向量差异很大,有时甚至是惊人的。(理论上,从任何边缘支持向量派生的阈值 b 应该是相同的)

有时临时阈值有效,但有时似乎不可行——也许有一种方法可以巧妙地尝试不同的阈值来获得一些“最少不一致”的 b 集合或类似的集合。

(a) 真正的从业者(或“内部”实现,如 libsvm 或 svm-light 等)在实践中是否遇到过这种情况,或者在我的具体情况下这听起来像错误或实现问题吗?

(b) 如果这在实践中确实是一个问题,如何解决:Burges 的 SVM 教程指出,您只需对从边际支持向量派生的所有阈值取平均值——这也是 matlab 代码中所做的Gunn 的技术报告 ( http://www.ecs.soton.ac.uk/~srg/publications/pdf/SVM.pdf )。这是简单的出路并且在实践中效果很好,这是在 libsvm 或 svm-light 等中完成的吗?或者是否有一些原则性的方法来尝试不同的阈值以获得最小不一致的可接受的阈值集 b ?

4

0 回答 0