参考:http://blog.csdn.net/ajianyingxiaoqinghan/article/details/72897399 部分图片来自于上面博客。
0 由来
在二分类问题中,我们可以计算数据代入模型后得到的结果,如果这个结果有明显的区别,这就说明模型可以把数据分开。那么,怎么表示“区别”这个词呢,拿最简单的二维问题来讲,“区别”可以是数据点分布在一条直线的两侧,而数据点代入方程后得到的结果符号是不同的,这就达到了分类的目的。 而SVM的思想也是这样,目的就是找到一个超平面,将数据点都正确地分在超平面的两侧。那么,又怎么表示这个“都正确”呢?可以这样考虑:就是让那些“很有可能不正确”的数据点彼此分开得明显一点就可以了。对于其它“不那么可能不正确”或者说“一看就很正确”的数据点,就可以不用管了。这也是SVM名称的由来,模型是由那些支持向量(Support Vector)决定的。这也是为什么SVM对outlier不敏感。1 间隔
遵循上面的逻辑,我们去假设空间里找模型了。但是一下子出来好多个模型都符合我们的要求,怎么办?自然我们想要找到“最优”的那一个模型。那么,怎么衡量这个“最优”呢?根据【超平面】【数据点】【分开】这几个词,我们可以想到最优的模型必然是最大程度地将数据点划分开的模型,不能靠近负样本也不能靠近正样本,要不偏不倚,并且与所有Support Vector的距离尽量大才可以。这就引出了间隔的讨论。
上图中 x0 是 x 在超平面上的投影,
x−x0=γω∥ω∥(1.1)
两边同乘
ωT
并利用
ωTx0+b=0,ωTω=∥ω∥2
得到:
γ=ωT+b∥ω∥=f(x)∥ω∥(1.2)
当然,上式是带正负号的,如果要得到正值,即点到超平面的距离,乘上数据点的类别就好:
γ~=yγ(1.3)
2 最大间隔分类器
上面我们推导出了间隔的表达式,自然的,我们想让数据点离超平面越远越好。
回顾一下,在这样的模型中,我们只考虑那些支持向量就可以了,对于那些显然可以分类成功的数据点,我们顺带着讨论它们就可以。
不妨令那些“有可能分类不成功的点”,即靠近超平面的点,分布在超平面 ωTx+b=±1 上,这里的取值 1 只是为了方便推导,后面我们可以看到,这个值不影响最后的优化过程。
这样,支持向量到达我们要优化的超平面 ωTx+b=0 的距离就是 1∥ω∥ ,两侧的距离加起来就是 2∥ω∥ ,同时,我们要求模型对正负样本要做到“不偏不倚”,对于这一条,我们加上限制条件 y(ωT+b)⩾1 就好。于是我们得到了不等式约束优化问题:
⎧⎩⎨⎪⎪max2∥ω∥s.t.yi(ωTxi+b)⩾1,i=1,2,...,m(2.1)
为了方便推导,上式可以等价地写成:
⎧⎩⎨min12∥ω∥2s.t.yi(ωTxi+b)⩾1,i=1,2,...,m(2.2)
3 拉格朗日乘子法对偶问题
(2.2) 的优化目标是二次的,约束是线性的,整体是一个凸二次规划问题。有现成的优化包可以求解。但将其转化为拉格朗日对偶问题后求解更容易,也方便我们后面引入核函数。
对式 (2.2) 的每一个不等式约束条件(m个数据点共有m个不等式)设置对应的拉格朗日乘子 αi>0 ,得到原始问题的拉格朗日函数:
L(ω,b,α)=12∥ω∥2+∑i=1mαi[1−yi(ωTxi+b)](3.1)
目标是让拉格朗如函数
L(ω,b,α)
针对
α
达到最大值。为什么能够这么写呢,我们可以这样想,哪怕有一个
yi(ωTxi+b)⩾1
不满足,只要让对应的
αi
是正无穷就好了。所以,如果
L(ω,b,α)
有有限的最大值,那么那些不等式条件是自然满足的。 之后,我们再让
L(ω,b,α)
针对
ω,b
达到最小值,就可以了。 从而,我们的目标函数变成:
minω,bmaxαL(ω,b,α)=p∗(3.2)
为方便求解,我们将 min 和 max 的位置交换一下:
maxαminω,bL(ω,b,α)=d∗(3.3)
可以证明,
d∗⩽p∗
,可以通过求解
d