我正在参考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(我熟悉的正则化参数)的重新参数化 – 但没有说明如何进行这种重新参数化。
我非常希望能得到一个公式和直观的解释。
谢谢!
回答:
C的问题和nu的引入
C参数的问题在于:
- 它可以取任何正值
- 它没有直接的解释。
因此,选择正确的C值非常困难,必须通过交叉验证或直接实验来找到合适的值。
作为回应,Schölkopf等人重新制定了SVM,引入了一个新的正则化参数nu。这个参数的特点是:
- 在0和1之间
- 有直接的解释
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”