支持向量机(SVM)是一种二分类模型,它的思想和感知机很相似,也是在空间中找到一个超平面将正负样本点分开,也可以说SVM是在感知机基础上发展来的。所以在讲完感知机之后马上开始讲支持向量机。
1. 从感知机到支持向量机
感知机和支持向量机都是期望从空间中找到一个合适的分离超平面将两类数据正确分开。一般地,当训练数据集线性可分时,这样的超平面有无数多个。感知机利用所有误分类点到超平面总距离最小的方法求得超平面,这个超平面和参数初始值,误分类点选择顺序都有关,感知机的解依然有无数个。然而,我们模型的最终目标是在测试集上的泛化能力,这样的解虽然可以完全分开训练集数据,但是它们的泛化能力却千差万别,如下图中所示。
直观上看,我们应该去找位于两类样本“正中间”的那个分离超平面(上图中加粗的线),因为它对训练样本局部扰动的“容忍性”最好,换而言之,这个超平面所产生的分类结果是最鲁棒的,因此它对未知样本的泛化能力最强。这就是支持向量机的基本思想,通过对分离超平面进一步增加约束,得到唯一“最优”的超平面。
同时,支持向量机也可以通过软间隔最大化、核函数去学习近似线性可分甚至非线性的数据,这是相比感知机质的飞跃,也是SVM很长一段时间称霸机器学习领域的原因。这些东西将会放在后续几篇博客,本篇只讨论线性支持向量机对于线性可分数据的情况。
2. 线性可分SVM
现在我们的目标是在众多候选分离超平面中找到“正中间”的那个超平面,也称为最大间隔分离超平面。如字面意思,就是这个平面不仅要能正确分开样本点,还要对最难分的样本点(离超平面最近的点)也有足够大的确信度将它们分开。这样的超平面应该对未知的样本具有很好的分类预测能力。那么我们如何描述这样一个超平面呢?这里先引入函数间隔和几何间隔的概念。
函数间隔和几何间隔
对于给定的训练集 T T 和超平面 (w,b) ( w , b ) ,定义超平面 (w,b) ( w , b ) 关于样本点 (x(i),y(i)) ( x ( i ) , y ( i ) ) 的函数间隔为:
γ^i=y(i)(w⋅x(i)+b)(1) (1) γ ^ i = y ( i ) ( w ⋅ x ( i ) + b )
显然
γ^i≥0 γ ^ i ≥ 0 。
函数间隔可以衡量分类预测的正确性即预测度。在
w,b w , b 确定的情况下,离超平面越远的点,其
γ^i γ ^ i 值就越大,其分类正确的可信度就越高。但是在训练过程中
w,b w , b 是不确定的,我们只需要成比例增大
w,b w , b ,函数间隔也会成比例增大,但此时超平面并没有改变。为了统一度量,我们可以对超平面的法向量
w w 加某些约束,如规范化,
∥w∥2=1 ‖ w ‖ 2 = 1 ,使得函数间隔是确定的,这时函数间隔成为
几何间隔,和点到平面距离公式的不同之处在于,分类正确的点的距离是正的,分类错误的距离是负的:
γi=y(i)(w⋅x(i)+b)∥w∥2=γ^i∥w∥2(2) (2) γ i = y ( i ) ( w ⋅ x ( i ) + b ) ‖ w ‖ 2 = γ ^ i ‖ w ‖ 2
间隔最大化
实际上我们所说的间隔最大化中的间隔就是指几何间隔。即找到一个超平面,使所有样本点到该平面几何间隔最小的值尽可能大。因为 w,b w , b 的缩放虽然会改变函数间隔 γ^i γ ^ i 的值,但却不会改变几何间隔 γi γ i 的值,所以函数间隔的取值并不会影响最终的结果。我们不妨取 γ^=1 γ ^ = 1 (即样本点到分离超平面的函数距离至少为1),即对于任一样本点 (x(i),y(i)) ( x ( i ) , y ( i ) ) ,满足:
{w⋅x(i)+b≥+1,w⋅x(i)+b≤−1,y(i)=+1y(i)=−1(3) (3) { w ⋅ x ( i ) + b ≥ + 1 , y ( i ) = + 1 w ⋅ x ( i ) + b ≤ − 1 , y ( i ) = − 1
正如下图所示,黑色粗线是我们找到的最佳分离超平面,正类和负类的样本点至少在虚线之外。在虚线上的训练样本点被称为是
支持向量,两个异类支持向量到超平面的距离之和被称为
间隔,也就是我们要最大化的间隔,为
2∥w∥2 2 ‖ w ‖ 2 。
那么求最大间隔超平面的问题可以表示为下面的约束最优化问题:
maxw,b2∥w∥2s.t. y(i)(w⋅x(i)+b)≥1, i=1,2,…,m(4) (4) max w , b 2 ‖ w ‖ 2 s . t . y ( i ) ( w ⋅ x ( i ) + b ) ≥ 1 , i = 1 , 2 , … , m
因为最大化
1∥w∥2 1 ‖ w ‖ 2 和最小化
∥w∥2 ‖ w ‖ 2 等价,所以(4)可以重写为
minw,b12∥w∥22s.t. y(i)(w⋅x(i)+b)≥1, i=1,2,…,m(5)(6) (5) min w , b 1 2 ‖ w ‖ 2 2 (6) s . t . y ( i ) ( w ⋅ x ( i ) + b ) ≥ 1 , i = 1 , 2 , … , m
解得上面最优化问题的最优解
w∗,b∗ w ∗ , b ∗ 后,就确定了分离超平面
w∗⋅x+b∗=0 w ∗ ⋅ x + b ∗ = 0 和分类决策函数
f(x)=sign(w∗⋅x+b∗) f ( x ) = s i g n ( w ∗ ⋅ x + b ∗ ) 。可以证明,线性可分训练数据集的最大间隔分离超平面是存在且唯一的(证明过程大家可以去看《统计学方法》这本书)。
支持向量和间隔边界
在线性可分的情况下,训练样本中与分离超平面距离最近的样本点成为支持向量。支持向量是使约束条件(6)等号成立的点。
对 y(i)=+1 y ( i ) = + 1 的正类样本点,支持向量在超平面
H1:w⋅x+b=+1 H 1 : w ⋅ x + b = + 1
上,对
y(i)=−1 y ( i ) = − 1 的负类样本点,支持向量在超平面
H2:w⋅x+b=−1 H 2 : w ⋅ x + b = − 1
上,如下图所示。
注意到 H1 H 1 和 H2 H 2 平行,且没有样本点落在他们中间,分离超平面与它们平行且位于他们中央。 H1 H 1 和 H2 H 2 被称为间隔边界,它们之间的距离称为间隔。间隔的大小依赖于分离超平面的法向量,等于 2∥w∥2 2 ‖ w ‖ 2 .
在决定分离超平面时只有支持向量起作用,其他样本点不起作用,移动支持向量将改变所求的超平面位置,所以这种分类模型称为支持向量机。SVM的一种重要性质就是,训练完成以后,大部分的样本都不需要保留,最终模型仅与支持向量有关。
3. 学习的对偶算法
在上面我们已经推出支持向量机的问题形式了,如式(5)(6),是一个凸二次规划问题。我们可以直接对其求解,但难度较大。这里我们利用拉格朗日对偶性,通过求解对偶问题得到原始问题的最优解。引入对偶形式一来更容易求解,而来可以自然引入核函数,进而推广到非线性分类问题。SVM模型表示如下:
minw,b12∥w∥22 s.t. y(i)(w⋅x(i)+b)≥1, i=1,2,…,m(7) (7) min w , b 1 2 ‖ w ‖ 2 2 s . t . y ( i ) ( w ⋅ x ( i ) + b ) ≥ 1 , i = 1 , 2 , … , m
我们可以利用KKT条件将优化目标转化为无约束的优化函数,该问题的拉格朗日函数可以写为:
L(w,b,α)=12∥w∥22−∑i=1m[αi(y(i)(w⋅x(i)+b)−1)](8) (8) L ( w , b , α ) = 1 2 ‖ w ‖ 2 2 − ∑ i = 1 m [ α i ( y ( i ) ( w ⋅ x ( i ) + b ) − 1 ) ]
其中
αi≥0 α i ≥ 0 为拉格朗日乘子,
m m 为训练集样本总数。根据拉格朗日对偶性,原始问题(7)的对偶问题是极大极小问题:
maxαminw,bL(w,b,α)(9) (9) max α min w , b L ( w , b , α )
所以(9)的解就是(7)的解。
(1) 现在我们先求
minw,bL(w,b,α) min w , b L ( w , b , α )
将拉格朗日函数
L(w,b,α) L ( w , b , α ) 分别对
w,b w , b 求偏导数并令其等于0:
∇wL(w,b,α)∇bL(w,b,α)=w−∑i=1mαiy(i)x(i)=0=−∑i=1mαiy(i)=0 ∇ w L ( w , b , α ) = w − ∑ i = 1 m α i y ( i ) x ( i ) = 0 ∇ b L ( w , b , α ) = − ∑ i = 1 m α i y ( i ) = 0
得到:
w=∑i=1mαiy(i)x(i)∑i=1mαiy(i)=0(10)(11) (10) w = ∑ i = 1 m α i y ( i ) x ( i ) (11) ∑ i = 1 m α i y ( i ) = 0
将式(10)和(11)代入式(8),得:
L(w,b,α)=12∥w∥22−∑i=1m[αi(y(i)(w⋅x(i)+b)−1)]=12∥w∥22−∑i=1mαiy(i)w⋅x(i)−∑i=1mαiy(i)b+∑i=1mαi=12w⋅(∑i=1mαiy(i)x(i))−∑i=1mαiy(i)w⋅x(i)−∑i=1mαiy(i)b+∑i=1mαi=−12w⋅(∑i=1mαiy(i)x(i))−b∑i=1mαiy(i)+∑i=1mαi=−12(∑i=1mαiy(i)x(i))⋅(∑j=1mαjy(j)x(j))+∑i=1mαi=−12∑i=1m∑j=1mαiαjy(i)y(j)(x(i)⋅x(j))+∑i=1mαi L ( w , b , α ) = 1 2 ‖ w ‖ 2 2 − ∑ i = 1 m [ α i ( y ( i ) ( w ⋅ x ( i ) + b ) − 1 ) ] = 1 2 ‖ w ‖ 2 2 − ∑ i = 1 m α i y ( i ) w ⋅ x ( i ) − ∑ i = 1 m α i y ( i ) b + ∑ i = 1 m α i = 1 2 w ⋅ ( ∑ i = 1 m α i y ( i ) x ( i ) ) − ∑ i = 1 m α i y ( i ) w ⋅ x ( i ) − ∑ i = 1 m α i y ( i ) b + ∑ i = 1 m α i = − 1 2 w ⋅ ( ∑ i = 1 m α i y ( i ) x ( i ) ) − b ∑ i = 1 m α i y ( i ) + ∑ i = 1 m α i = − 1 2 ( ∑ i = 1 m α i y ( i ) x ( i ) ) ⋅ ( ∑ j = 1 m α j y ( j ) x ( j ) ) + ∑ i = 1 m α i = − 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y ( i ) y ( j ) ( x ( i ) ⋅ x ( j ) ) + ∑ i = 1 m α i
即
minw,bL(w,b,α)=−12∑i=1m∑j=1mαiαjy(i)y(j)(x(i)⋅x(j))+∑i=1mαi(12) (12) min w , b L ( w , b , α ) = − 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y ( i ) y ( j ) ( x ( i ) ⋅ x ( j ) ) + ∑ i = 1 m α i
(2) 求
minw,bL(w,b,α) min w , b L ( w , b , α ) 对
α α 的极大,即是对偶问题:
maxα−12∑i=1m∑j=1mαiαjy(i)y(j)(x(i)⋅x(j))+∑i=1mαis.t. ∑i=1mαiy(i)=0αi≥0, i=1,2,…,m max α − 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y ( i ) y ( j ) ( x ( i ) ⋅ x ( j ) ) + ∑ i = 1 m α i s . t . ∑ i = 1 m α i y ( i ) = 0 α i ≥ 0 , i = 1 , 2 , … , m
该极大问题等价于下面的极小问题:
minα12∑i=1m∑j=1mαiαjy(i)y(j)(x(i)⋅x(j))−∑i=1mαis.t. ∑i=1mαiy(i)=0αi≥0, i=1,2,…,m(13) min α 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y ( i ) y ( j ) ( x ( i ) ⋅ x ( j ) ) − ∑ i = 1 m α i (13) s . t . ∑ i = 1 m α i y ( i ) = 0 α i ≥ 0 , i = 1 , 2 , … , m
该最优化问题可以通过
SMO算法求解,SMO算法后面单独拿一个博客出来讲,这里先用着。假设SMO算法解得优化问题(13)的最优解为
α∗ α ∗ ,然后就可以利用式(10)求得
w w 的最优解:
w∗=∑i=1mα∗iy(i)x(i)(14) (14) w ∗ = ∑ i = 1 m α i ∗ y ( i ) x ( i )
求
b∗ b ∗ 则稍微麻烦一点,假设有
p p 个支持向量,则我们可以求出
p p 个
b∗ b ∗ :
b∗=y(j)−∑i=1mα∗iy(i)(x(i)⋅x(j)), j=1,2,…,p b ∗ = y ( j ) − ∑ i = 1 m α i ∗ y ( i ) ( x ( i ) ⋅ x ( j ) ) , j = 1 , 2 , … , p
理论上这些
b∗ b ∗ 都能作为最终结果,但是我们通常使用一种更健壮的办法,即求出所有
b∗j b j ∗ ,然后用它们的平均值作为最终结果。对于严格线性可分的SVM,这里解出的
b∗j b j ∗ 都是相等的,这里扔这么做是为了之后加入软间隔的SVM算法描述保持一致。于是就得到了分离超平面:
∑i=1mα∗iy(i)(x(i)⋅x(j))+b∗=0 ∑ i = 1 m α i ∗ y ( i ) ( x ( i ) ⋅ x ( j ) ) + b ∗ = 0
分类决策函数可以写成
f(x)=sign(∑i=1mα∗iy(i)(x⋅x(j))+b∗)(15) (15) f ( x ) = s i g n ( ∑ i = 1 m α i ∗ y ( i ) ( x ⋅ x ( j ) ) + b ∗ )
这就是说,分类决策函数只依赖于输入
x x 和训练样本输入的内积。式(15)称为线性可分支持向量机的对偶形式。
(3) 得到支持向量
根据KKT条件中的对偶松弛性条件,
α∗i[y(i)(w⋅x(i)+b)−1]=0 α i ∗ [ y ( i ) ( w ⋅ x ( i ) + b ) − 1 ] = 0
当
αi>0 α i > 0 时,
y(i)(w⋅x(i)+b)−1=0 y ( i ) ( w ⋅ x ( i ) + b ) − 1 = 0 ,
αi α i 对应的样本点
(x(i),y(i)) ( x ( i ) , y ( i ) ) 一定在间隔边界上,是支持向量;
当
αi=0 α i = 0 时,说明该约束条件不起作用,该样本对
f(x) f ( x ) 不会有任何影响。
4. 小结
最后最SVM的算法过程做一个梳理:
输入:线性可分数据集 T={(x(1),y(1)),(x(2),y(2)),…,(x(m),y(m))} T = { ( x ( 1 ) , y ( 1 ) ) , ( x ( 2 ) , y ( 2 ) ) , … , ( x ( m ) , y ( m ) ) } , y(i)∈{−1,+1} y ( i ) ∈ { − 1 , + 1 }
输出:分离超平面和分类决策函数
(1) 构造约束最优化问题:
minα12∑i=1m∑j=1mαiαjy(i)y(j)(x(i)⋅x(j))−∑i=1mαis.t. ∑i=1mαiy(i)=0αi≥0, i=1,2,…,m min α 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y ( i ) y ( j ) ( x ( i ) ⋅ x ( j ) ) − ∑ i = 1 m α i s . t . ∑ i = 1 m α i y ( i ) = 0 α i ≥ 0 , i = 1 , 2 , … , m
(2)使用SMO算法求解上述问题并解得
α∗ α ∗
(3)计算得到
w∗ w ∗ 和
b∗ b ∗ :
w∗b∗=∑i=1mα∗iy(i)x(i)=1p∑j=1p(y(j)−∑i=1mα∗iy(i)(x(i)⋅x(j))) w ∗ = ∑ i = 1 m α i ∗ y ( i ) x ( i ) b ∗ = 1 p ∑ j = 1 p ( y ( j ) − ∑ i = 1 m α i ∗ y ( i ) ( x ( i ) ⋅ x ( j ) ) )
(4)求得分离超平面:
w∗⋅x+b∗=0 w ∗ ⋅ x + b ∗ = 0
分类决策函数:
f(x)=sign(w∗⋅x+b∗) f ( x ) = s i g n ( w ∗ ⋅ x + b ∗ )
线性可分支持向量机对于非线性的数据集也是没有办法使用的。有时候数据集的非线性是由少量异常点引入的,这些异常点的处理可以使用软间隔最大化,将在下一篇博客中讲。