关于SVM中,对常数C的理解?

理由
举报 取消

最近在看一些数据挖掘方面的论文,偶然看到一位师兄对支持向量机中常数C的解释:对于常数C,在我之前查到的资料中,是这样写的:“C值较大,表明越不希望看到离群点。”由于自己在数学方面的知识储备并不是很丰富,所以想请教一下各位知友:SVM的常数C,到底应该怎么理解?谢谢大家!!—-大年初一,祝知友们猴年快乐,天天开心。祝知乎在猴年越办越好!!

2017年5月13日 10 条回复 1946 次浏览

发起人:Ryan Fan 管理专家

正在搞机器学习,干过搜索引擎,码农

回复 ( 10 )

  1. 王赟 Maigo
    理由
    举报 取消

    按照LibSVM的习惯,SVM的目标函数是这样的:

    这里的参数C代表的是在线性不可分的情况下,对分类错误的惩罚程度。

    C值越大,分类器就越不愿意允许分类错误(“离群点”)。如果C值太大,分类器就会竭尽全力地在训练数据上少犯错误,而实际上这是不可能/没有意义的,于是就造成过拟合。

    而C值过小时,分类器就会过于“不在乎”分类错误,于是分类性能就会较差。

  2. 顾凌峰
    理由
    举报 取消

    你可以把这个参数C理解为调节优化方向中两个指标(间隔大小,分类准确度)偏好的权重。soft-margin SVM针对hard-margin SVM容易出现的过度拟合问题,适当放宽了margin的大小,容忍一些分类错误(violation),把这些样本当做噪声处理,本质上是间隔大小和噪声容忍度的一种trade-off,至于具体怎么trade-off,对哪个指标要求更高,那就体现在C这个参数上了。

    如 @王赟 Maigo 所使用的hinge损失函数来表示对于样本的分类偏差loss = \max \left( {0,1 - y\left( {{{\bf{w}}^T}{\bf{x}} + b} \right)} \right),引入松弛变量把优化问题写为:

    \begin{align}
