Nu是不可行的

MEr*_*ric 6 python svm svc scikit-learn

我在sklearn中使用NuSVC类。尝试实例化NuSVC对象后,如下所示:

self.classifier = OneVsRestClassifier(NuSVC())
Run Code Online (Sandbox Code Playgroud)

我发现我反复收到“指定的nu是不可行的”错误。我尝试将'nu'参数从0.1一直更改为1(以0.1为增量),但是我仍然遇到相同的错误。我真的不确定如何解释此消息,以及如何解决它?我认为,如果将nu设置为1,那将是可行的,因为nu代表了训练误差部分的上限,我认为该误差应该始终成立。是什么原因造成的?

谢谢您的帮助!

eic*_*erg 8

为了完整起见,来自文档:Nu-SVM 是 SVM 的约束公式(相当于重新参数化的原始公式),它对允许的错误分类提出了硬限制。如果这个界限不能被满足,那么相关的凸优化问题就变得不可行。

从这个角度来看,您必须调查的第一件事是您真正可以预期有多少训练错误,并且可能会修改您的假设。搜索C标准 SVM的值网格以进行检查。

但是,NuSVC 应该使用一些严格小于 1 的值。根据你的描述,你试过0.9——开始加9,即0.99、0.999。如果它在某个时候不起作用,那么一定是某个地方存在另一个问题。

  • 从文档中,nu 也是支持向量分数的下限。当我在包含 20% 正例的训练集上遇到这个问题时,我不得不将 nu 从 0.5 降低到 0.2,否则将训练集重新采样为 50% 正例。提高 nu 没有用。 (7认同)
  • 它在上述答案中链接的 api 参考中有所说明。 (2认同)