已经是大二新学期的第六周周末了,一番瞎折腾之后,还是想抽出一部分精力来搞一搞机器学习的理论部分,趁年轻,万一哪天开悟了。。。好了,除了废话不多了,博客以后正常更新噢,不光是机器学习的,还有其他方面的系列学习笔记,希望能有所收获( ̄︶ ̄)↗
接着之前的两篇博客:
现在来说说软间隔和正则化。
软间隔
软间隔要解决的问题
SVM是解决线性可分问题的,如果线性不可分,那就引入核函数,使其在更高的维度上可分,虽说一定存在一个超平面使其可分(不出任何差错,这即是之前所说的“硬间隔”),但容易发生过拟合的风险,训练效果反而不好。所以,缓解的办法就是允许支持向量在一些样本上出错,这便引入了“软间隔”。
如上图,“软间隔”允许某些样本不满足约束:
yi(ωTx+b)>=1(2)
当然,在最大化间隔的同时,也需要让不满足约束的样本尽可能的少,于是,优化目标可以些为:
minω,b12||ω||2+Cm∑i=1l0/1(yi(ωTxi+b)−1)(1)
其中,是一个常数,
是一个“0/1损失函数”
l0/1(z)={1ifz<00otherwise
为惩罚参数,和逻辑回归等其他算法模型中的正则化参数一样,都是用于调节分类误差和模型复杂度代价的权重,使模型在保证分类误差最小的情况得到最大间隔超平面。
越大,对分类错误的惩罚越大(因为(1)式要求的是最小值,而
的增大产生了阻碍),C为无穷大时,式(1)迫使所有样本均满足约束条件(2)。
取有限值时,允许一些样本不满足约束。
然而,一般不使用作为损失函数,因为它非凸,不连续,通常采用下面的函数来代替它,称为“替代损失”(surrogate loss):
hinge损失:
指数损失(exponential loss):
对率损失(logistic
loss):
若采用hinge损失,则式(1)变成:
minω,b12||ω||2+Cm∑i=1max(0,1−yi(ωTxi+b)).(3)
松弛变量

SVM对训练集里面的每个样本引入了一个松弛变量
,使函数间隔加上松弛变量大于等于1,也就是说:
yi(ω∙xi+b)≥1−ξi
对比硬间隔最大化,可以看到我们对样本到超平面的函数距离的要求放松了,之前是一定要大于等于1,现在只需要加上一个大于等于0的松弛变量能大于等于1就可以了。当然,松弛变量不能白加,这是有成本的,每一个松弛变量, 对应了一个代价
,这个就得到了我们的软间隔最大化的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
其中,是拉格朗日乘子。
令对
的偏导为零可得:
∂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
注:
- 范数的定义:
这个式子和我们上一篇线性可分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相比,我们仅仅是多了一个约束条件。我们依然可以通过SMO算法来求上式极小化时对应的
向量就可以求出
和
了。
软间隔SVM也可以用于非线性支持向量机,只需要将内积改为的内核即可。软间隔支持向量的代价函数既考虑了样本分类误差,又考虑了模型的复杂度,通过调节其中的参数可以使函数既能够兼顾训练集上的分类精度,又控制模型复杂度,使模型泛化能力增加。因此,我们实际中所使用的SVM分类器基本上属于这一类。
总结成一句话:支持向量机就是使用了核函数的软间隔线性分类法。
看书&&看大神们博客的整理,给以后复习记下笔记,也希望对你有用( ̄︶ ̄)↗
支持向量机的故事还在继续,我会持续更新哒~~也希望能关注一波我的独立博客——白水东城(●'◡'●)
参考: