1. 线性分类SVM面临的问题
有时候本来数据的确是可分的,也就是说可以用 线性分类SVM的学习方法来求解,但是却因为混入了异常点,导致不能线性可分,比如下图,本来数据是可以按下面的实线来做超平面分离的,可以由于一个橙色和一个蓝色的异常点导致我们没法按照上一篇线性支持向量机中的方法来分类。
另外一种情况没有这么糟糕到不可分,但是会严重影响我们模型的泛化预测效果,比如下图,本来如果我们不考虑异常点,SVM的超平面应该是下图中的红色线所示,但是由于有一个蓝色的异常点,导致我们学习到的超平面是下图中的粗虚线所示,这样会严重影响我们的分类模型预测效果。
如何解决这些问题呢?SVM引入了软间隔最大化的方法来解决。
2. 线性分类SVM的软间隔最大化
所谓的软间隔,是相对于硬间隔说的,我们可以认为上一篇线性分类SVM的学习方法属于硬间隔最大化。
回顾下硬间隔最大化的条件:
接着我们再看如何可以软间隔最大化呢?
SVM对训练集里面的每个样本 (xi,yi) ( x i , y i ) 引入了一个松弛变量 ξi≥0 ξ i ≥ 0 ,使函数间隔加上松弛变量大于等于1,也就是说:
对比硬间隔最大化,可以看到我们对样本到超平面的函数距离的要求放松了,之前是一定要大于等于1,现在只需要加上一个大于等于0的松弛变量能大于等于1就可以了。当然,松弛变量不能白加,这是有成本的,每一个松弛变量 ξi ξ i , 对应了一个代价 ξi ξ i ,这个就得到了我们的软间隔最大化的SVM学习条件如下:
这里 C≥0 C ≥ 0 为惩罚参数,可以理解为我们一般回归和分类问题正则化时候的参数。 C C 越大,对误分类的惩罚越大, C C 越小,对误分类的惩罚越小。
也就是说,我们希望 12||w||2 1 2 | | w | | 2 尽量小,误分类的点尽可能的少。C是协调两者关系的正则化惩罚系数。在实际应用中,需要调参来选择。
这个目标函数的优化和上一篇的线性可分SVM的优化方式类似,我们下面就来看看怎么对线性分类SVM的软间隔最大化来进行学习优化。
3. 线性分类SVM的软间隔最大化目标函数的优化
和线性可分SVM的优化方式类似,我们首先将软间隔最大化的约束问题用拉格朗日函数转化为无约束问题如下:
其中 μi≥0,αi≥0 μ i ≥ 0 , α i ≥ 0 ,均为拉格朗日系数。
也就是说,我们现在要优化的目标函数是:
这个优化目标也满足KKT条件,也就是说,我们可以通过拉格朗日对偶将我们的优化问题转化为等价的对偶问题来求解如下:
我们可以先求优化函数对于 w,b,ξ w , b , ξ 的极小值,接着再求拉格朗日乘子 α α 和 μ μ 的极大值。
首先我们来求优化函数对于 w,b,ξ w , b , ξ 的极小值,这个可以通过求偏导数求得:
好了,我们可以利用上面的三个式子去消除 w w 和 b b 了。
仔细观察可以发现,这个式子和我们上一篇线性可分SVM的一样。唯一不一样的是约束条件。现在我们看看我们的优化目标的数学形式:
对于 C−αi−μi=0,αi≥0,μi≥0 C − α i − μ i = 0 , α i ≥ 0 , μ i ≥ 0 这3个式子,我们可以消去 μi μ i ,只留下 αi α i ,也就是 0≤αi≤C 0 ≤ α i ≤ C 。同时将优化目标函数变号,求极小值,如下:
这就是软间隔最大化时的线性可分SVM的优化目标形式,和上一篇的硬间隔最大化的线性可分SVM相比,我们仅仅是多了一个约束条件 0≤αi≤C 0 ≤ α i ≤ C 。我们依然可以通过SMO算法来求上式极小化时对应的 α α 向量就可以求出 w w 和 b b 了。
4. 软间隔最大化时的支持向量
在硬间隔最大化时,支持向量比较简单,就是满足
yi(wTxi+b)−1=0
y
i
(
w
T
x
i
+
b
)
−
1
=
0
就可以了。根据KKT条件中的对偶互补条件
α∗i(yi(wTxi+b)−1)=0
α
i
∗
(
y
i
(
w
T
x
i
+
b
)
−
1
)
=
0
,如果
α∗i>0
α
i
∗
>
0
则有
yi(wTxi+b)=1
y
i
(
w
T
x
i
+
b
)
=
1
,即点在支持向量上。如果
α∗i=0
α
i
∗
=
0
则有
yi(wTxi+b)≥1
y
i
(
w
T
x
i
+
b
)
≥
1
,即样本在支持向量上或者已经被正确分类。
在软间隔最大化时,则稍微复杂一些,因为我们对每个样本
(xi,yi)
(
x
i
,
y
i
)
引入了松弛变量
ξi
ξ
i
。我们从下图来研究软间隔最大化时支持向量的情况,第
i
i
个点到对应类别支持向量的距离为
ξi||w||2
ξ
i
|
|
w
|
|
2
。根据软间隔最大化时KKT条件中的对偶互补条件
a∗i(yi(wTxi+b)−1+ξ∗i)=0
a
i
∗
(
y
i
(
w
T
x
i
+
b
)
−
1
+
ξ
i
∗
)
=
0
,我们有:
a)如果
α=0
α
=
0
,那么
yi(wTxi+b)−1≥0
y
i
(
w
T
x
i
+
b
)
−
1
≥
0
,即样本在支持向量上或者已经被正确分类。如图中所有远离支持向量的点。
b)如果
0<α<C
0
<
α
<
C
,那么
ξi=1,yi(wTxi+b)−1=0
ξ
i
=
1
,
y
i
(
w
T
x
i
+
b
)
−
1
=
0
,即点在支持向量上。如图中在虚线支持向量上的点。
c)如果
α=C
α
=
C
,说明这是一个可能比较异常的点,需要检查此时
ξi
ξ
i
i) 如果
0≤ξi≤1
0
≤
ξ
i
≤
1
,那么点被正确分类,但是却在超平面和自己类别的支持向量之间。如图中的样本2和4。
ii)如果
ξi=1
ξ
i
=
1
,那么点在分割超平面上,无法被正确分类。
iii)如果
ξi>1
ξ
i
>
1
,那么点在超平面的另一侧,也就是说,这个点不能被正确分类。如图中的样本1和3.
5. 软间隔最大化的线性可分SVM的算法过程
这里我们对软间隔最大化时的线性可分SVM的算法过程做一个总结。
输入是线性可分的m个样本
(x1,y1),(x2,y2),...,(xm,ym)
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
m
,
y
m
)
,其中x为n维特征向量。y为二元输出,值为1,或者-1.
输出是分离超平面的参数
w∗
w
∗
和
b∗
b
∗
和分类决策函数。
算法过程如下:
1) 选择一个惩罚系数
C>0
C
>
0
, 构造约束优化问题
2) 用 SMO S M O 算法求出上式最小时对应的 α α 向量的值 α∗ α ∗ 向量.
3) 计算 w∗=∑i=1mα∗iyixi w ∗ = ∑ i = 1 m α i ∗ y i x i
4) 找出所有的 S S 个支持向量,即满足 0<αS<C 0 < α S < C 对应的样本 (xs,ys) ( x s , y s ) ,通过 ys(∑i=1SαiyixTixs+b)=1 y s ( ∑ i = 1 S α i y i x i T x s + b ) = 1 ,计算每个支持向量 (xs,ys) ( x s , y s ) 对应的 b∗s b s ∗ ,计算出这些 b∗s=ys−∑i=1SαiyixTixs b s ∗ = y s − ∑ i = 1 S α i y i x i T x s . 所有的 b∗ b ∗ 对应的平均值即为最终的 b∗=1S∑i=1Sb∗s b ∗ = 1 S ∑ i = 1 S b s ∗ .
这样最终的分类超平面为: w∗∙x+b∗=0 w ∗ ∙ x + b ∗ = 0 ,最终的分类决策函数为: f(x)=sign(w∗∙x+b∗) f ( x ) = s i g n ( w ∗ ∙ x + b ∗ )