引言
——“举牌子:Support Vector Machines ”
- 一直在犹豫要不要写SVM,因为网上已经有很多详细的SVM原理的解释甚至详细推导,而这东西又庞大复杂,想了解的话直接可以参考。说实话,SVM确实到现在也不是说很懂,感觉最恐怖的是对偶问题后的KKT推导、Mercer定理以及最后的参数求解。随便拿出来一个都是及其晦涩的数学问题。无奈水平不行,只能囫囵吞枣。
- 之所以决定要敲一下SVM的知识,大概是觉得从头到尾写一遍心里才踏实。将来回头看看,自己好像“用心”学过一遍SVM的样子。毕竟这辈子能学几个SVM呢?
- 最后一点,也是最能说服自己的一点,就是想近距离探索SVM的数学之美,向SVM的创始人及研究者致敬,向网络上的写过SVM的博主们学习。
- 下面就进入这个被冠以“迄今为止最强有监督学习分类器”、“让应用数学家真正得到应用”以及“某届G20会场外,被外国小哥高举的Support…”等称号的传奇机器学习算法——SVM。
初识SVM
- 关于SVM最早的一篇文章是由 Bernhard E. Boser等人在1992年发表的A training algorithm for optimal margin classifiers,感兴趣可以拜读一下这篇文章。瞻仰一下0.0(数据挖掘:理论与算法PPT中摘的图,图中引用数据截至2016):
- 简单的概括SVM:就是寻找具有最大边缘(间隔)的超平面,位于间隔里面的平行的超平面,都能实现对数据点的线性可分。同时,面对线性不可分的情况,需要适当放宽这个间隔,引入软间隔和松弛因子。而面对更复杂的低维线性不可分的情况,通过使用核函数将数据点映射到高维,进行寻找超平面进行划分。
- 初识SVM主要介绍最大边缘超平面以及支持向量的概念。
1. 从线性分类器到最大边缘超平面
(1) 线性分类器
- 对于一个二维空间线性可分问题如下图所示:
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/e5ee511268641cf225096733fc747489.png)
- 解决上图蓝点和红圈的二分类问题,就是要找到一个超平面 w⃗ ⋅x⃗ +b=0 w → ⋅ x → + b = 0 使得:
{ w⃗ ⋅x⃗ +b>0x⃗ ∈{ 红圈数据点}w⃗ ⋅x⃗ +b>0x⃗ ∈{ 蓝圈数据点} { w → ⋅ x → + b > 0 x → ∈ { 红 圈 数 据 点 } w → ⋅ x → + b > 0 x → ∈ { 蓝 圈 数 据 点 }其中, w⃗ ⋅x⃗ =∑iwixi w → ⋅ x → = ∑ i w i x i 表示向量 w⃗ =(w1,w2) w → = ( w 1 , w 2 ) 与 x⃗ =(x1,x2) x → = ( x 1 , x 2 ) 内积,这里的数据点用向量 x⃗ x → 形式表示。向量 w⃗ w → 的方向与超平面垂直。简单证明:设超平面上有两个点 x⃗ 1,x⃗ 2 x → 1 , x → 2 ,则 { w⃗ ⋅x⃗ 1+b=0=w⃗ ⋅x⃗ 2+b}⇒w⃗ ⋅(x⃗ 1−x⃗ 2)=0 { w → ⋅ x → 1 + b = 0 = w → ⋅ x → 2 + b } ⇒ w → ⋅ ( x → 1 − x → 2 ) = 0 ,即向量 w⃗ w → 与超平面垂直。
- 该超平面与分类判决准则可以构成一个线性分类器:
f(x,w,b)=sign(g(x))=sign(w⋅x+b) f ( x , w , b ) = s i g n ( g ( x ) ) = s i g n ( w ⋅ x + b )其中, sign(⋅) s i g n ( ⋅ ) 表示符号函数。注:为了方便起见,从这里开始 w w 和 分别表示向量 w⃗ w → 和 x⃗ x → (不想每次都要敲\vec -.-,前面那样写主要是想说一下 w w 的方向问题。)
(2) 点到超平面的距离
设二维空间存在一个超平面实现二类可分如下图所示:
图中的斜线表示超平面 ,二维平面上一点 X X 在超平面的距离投影为 ,则二者关系可表示为 X=X′+λw(w表示超平面的梯度向量也就是(1)中的w⃗ ) X = X ′ + λ w ( w 表 示 超 平 面 的 梯 度 向 量 也 就 是 ( 1 ) 中 的 w → ) 。将 X X 带入到 得:
g(X)=w⋅X+b=w⋅(X′+λw)+b=w⋅X′+b+λw⋅w=0+λw⋅w=λw⋅w g ( X ) = w ⋅ X + b = w ⋅ ( X ′ + λ w ) + b = w ⋅ X ′ + b + λ w ⋅ w = 0 + λ w ⋅ w = λ w ⋅ w点到超平面的距离即是 X X 与 之间的距离:
||X−X′||=||λw||=|g(X)|w⋅w⋅||w||=|g(X)|||w|| | | X − X ′ | | = | | λ w | | = | g ( X ) | w ⋅ w ⋅ | | w | | = | g ( X ) | | | w | |该公式也就是高等数学中的点到平面的距离公式,只不过这里点和平面表达式的系数都用向量表示了。这里没有从函数间隔和几何间隔的角度引入距离。同理直接带入原点坐标可得原点到超平面的距离为 |b|||w|| | b | | | w | | 。
(2) 最大边缘超平面
- 对于二分类问题,我们的目的就是寻找一个超平面能够实现能正确地进行划分。对于有限的训练集(数据点集)而言,存在无数个这样的超平面。
- 而有的超平面虽然能够对测试集进行很好的划分,但会出现测试数据明明很靠近一个正类却被划分到负类的情况出现。
- 因此我们要选择一个最好的超平面,在划分的时候,不偏不倚,留足两边的空余,从而达到均衡地划分。继而该超平面应用在测试集上时,能够实现稳定平衡地划分,而该平面则被称为最大边缘超平面,所谓边缘就是超平面两边的空余。如下图所示:
-
下面来定量地求这个边缘宽度,假设二维空间存在二分类的数据点,设 g(x)=w⋅x+b g ( x ) = w ⋅ x + b ,对于下图而言:
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/be6a342145bfe36b733c6017fe192672.png)
- 设正类( yi=+1 y i = + 1 )为红色数据点满足 g(x)=w⋅xi+b≥1 g ( x ) = w ⋅ x i + b ≥ 1 ,负类( yi=−1 y i = − 1 )为蓝色数据点满足 g(x)=w⋅xi+b≤−1 g ( x ) = w ⋅ x i + b ≤ − 1 。设分类超平面为 g(x)=w⋅x+b=0 g ( x ) = w ⋅ x + b = 0 ,则边界上的点到该分类超平面的距离之和为 |1|||w||+|−1|||w||=2||w|| | 1 | | | w | | + | − 1 | | | w | | = 2 | | w | | 。我们要求使得该距离之和最大的一组超平面参数。则整个过程用数学公式描述为:
max2||w||s.t. yi(w⋅xi+b)≥1 m a x 2 | | w | | s . t . y i ( w ⋅ x i + b ) ≥ 1问题等价于min 12||w||2s.t. yi(w⋅xi+b)≥1 m i n 1 2 | | w | | 2 s . t . y i ( w ⋅ x i + b ) ≥ 1显然,这是个带有约束条件的求极值问题,问题求解在后面。
2. 从线性不完全可分到软间隔与松弛变量
(1) 线性不完全可分
- 线性不完全可分(这其实是自己理解的说法):由于噪声存在或者数据本身分布有偏差(异常分布的点),现实中大多数情况下,很难实现二类问题的完美划分。如下图所示:
-
- 图中,我们很难找到(或者说不存在)一个具有最大边缘(max margin)能够实现红蓝数据点完全分隔且最大间隔内没有数据点分布的超平面。从而造成原来的约束条件无法被满足,无法求解。
(2) 软间隔与松弛变量
- 针对线性不完全可分的问题,需要引入软间隔(soft margin)的概念:在原来的约束条件上加上一个参数适当放宽原判别准则(限制条件):
yi(w⋅xi+