机器学习入门|支持向量机(三)-软间隔与正则化

774 阅读7分钟
原文链接: click.aliyun.com

已经是大二新学期的第六周周末了,一番瞎折腾之后,还是想抽出一部分精力来搞一搞机器学习的理论部分,趁年轻,万一哪天开悟了。。。好了,除了废话不多了,博客以后正常更新噢,不光是机器学习的,还有其他方面的系列学习笔记,希望能有所收获( ̄︶ ̄)↗ 

接着之前的两篇博客:

现在来说说软间隔和正则化。

软间隔

软间隔要解决的问题

SVM是解决线性可分问题的,如果线性不可分,那就引入核函数,使其在更高的维度上可分,虽说一定存在一个超平面使其可分(不出任何差错,这即是之前所说的“硬间隔”),但容易发生过拟合的风险,训练效果反而不好。所以,缓解的办法就是允许支持向量在一些样本上出错,这便引入了“软间隔”。
WeChat_Image_20180408163547

如上图,“软间隔”允许某些样本不满足约束:

yi(ωTx+b)>=1(2)

当然,在最大化间隔的同时,也需要让不满足约束的样本尽可能的少,于是,优化目标可以些为:

minω,b12||ω||2+Cm∑i=1l0/1(yi(ωTxi+b)−1)(1)

其中,C
                                                            是一个常数,l_{0/1} 是一个“0/1损失函数”

