Schölkopf B, Smola A J, Williamson R C, et al. New Support Vector Algorithms[J]. Neural Computation, 2000, 12(5):1207-1245.
Chang, ChihChung, Lin, et al. LIBSVM: A library for support vector machines[J]. Acm Transactions on Intelligent Systems & Technology, 2011, 2(3):389-396.
回复 ( 10 )
按照LibSVM的习惯,SVM的目标函数是这样的:
这里的参数C代表的是在线性不可分的情况下,对分类错误的惩罚程度。
C值越大,分类器就越不愿意允许分类错误(“离群点”)。如果C值太大,分类器就会竭尽全力地在训练数据上少犯错误,而实际上这是不可能/没有意义的,于是就造成过拟合。
而C值过小时,分类器就会过于“不在乎”分类错误,于是分类性能就会较差。
你可以把这个参数C理解为调节优化方向中两个指标(间隔大小,分类准确度)偏好的权重。soft-margin SVM针对hard-margin SVM容易出现的过度拟合问题,适当放宽了margin的大小,容忍一些分类错误(violation),把这些样本当做噪声处理,本质上是间隔大小和噪声容忍度的一种trade-off,至于具体怎么trade-off,对哪个指标要求更高,那就体现在C这个参数上了。
如 @王赟 Maigo 所使用的hinge损失函数来表示对于样本的分类偏差,引入松弛变量把优化问题写为:
这里的就是对于第个样本点的分类损失,如果分类正确则是0,如果分类有所偏差则对应一个线性的值,是总误差,我们优化的目标当然是这个值越小越好,越小代表对训练集的分类越精准。目标函数中的另一项(常数1/2是为了方便求导加上去的)的最小化的优化方向则是使间隔大小最大。
原则上C可以根据需要选择所有大于0的数。C越大表示整个优化过程中对于总误差的关注程度越高,对于减小误差的要求越高,甚至不惜使间隔减小。
这里有一组Guassian kernel/soft-margin SVM在不同参数C下的实验结果[1]:
C值越大对于训练集的表现越好,但是间隔减小也就是对于噪声等干扰的容忍度减小,可能引发过度拟合(overfitting),这时说明对于噪声的惩罚力度太大。
想象我们要挑选合适的记者去参与新闻的采访报道。那么现在的评价指标有两个,一个是记者对于新闻的灵敏度,是否跑的快善于弄大新闻(间隔大小),一个是基于过去的表现(训练集)记者对于新闻报道的准确性如何,是否产生偏差,专业素质知识水平如何(分类误差),hard-margin SVM是挑选看上去报道准确知识水平最高的记者中跑得最快的,可能导致换个采访话题就出现偏差。而soft-margin则看重记者跑得快弄大新闻的潜力,在过去的专业表现上作出一定的妥协,允许她问出一些肤浅的问题,C越小说明越不关心记者的知识水平,当C趋近于0时,可能出现当众热恼interviewee然后被怒斥的场面(算法发散且得出的解都无意义)
很惭愧,只做了一些微小的工作。
最后祝大家身体健康,提前连任。
参考资料:
[1] Machine Learning Techniques:
最近在研究svm的相关课题,正好答一下:
C又称为penalty term,指的是SVM里拉格朗日乘数的约束程度。
为什么需要C:
上图明显是一个过度拟合的问题,为了解决这类问题或者甚至为了解决某些非线性可分的问题,C的大小决定了对于outlier的忍受程度。忍受程度越强,支持向量就越多(support vector)。下图为例,圆圈标记的则为支持向量:
总的来说,C值越大,越过度拟合;反之有可能欠拟合。C值的最优解通常通过grid search得到。
图片来源Stackoverflow
结论: 1/C的作用和l2 regularization coefficient的作用是一样的。
下面是解释
1. 就像 @王赟 Maigo 的回答里提到的那样, 教科书中的SVM通常是这样的 (L2 SVM):
2. 这个优化问题是哪里来的呢?考虑到SVM使用的是hinge loss,上述regularized optimization 问题实际上是这样的:
其中,最右边的项是hinge loss (习惯问题,我把(1)里面的样本下标(i,l)写成(n,N)了)
3. 等价地,(2)里面的目标函数稍加整理/变化以后是这样的:
这样可以把SVM 目标函数理解成使用l2 regularization的hinge loss,而l2 regularization coefficient和C 是反比关系。 这时我们就可以用“分析regularization coefficient对learning的影响“这个思路来理解C的作用了
4. 最后提一个引申问题:
在linear svm里面,对feature 做线性变换会导致学出来的linear svm 在同一个test data (当然,我们会使用变换前和变换后的testing data做测试)给出不同的预测结果吗?==>是的,因为标准的SVM 里面自带regularization项(如果没有这个regularization term,对fature 做线性变换以后,可以对参数做相应的线性变换 得到完全相同的预测结果)。
可以理解为对分类错误的容忍度或者对分类错误的惩罚力度
C越大表示惩罚越大,越不能容忍错误,容易造成over fitting
C越小与之相反,容易造成underfitting 。
工业上经常默认使用1。
然后会grid search尝试0.1,0.5,10等等数字
感觉楼上回答没有击中要害,所以怒答此题。。。。。
要理解C的含义,就需要理解的含义:可以理解为hinge loss,而当几何间距(geometric margin)小于1时hinge loss时是一条直线(图像见答案末),那么乘以C可以理解为这条直线的斜率。可以类比L1正则和L2正则中的。
———————————————————————————————-
以下是详细步骤:
SVM的目标问题:
应用拉格朗日乘子法得
那么对待优化变量求偏微分
(1)
(2)
(3)
根据KKT互补条件,
(4)
(5)
所以,将(3) (4) (5)带入以下式子
当,几何间距>=1样本的
当,几何间距为1的样本,也就是支持向量的
当,只有样本与决策边界的几何间距(geometric margin)小于1时,才成立。而且他们之间的等式关系为。
———————————————————————————————-
hinge loss定义如下:
可以发现我们以上求出的就是hinge loss 的形式。
———————————————————————————————-
当y=1时,hinge loss图中蓝色的线条,纵坐标为hinge loss,横坐标为,即为几何间距。
也就是C=1的特例
楼上各位大神都回答的很详尽了,那我来从优化的角度答一发。偷懒,公式粗体什么的都没加,图也懒得上了XD。
我们只关注原问题,因为原问题比对偶问题更直观一些。并且把约束条件直接放到目标函数中,即
,
这里的是一个损失函数loss function,表示不满足hard margin时造成的损失,最常见的就是hinge loss,即,引入松弛变量slack variables就可以等价转写为楼上各位回答中的形式。我们这里就直接讨论更一般的情形。
C>0可以认为是一个罚参数,表示对后面一项的惩罚程度。理解这种问题的一个通用思路就是试试看在极端值会发生什么。
当C=0时,直接忽略,也就是说不论分离超平面位置在哪里,都不会对目标函数造成损失,问题就变为,那么他的解就是。
当C=inf时,损失函数即使只增加一点点,都会导致目标函数值变为正无穷,也就硬性要求,此时问题等价于hard margin,如果线性不可分,也就无可行解了。如果不这么极端,C只是充分大,那么就要求loss function尽可能的小,即尽最大可能满足hard margin约束,这就会导致过拟合。
C这类罚参数的一个问题就是没有更直接的物理意义,一种解决方法就是用另一个更直观的参数来替代,最著名的就是了。(偷懒我就不写式子了)其中用参数取代了原来的C,的意义是margin errors(原文中把其定义为的点)的比例的上界,也就是说我最多允许个点越过margin bounds,不过也限定了支持向量比例的下界。
举个例子,,表示我最多允许一半的数据,但同时,至少有一半的数据最终都会作为支持向量。
最后,libsvm和R中都包含了哟!
参考文献:
Schölkopf B, Smola A J, Williamson R C, et al. New Support Vector Algorithms[J]. Neural Computation, 2000, 12(5):1207-1245.
Chang, ChihChung, Lin, et al. LIBSVM: A library for support vector machines[J]. Acm Transactions on Intelligent Systems & Technology, 2011, 2(3):389-396.
题主如果不想去探讨数学上的意义,那么记住结论就好了。 svm训练中,参数c取得越大,就是对错分样本的惩罚越大,极端情况下,就是训练出来的分类器使得每个训练样本都正确分类。那么想象一下,在有噪声样本的情况下,这么做会导致过拟合。
参数c取得越小,就会有越多的样本被训练出来的分类器错分,一些正常的样本也被当成噪声处理了。
所以应该取合适的c,不过如何取这个c也是挺麻烦的。
如果你只是用SVM做个分类应用的话,那简单理解就可以了。
记住 C是惩罚参数 就好。
惩罚参数是用来惩罚什么的呢? 答:惩罚 训练误差 。
1、若C的值取得大一点,意味着对训练误差的惩罚力度大一点,此时能把训练数据分类的误差控制的很好(提高模型在训练数据集上的分类正确率),但也带来了分类间隔过小的问题。由于分类间隔过小,把训练所得的分类器向更大的测试样本推广时,泛化能力会受到影响。
2、若C的值取得适当小一点,往往能更好地平衡分类间隔和训练误差的关系。我们适当允许一些训练样本在分类时出错,以此获得更大的分类间隔,使得在推广到更大的测试样本时效果更好一些。
具体调参,一般是用 10折交叉验证(思路:把数据集分割依次测试)+网格搜索法(思路:先迈大步子再迈小步子) 进行的。
详细算法的话,参考一下周志华老师写的书,或者从知网上下一篇用SVM做实验的硕士论文,都会细讲。
用于调节对模型复杂度的抑制程度