我遵循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的重新参数化(这是我熟悉的正则化参数) - 但是没有说明如何执行重新参数化。
非常感谢公式和直觉。
谢谢!
答案 0 :(得分:44)
参数C的问题是:
因此很难正确选择,必须通过交叉验证或直接实验来找到合适的值。
作为回应Schölkopf等人。重新构造SVM以采用新的正则化参数nu。 此参数为:
参数nu是边际误差分数的上限和支持向量分数相对于训练样本总数的下限。例如,如果将其设置为0.05,则可以保证最多可以找到5%的训练样例被错误分类(但代价是小幅度),并且至少有5%的训练样例是支持向量。
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:
支持向量数量的下限
nu总是在0 <= nu <= 1之间。
让说nu = 0.1和n = 10,000
1. 我们希望最多10%的错误 => 1000个错误点
2. 我们获得的支持向量> = 1% =>我们获得了1000多个支持向量。