Answers:
C参数告诉SVM优化要避免对每个训练示例进行错误分类的数量。对于较大的C值,如果该超平面在使所有训练点正确分类方面做得更好,则优化将选择一个较小边距的超平面。相反,很小的C值将导致优化器寻找较大的间隔分隔超平面,即使该超平面将更多点分类错误。对于非常小的C值,即使训练数据是线性可分离的,您也经常会得到错误分类的示例。
在SVM中,您正在搜索两件事:具有最大最小边距的超平面,以及正确分隔尽可能多实例的超平面。问题在于您将无法总是同时获得这两件事。c参数确定您对后者的渴望。我在下面画了一个小例子来说明这一点。左侧有一个低c,给您一个很大的最小余量(紫色)。但是,这要求我们忽略未能正确分类的蓝色圆圈离群值。在右侧,您的c高。现在,您将不会忽略异常值,因此最终的利润要小得多。
那么,这些分类器中哪一个最好?这取决于您将要预测的未来数据的样子,当然,大多数情况下您并不知道。如果将来的数据如下所示:
那么使用大c值学习的分类器是最佳的。
另一方面,如果将来的数据如下所示:
那么使用低c值学习的分类器是最好的。
根据您的数据集,更改c可能会或可能不会产生不同的超平面。如果确实产生了不同的超平面,则并不意味着您的分类器将针对您用于分类的特定数据输出不同的类。Weka是用于可视化数据并为SVM进行不同设置的一个很好的工具。它可以帮助您更好地了解数据的外观以及为何更改c值不会更改分类错误。通常,很少有训练实例和许多属性可以更轻松地线性分离数据。另外,您正在评估自己的训练数据而不是新的看不见的数据这一事实也使分离更加容易。
您尝试从哪种数据中学习模型?多少数据?可以看到吗?
C本质上是一个正则化参数,它控制在训练数据上实现低误差与最小化权重范数之间的权衡。它与岭回归中的岭参数很相似(实际上,实际上,线性SVM和岭回归之间在性能或理论上几乎没有差异,因此,我通常使用后者-如果有更多属性而不是观测值,则使用内核岭回归)。
正确调整C是使用SVM的最佳实践中至关重要的一步,因为结构风险最小化(基本方法背后的关键原理)是通过调整C来实现的。参数C强制执行SVM规范的上限。权重,这意味着存在由C索引的一组嵌套的假设类。随着我们增加C,我们就增加了假设类的复杂度(如果我们稍微增加C,我们仍然可以形成我们之前可以做的所有线性模型还有一些我们在增加权重的允许范数上限之前无法做到的)。因此,除了通过最大余量分类实现SRM之外,还可以通过控制C限制假设类的复杂性来实现它。
可悲的是,确定如何设置C的理论目前还不是很完善,因此大多数人倾向于使用交叉验证(如果他们做任何事情)。
C是一个正则化参数,它控制在实现低训练误差和低测试误差之间进行权衡的方法,该误差是将分类器推广到看不见的数据的能力。
考虑线性SVM的目标函数:min | w | ^ 2 + C∑ξ。如果您的C太大,优化算法将尝试降低| w |。尽可能多地导致尝试对每个训练示例正确分类的超平面。这样做会导致分类器的泛化属性损失。另一方面,如果C太小,则可以给目标函数一定的自由度来增加| w |。很多,这将导致较大的训练错误。
下面的图片可以帮助您直观地看到这一点。