scikit-Learn的SVM类中nu参数的含义是什么?

时间:2012-06-27 16:30:55

标签: python machine-learning scikit-learn

我遵循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的重新参数化(这是我熟悉的正则化参数) - 但是没有说明如何执行重新参数化。

非常感谢公式和直觉。

谢谢!

2 个答案:

答案 0 :(得分:44)

C的问题和nu

的引入

参数C的问题是:

  1. 它可以采取任何正值
  2. 它没有直接的解释。
  3. 因此很难正确选择,必须通过交叉验证或直接实验来找到合适的值。

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

    1. 介于0和1之间
    2. 有直接解释
    3. 解释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 - "Training nu-support vector classifiers: theory and algorithms"

答案 1 :(得分:0)

支持向量中的

nu是超级参数

在c-SVM中,如果我们要查询点x q ,则

∑α i .y i .x i T .x q + b代表i = 1到n

众所周知,对于大于零的超向量和非支持向量α i = 0,α i

因此,仅支持向量与计算f(x q 有关,但是在常规C-SVM中,我们无法控制No。支持向量,所以这是nu-SVM

nu:

  1. 错误数量上限
  2. 支持向量数量的下限

    nu总是在0 <= nu <= 1之间。

说nu = 0.1和n = 10,000

1. 我们希望最多10%的错误 => 1000个错误点
2. 我们获得的支持向量> = 1% =>我们获得了1000多个支持向量。