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



我遵循 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 的问题是:

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

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

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

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

怒乳的解释

参数 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

纽:

  1. 误差数的上限

  2. 支持向量数的下限

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

假设 nu=0.1 和 n=10,000

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

相关内容

  • 没有找到相关文章