l0/1(z)={1ifz<00otherwise

C>0
                                                            惩罚参数,和逻辑回归等其他算法模型中的正则化参数一样,都是用于调节分类误差和模型复杂度代价的权重,使模型在保证分类误差最小的情况得到最大间隔超平面C 越大,对分类错误的惩罚越大(因为(1)式要求的是最小值,而C 的增大产生了阻碍),C为无穷大时,式(1)迫使所有样本均满足约束条件(2)。C 取有限值时,允许一些样本不满足约束。

然而,一般不使用l_{0/1}
                                                            作为损失函数,因为它非凸,不连续,通常采用下面的函数来代替它,称为“替代损失”(surrogate loss):
hinge损失:l_{hinge}(z)=m ax(0,1-z)
指数损失(exponential loss):l_{exp}(z)=e xp(-z)
对率损失(logistic loss):l_{log}(z)=l og(1+exp(-z))
WeChat_Image_20180408173036

若采用hinge损失,则式(1)变成:

minω,b12||ω||2+Cm∑i=1max(0,1−yi(ωTxi+b)).(3)

松弛变量

WeChat_Image_20180408193015

SVM对训练集里面的每个样本(x_i,y_i) 引入了一个松弛变量\xi_i \geq 0 ,使函数间隔加上松弛变量大于等于1,也就是说:

yi(ω∙xi+b)≥1−ξi

对比硬间隔最大化,可以看到我们对样本到超平面的函数距离的要求放松了,之前是一定要大于等于1,现在只需要加上一个大于等于0的松弛变量能大于等于1就可以了。当然,松弛变量不能白加,这是有成本的,每一个松弛变量\xi_i , 对应了一个代价\xi_i ,这个就得到了我们的软间隔最大化的SVM学习条件,也就是把(3)重写为:

minω,b,ξi12||ω||22+Cm∑i=1ξi

s.t.yi(ωTxi+b)≥1−ξi(i=1,2,...m)

ξi≥0(i=1,2,...m)

这就是“软间隔支持向量机”

注意:

  • 并非所有的样本点都有一个松弛变量与其对应。实际上只有“离群点”才有,或者也可以这么看,所有没离群的点松弛变量都等于0(对负类来说,离群点就是在前面图中,跑到H2右侧的那些负样本点,对正类来说,就是跑到H1左侧的那些正样本点)。
  • 松弛变量的值实际上标示出了对应的点到底离群有多远,值越大,点就越远。
  • 惩罚因子C决定了你有多重视离群点带来的损失,显然当所有离群点的松弛变量的和一定时,你定的C越大,对目标函数的损失也越大,此时就暗示着你非常不愿意放弃这些离群点,最极端的情况是你把C定为无限大,这样只要稍有一个点离群,目标函数的值马上变成无限大,马上让问题变成无解,这就退化成了硬间隔问题。
  • 惩罚因子C不是一个变量,整个优化问题在解的时候,C是一个你必须事先指定的值,指定这个值以后,解一下,得到一个分类器,然后用测试数据看看结果怎么样,如果不够好,换一个C的值,再解一次优化问题,得到另一个分类器,再看看效果,如此就是一个参数寻优的过程,但这和优化问题本身决不是一回事,优化问题在解的过程中,C一直是定值,要记住。
  • 尽管加了松弛变量这么一说,但这个优化问题仍然是一个优化问题(汗,这不废话么),解它的过程比起原始的硬间隔问题来说,没有任何更加特殊的地方

引入拉格朗日乘子

那么,问题就和之前的一样了,通过引入拉格朗日乘子,来将有不等式约束条件的转化为无约束的:

L(ω,b,ξ,α,μ)=12||ω||22+Cm∑i=1ξi−m∑i=1αi[yi(ωTxi+b)−1+ξi]−m∑i=1μiξi

其中,\mu_i \geq 0, \alpha_i \geq 0 是拉格朗日乘子。

L \omega, b, \xi 的偏导为零可得:

∂L∂ω=0⇒ω=m∑i=1αiyixi

∂L∂b=0⇒m∑i=1αiyi=0

∂L∂ξ=0⇒C−αi−μi=0

L(ω,b,ξ,α,μ)=12||ω||22+Cm∑i=1ξi−m∑i=1αi[yi(ωTxi+b)−1+ξi]−m∑i=1μiξi =12||ω||22−m∑i=1αi[yi(ωTxi+b)−1+ξi]+m∑i=1αiξi=12||ω||22−m∑i=1αi[yi(ωTxi+b)−1]=12ωTw−m∑i=1αiyiwTxi−m∑i=1αiyib+m∑i=1αi=12ωTm∑i=1αiyixi−m∑i=1αiyiwTxi−m∑i=1αiyib+m∑i=1αi=12ωTm∑i=1αiyixi−ωTm∑i=1αiyixi−m∑i=1αiyib+m∑i=1αi=−12ωTm∑i=1αiyixi−m∑i=1αiyib+m∑i=1αi=−12ωTm∑i=1αiyixi−bm∑i=1αiyi+m∑i=1αi=−12(m∑i=1αiyixi)T(m∑i=1αiyixi)−bm∑i=1αiyi+m∑i=1αi=−12m∑i=1αiyixTim∑i=1αiyixi−bm∑i=1αiyi+m∑i=1αi=−12m∑i=1αiyixTim∑i=1αiyixi+m∑i=1αi=−12m∑i=1,j=1αiyixTiαjyjxj+m∑i=1αi=m∑i=1αi−12m∑i=1,j=1αiαjyiyjxTixj

注:

  • 范数的定义:||\omega||_2^2=\omega^Tw
  • (a+b+c+…)(a+b+c+…)=aa+ab+ac+ba+bb+bc+…

这个式子和我们上一篇线性可分SVM的一样。唯一不一样的是约束条件。现在我们看看我们的优化目标的数学形式:

max⏟αm∑i=1αi−12m∑i=1,j=1αiαjyiyjxTixj

s.t.m∑i=1αiyi=0

C−αi−μi=0

μi≥0(i=1,2,...,m),αi≥0(i=1,2,...,m)

这就是软间隔最大化时的线性可分SVM的优化目标形式,和硬间隔最大化的线性可分SVM相比,我们仅仅是多了一个约束条件0 \leq \alpha_i \leq C 。我们依然可以通过SMO算法来求上式极小化时对应的\alpha 向量就可以求出\omega b 了。

软间隔SVM也可以用于非线性支持向量机,只需要将内积改为的内核即可。软间隔支持向量的代价函数既考虑了样本分类误差,又考虑了模型的复杂度,通过调节其中的参数C 可以使函数既能够兼顾训练集上的分类精度,又控制模型复杂度,使模型泛化能力增加。因此,我们实际中所使用的SVM分类器基本上属于这一类。

总结成一句话:支持向量机就是使用了核函数的软间隔线性分类法。

看书&&看大神们博客的整理,给以后复习记下笔记,也希望对你有用( ̄︶ ̄)↗ 

支持向量机的故事还在继续,我会持续更新哒~~也希望能关注一波我的独立博客——白水东城(●'◡'●)

参考: