29

我遵循http://scikit-learn.org/stable/auto_examples/svm/plot_oneclass.html#example-svm-plot-oneclass-py中显示的示例,其中一类 SVM 用于异常检测。现在,这可能是 scikit-learn 独有的符号,但我找不到如何使用赋予 OneClassSVM 构造函数的参数 nu 的解释。

http://scikit-learn.org/stable/modules/svm.html#nusvc中,声明参数 nu 是参数 C 的重新参数化(这是我熟悉的正则化参数) - 但没有't 说明如何执行重新参数化。

公式和直觉都将不胜感激。

谢谢!

4

2 回答 2

55

C的问题和nu的引入

参数 C 的问题是:

  1. 它可以取任何正值
  2. 它没有直接的解释。

因此很难正确选择,必须求助于交叉验证或直接实验来找到合适的值。

作为回应 Schölkopf 等人。重新构造 SVM 以采用新的正则化参数 nu。这个参数是:

  1. 介于 0 和 1 之间
  2. 有直接的解释

nu的解释

参数 nu 是边际误差分数的上限,也是支持向量相对于训练样本总数的分数的下限。例如,如果您将其设置为 0.05,则可以保证最多 5% 的训练示例被错误分类(尽管代价很小),并且至少 5% 的训练示例是支持向量。

C和nu的关系

C 和 nu 之间的关系由以下公式控制:

nu = A+B/C

A 和 B 是常数,不幸的是,它们并不那么容易计算。

结论

外卖信息是 C 和 nu SVM 在分类能力方面是等价的。与 C 相比,nu 方面的正则化更容易解释,但 nu SVM 通常更难优化,并且运行时不会像具有输入样本数量的 C 变体那样扩展。

更多细节(包括 A 和 B 的公式)可以在这里找到:Chang CC, Lin CJ - “训练 nu-support vector classifiers: theory and algorithms”

于 2013-03-24T13:27:51.130 回答
-1

支持向量中的 nu 是一个超参数

在 c-SVM 中,如果我们想查询一个点 x q那么

∑α<sub>iy i .x i T .x q +b for i=1 to n

正如我们所知,对于大于零的支持向量和非支持向量 α i = 0。

所以只有支持向量对计算 f(x q )很重要,但是在常规 C-SVM 中,我们无法控制支持向量的数量,所以这里出现了 nu-SVM

怒:

  1. 错误数量的上限

  2. 支持向量数量的下限

    nu 始终介于 0<= nu <= 1 之间。

假设nu =0.1 和 n=10,000

1.我们最多需要 10% 的错误=> 1000 个错误点
2.我们得到支持向量 >= 1% => 我们得到超过 1000 个支持向量。

于 2018-09-03T20:37:07.580 回答