\mathop {\min }\limits_{{\bf{w}},b,{\bf{\xi }}}& \quad \frac{1}{2}{\left\| \bf{w} \right\|^2} + C\sum\limits_{i = 1}^n {{\xi _i}} \\
s.t. & \quad {y_i}\left( {{{\bf{w}}^T}{{\bf{x}}_i} + b} \right) \ge 1 - {\xi _i} \\
& \quad {\xi _i} \ge 0 \\
& \quad i = 1,2, \ldots ,N
\end{align}

    这里的\xi_i就是对于第i个样本点的分类损失,如果分类正确则是0,如果分类有所偏差则对应一个线性的值, \sum\limits_{i = 1}^n {{\xi _i}}是总误差,我们优化的目标当然是这个值越小越好,越小代表对训练集的分类越精准。目标函数中的另一项\left\| \bf{w} \right\|^2(常数1/2是为了方便求导加上去的)的最小化的优化方向则是使间隔大小2/\left\| \bf{w} \right\|最大。

    原则上C可以根据需要选择所有大于0的数。C越大表示整个优化过程中对于总误差 \sum\limits_{i = 1}^n {{\xi _i}}的关注程度越高,对于减小误差的要求越高,甚至不惜使间隔减小。

    • 当C趋于无穷大时,这个问题也就是不允许出现分类误差的样本存在,那这就是一个hard-margin SVM问题
    • 当C趋于0时,我们不再关注分类是否正确,只要求间隔越大越好,那么我们将无法得到有意义的解且算法不会收敛。

    这里有一组Guassian kernel/soft-margin SVM在不同参数C下的实验结果[1]:

    C值越大对于训练集的表现越好,但是间隔减小也就是对于噪声等干扰的容忍度减小,可能引发过度拟合(overfitting),这时说明对于噪声的惩罚力度太大。

    想象我们要挑选合适的记者去参与新闻的采访报道。那么现在的评价指标有两个,一个是记者对于新闻的灵敏度,是否跑的快善于弄大新闻(间隔大小),一个是基于过去的表现(训练集)记者对于新闻报道的准确性如何,是否产生偏差,专业素质知识水平如何(分类误差),hard-margin SVM是挑选看上去报道准确知识水平最高的记者中跑得最快的,可能导致换个采访话题就出现偏差。而soft-margin则看重记者跑得快弄大新闻的潜力,在过去的专业表现上作出一定的妥协,允许她问出一些肤浅的问题,C越小说明越不关心记者的知识水平,当C趋近于0时,可能出现当众热恼interviewee然后被怒斥的场面(算法发散且得出的解都无意义)

    很惭愧,只做了一些微小的工作。

    最后祝大家身体健康,提前连任。

    参考资料:

    [1] Machine Learning Techniques:

  3. 司大林
    理由
    举报 取消

    最近在研究svm的相关课题,正好答一下:

    C又称为penalty term,指的是SVM里拉格朗日乘数的约束程度。

    为什么需要C:

    上图明显是一个过度拟合的问题,为了解决这类问题或者甚至为了解决某些非线性可分的问题,C的大小决定了对于outlier的忍受程度。忍受程度越强,支持向量就越多(support vector)。下图为例,圆圈标记的则为支持向量:

    总的来说,C值越大,越过度拟合;反之有可能欠拟合。C值的最优解通常通过grid search得到。

    图片来源Stackoverflow

  4. modelG
    理由
    举报 取消

    结论: 1/C的作用和l2 regularization coefficient的作用是一样的。

    下面是解释

    1. 就像 @王赟 Maigo 的回答里提到的那样, 教科书中的SVM通常是这样的 (L2 SVM):

    2. 这个优化问题是哪里来的呢?考虑到SVM使用的是hinge loss,上述regularized optimization 问题实际上是这样的:

    \min_\omega \mathcal{L} = \min_\omega \{ \frac{1}{2} \omega^T\omega + C \sum_{n=1}^{N}\max[0,1-y_n (\omega^T\cdot x_n)]\}

    其中,最右边的项是hinge loss (习惯问题,我把(1)里面的样本下标(i,l)写成(n,N)了)

    3. 等价地,(2)里面的目标函数稍加整理/变化以后是这样的:

    \min_\omega \mathcal{L} = \min_\omega \sum_{n=1}^{N}\max[0,1-y_n (\omega^T\cdot x_n)] +  \frac{1}{2C} ||\omega||^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 做线性变换Ax以后,可以对参数做相应的线性变换A^{-1}W 得到完全相同的预测结果)。

  5. 卡牌大师
    理由
    举报 取消

    可以理解为对分类错误的容忍度或者对分类错误的惩罚力度

    C越大表示惩罚越大,越不能容忍错误,容易造成over fitting

    C越小与之相反,容易造成underfitting 。

    工业上经常默认使用1。

    然后会grid search尝试0.1,0.5,10等等数字

  6. 王腾云
    理由
    举报 取消

    感觉楼上回答没有击中要害,所以怒答此题。。。。。

    要理解C的含义,就需要理解\xi_{i}的含义:\xi_{i}可以理解为hinge loss,而当几何间距(geometric margin)小于1时hinge loss时是一条直线(图像见答案末),那么乘以C可以理解为这条直线的斜率。可以类比L1正则和L2正则中的\lambda

    ———————————————————————————————-

    以下是详细步骤:

    SVM的目标问题:

    应用拉格朗日乘子法得

    l(\omega ,b,\xi,\alpha ,r )=\frac{1}{2} \omega^{T}\omega+C\sum_{i=1}^{m}{\xi_i} -\sum_{i=1}^{m}{\alpha_i[y^{(i)}(\omega^T x^{(i)}+b)-1+\xi_i ]} - \sum_{i=1}^{m}{r_i\xi_i}

    那么对待优化变量求偏微分

    \frac{\partial l}{\partial\omega} =0 \Rightarrow w=\sum_{i=1}^{m}{\alpha_i y^{(i)} x^{(i)} } (1)

    \frac{\partial l}{\partial b} =0 \Rightarrow \sum_{i=1}^{m}{\alpha_i y^{(i)} }  = 0 (2)

    \frac{\partial l}{\partial\xi_{i}} =0 \Rightarrow \alpha_{i}=C-r_{i} (3)

    根据KKT互补条件,

    \alpha_i[y^{(i)}(\omega^T x^{(i)}+b)-1+\xi_i ]=0 (4)

    r_{i}\xi_{i}=0 (5)

    所以,将(3) (4) (5)带入以下式子

    \alpha_{i}=0 \Rightarrow r_{i}=C, \xi_{i}=0 \Rightarrow y^{(i)}(\omega^T x^{(i)}+b) \geq  1,几何间距>=1样本的\xi_{i}=0

    0<\alpha_{i}<C \Rightarrow r_{i}>0 , \xi_{i}=0 \Rightarrow y^{(i)}(\omega^T x^{(i)}+b)=1-\xi_{i} = 1,几何间距为1的样本,也就是支持向量的\xi_{i}=0

    \alpha_{i}=C \Rightarrow r_{i}=0, \xi_{i}\geq 0 \Rightarrow y^{(i)}(\omega^T x^{(i)}+b)=1-\xi_{i}\leq 1只有样本与决策边界的几何间距(geometric margin)小于1时,\xi_{i}>0才成立。而且他们之间的等式关系为\xi_{i}=1-y^{(i)}(\omega^T x^{(i)}+b)

    ———————————————————————————————-

    hinge loss定义如下:

    l(x,y)=max(0,1-y*h(x))

    可以发现我们以上求出的\xi_{i}=1-y^{(i)}*h(x^{(i)})就是hinge loss 的形式。

    ———————————————————————————————-

    当y=1时,hinge loss图中蓝色的线条,纵坐标为hinge loss,横坐标为y*h(x),即为几何间距。

    也就是C=1的特例

  7. Zhang Yao
    理由
    举报 取消

    楼上各位大神都回答的很详尽了,那我来从优化的角度答一发。偷懒,公式粗体什么的都没加,图也懒得上了XD。

    我们只关注原问题,因为原问题比对偶问题更直观一些。并且把约束条件直接放到目标函数中,即

    \min_{w,b}~\frac{1}{2}\|w\|^2 + C\sum_i \ell[y_i(w^Tx_i+b)-1],

    这里的\ell(\cdot)是一个损失函数loss function,表示不满足hard margin时造成的损失,最常见的就是hinge loss,即\ell(z)=\max(0, 1-z),引入松弛变量slack variables就可以等价转写为楼上各位回答中的形式。我们这里就直接讨论更一般的情形。

    C>0可以认为是一个罚参数,表示对后面一项的惩罚程度。理解这种问题的一个通用思路就是试试看在极端值会发生什么。

    当C=0时,C\sum_i \ell[y_i(w^Tx_i+b)-1]直接忽略,也就是说不论分离超平面位置在哪里,都不会对目标函数造成损失,问题就变为\min~\frac{1}{2}\|w\|^2,那么他的解就是w = \bold{0}

    当C=inf时,损失函数即使只增加一点点,都会导致目标函数值变为正无穷,也就硬性要求\ell[y_i(w^Tx_i+b)-1]=0,此时问题等价于hard margin,如果线性不可分,也就无可行解了。如果不这么极端,C只是充分大,那么就要求loss function尽可能的小,即尽最大可能满足hard margin约束,这就会导致过拟合。

    C这类罚参数的一个问题就是没有更直接的物理意义,一种解决方法就是用另一个更直观的参数来替代,最著名的就是\nu-\mathrm{SVM}了。(偷懒我就不写式子了)其中用参数\nu \in (0, 1]取代了原来的C,\nu的意义是margin errors(原文中把其定义为\xi_i >0的点)的比例的上界,也就是说我最多允许\nu m个点越过margin bounds,不过\nu也限定了支持向量比例的下界。

    举个例子,\nu=0.5,表示我最多允许一半的数据y_i(w^Tx_i+b)<1,但同时,至少有一半的数据最终都会作为支持向量。

    最后,libsvm和R中都包含了\nu-\mathrm{SVM}哟!

    参考文献:

    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.

  8. 十全十美
    理由
    举报 取消

    题主如果不想去探讨数学上的意义,那么记住结论就好了。 svm训练中,参数c取得越大,就是对错分样本的惩罚越大,极端情况下,就是训练出来的分类器使得每个训练样本都正确分类。那么想象一下,在有噪声样本的情况下,这么做会导致过拟合。

    参数c取得越小,就会有越多的样本被训练出来的分类器错分,一些正常的样本也被当成噪声处理了。

    所以应该取合适的c,不过如何取这个c也是挺麻烦的。

  9. 持觞仗剑
    理由
    举报 取消

    如果你只是用SVM做个分类应用的话,那简单理解就可以了。

    记住 C是惩罚参数 就好。

    惩罚参数是用来惩罚什么的呢? 答:惩罚 训练误差

    1、若C的值取得大一点,意味着对训练误差的惩罚力度大一点,此时能把训练数据分类的误差控制的很好(提高模型在训练数据集上的分类正确率),但也带来了分类间隔过小的问题。由于分类间隔过小,把训练所得的分类器向更大的测试样本推广时,泛化能力会受到影响。
    2、若C的值取得适当小一点,往往能更好地平衡分类间隔和训练误差的关系。我们适当允许一些训练样本在分类时出错,以此获得更大的分类间隔,使得在推广到更大的测试样本时效果更好一些。

    具体调参,一般是用 10折交叉验证(思路:把数据集分割依次测试)+网格搜索法(思路:先迈大步子再迈小步子) 进行的。

    详细算法的话,参考一下周志华老师写的书,或者从知网上下一篇用SVM做实验的硕士论文,都会细讲。

  10. 彭一洋
    理由
    举报 取消

    用于调节对模型复杂度的抑制程度

我来回答

Captcha 点击图片更换验证码