我按照 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的解读
参数 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"
关于python - Scikit-Learn的SVM类中的nu参数是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11230955/