我遵循 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 的问题是:
- 它可以接受任何正值
- 它没有直接的解释。
因此,很难正确选择,必须诉诸交叉验证或直接实验来找到合适的值。
作为回应,Schölkopf等人重新制定了SVM以采用新的正则化参数nu。此参数为:
- 介于 0 和 1 之间
- 有直接解释
怒乳的解释
参数 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 向量分类器:理论和算法"
支持向量中的 nu 是一个超参数。
在 c-SVM 中,如果我们想查询一个点 xq,那么
∑αi.y i.xiT.xq+b 表示 i=1 到 n
正如我们所知α i 对于大于零的支持向量和非支持 vecotrs αi=0。
所以只有支持向量是计算 f(xq) 的问题,但是在常规 C-SVM 中,我们无法控制支持向量的编号,所以这里是 nu-SVM
纽:
-
误差数的上限
-
支持向量数的下限
nu 始终介于 0<= nu <= 1 之间。
假设 nu=0.1 和 n=10,000
1.我们最多想要 10% 的错误 => 1000 个错误点
2.我们得到支持向量>= 1% =>我们得到超过1000个支持向量。