我在sklearn中使用NuSVC类。尝试实例化 NuSVC 对象后,如下所示:
self.classifier = OneVsRestClassifier(NuSVC())
我发现我反复收到"指定的nu不可行"错误。我尝试将"nu"参数从 0.1 一直更改为 1。(以 0.1 为增量),但我不断收到相同的错误。我真的不确定如何解释这个消息,以及如何解决它?我认为如果我将 nu 设置为 1.,它会起作用,因为 nu 表示我认为应该始终站得住脚的训练误差比例的上限。可能是什么原因造成的?
感谢您的帮助!
为了完整起见,从文档中: Nu-SVM 是 SVM 的约束公式(相当于原始的重新参数化),它对允许的错误分类施加了硬限制。如果不能满足这个界限,那么相关的凸优化问题就变得不可行了。
从这个角度来看,你必须调查的第一件事是你真正可以预期多少训练误差,并可能修改你的假设。在C
值网格中搜索标准 SVM 以检查这一点。
但是,NuSVC 应该使用一些严格小于 1 的值。根据您的描述,您已经尝试了 0.9 - 开始添加 9,即 .99、.999。如果它在某个时候不起作用,那么一定在某个地方有另一个问题。
命题3 关于ν-支持向量机的教程指出,nu
的可行值有一个上限,由2*min(m+,m-)/m
给出,其中m
是样本的总数,m+
和m-
是相应类中的样本数。
因此,如果nu
不可行,请尝试较小的nu
。