一、理论介绍
1.1、基于最大的间隔数据
分隔超平面: 将数据集分隔开来的直线(推及三维空间,就是一个平面), 也就是分类的决策边界。在超平面一侧的数据属于某一类, 在另一侧的数据属于另外一类。
我们希望能采用这种方式来构建分类器,即如果数据点离决策边界越远,那么其最后的预测,结果也就越可信。多个超平面它们都能将数据分隔开,但是其中哪一个最好呢?是否应该最小化数据点到分隔超平面的平均距离?来求最佳直线如果是那样,是不是有点寻找最佳拟合直线的感觉? 是的,上述做法确实有点像直线拟合,但这并非最佳方案。我们希望找到离分隔超平面最近的点,确保它们离分隔面的距离尽可能远。这里点到分隔面的距离被称为间隔°( margin)。我们希望间隔尽可能地大,这是因为如果我们犯错或者在有限数据上训练分类器的话,我们希望分类器尽可能的健壮。
1.2、寻找最大间隔
如何求解数据集的最佳分隔直线? 先看看下图。分隔超平面的形式可以写成
w
T
x
+
b
w^Tx\;+\;b
wTx+b。要计算点A到分隔超平面的距离,就必须给出点到分隔面的法线或垂线的长度,该值为
∣
w
T
x
+
b
∣
∣
∣
w
∣
∣
\frac{\left|w^Tx\;+\;b\right|}{\left|\left|w\right|\right|}
∣∣w∣∣∣wTx+b∣。这里的常数b类似于Lgistic回归中的截距
w
0
w_0
w0。这里的向量
w
w
w和常数b一起描述了所给数据的分隔线或超平面。接下来我们讨论分类器。
1.2.1、分类器求解的优化问题
前面已经提到了分类器,但还没有介绍它的工作原理。理解其工作原理将有助于理解基于优化问题的分类器求解过程。输入数据给分类器会输出一个类别标签 ,这相当于一个类似于Sigmoid的函数在作用。下面将使用类似海维赛德阶跃函数(即单位阶跃函数)的函数对
w
T
x
+
b
w^Tx+b
wTx+b作用得到
f
(
w
T
x
+
b
)
f(w^Tx+b)
f(wTx+b),其中当u<0时f(u)输出-1,反之则输出+1。这和前一章的Logistic回归有所不同,那里的类别标签是0或1。这里的类别标签为什么采用 -1和+1 ,而不是0和1呢?这是由于1和+1仅仅相差-个符号,方便数学上的处理。我们可以通过一个统一公式来表示间隔或者数据点到分隔超平面的距离,同时不必担心数据到底是属于-1还是+1类。
当计算数据点到分隔面的距离并确定分隔面的放置位置时,间隔通过
l
a
b
e
l
∗
(
w
T
x
+
b
)
label\ast(w^Tx+b)
label∗(wTx+b)来计算,这时就能体现出-1和+1类的好处了。如果数据点处于正方向(即+1类)并且离分隔超平面很远的位置时,
w
T
x
+
b
w^Tx+b
wTx+b 会是一个很大的正数,同时
l
a
b
e
l
∗
(
w
T
x
+
b
)
label\ast(w^Tx+b)
label∗(wTx+b) 也会是一个很大的正数。而如果数据点处于负方向(-1类)并且离分隔超平面很远的位置时,此时由于类别标签为-1,则
l
a
b
e
l
∗
(
w
T
x
+
b
)
label\ast(w^Tx+b)
label∗(wTx+b) 仍然是一个很大的正数。
【注:
l
a
b
e
l
∗
(
w
T
x
+
b
)
label\ast(w^Tx+b)
label∗(wTx+b)点到分割面的函数距离 ,
l
a
b
e
l
∗
(
w
T
x
+
b
)
∣
∣
w
∣
∣
\frac{label\;\ast\;\left(w^Tx\;+\;b\right)}{\left|\left|w\right|\right|}
∣∣w∣∣label∗(wTx+b) 是点到分割面的几何距离】
现在的目标就是找出分类器定义中的w和b。为此,我们必须找到具有最小间隔的数据点,而这些数据点也就是前面提到的支持向量。一旦找到具有最小间隔的数据点,我们就需要对该间隔最大化。这就可以写作:
直接求解上述问题相当困难,所以我们将它转换成为另一种更容易求解的形式。首先考察一下上式中大括号内的部分。由于对乘积进行优化是一件很讨厌的事情, 因此我们要做的是固定其中一个因子而最大化其他因子。如果令所有支持向量的
l
a
b
e
l
∗
(
w
T
x
+
b
)
label\ast(w^Tx+b)
label∗(wTx+b) 都为1,那么就可以通过求
1
∣
∣
w
∣
∣
\frac1{\left|\left|w\right|\right|}
∣∣w∣∣1 的最大值来得到最终解。但是,并非所有数据点的
l
a
b
e
l
∗
(
w
T
x
+
b
)
label\ast(w^Tx+b)
label∗(wTx+b) 都等于1,只有那些离分隔超平面最近的点得到的值才为1。而离超平面越远的数据点,其
l
a
b
e
l
∗
(
w
T
x
+
b
)
label\ast(w^Tx+b)
label∗(wTx+b) 的值也就越大。
在上述优化问题中,给定了一些约束条件然后求最优值,因此该问题是一个带约束条件的优化问题。这里的约束条件就是
l
a
b
e
l
∗
(
w
T
x
+
b
)
⩾
1.0
label\;\ast\;\left(w^Tx\;+\;b\right)\;\geqslant1.0
label∗(wTx+b)⩾1.0。 对于这类优化问题,有一个非常著名的求解方法,即拉格朗日乘子法。通过引入拉格朗日乘子,我们就可以基于约束条件来表述原来的问题。由于这里的约束条件都是基于数据点的,因此我们就可以将超平面写成数据点的形式。于是,优化目标函数最后可以写成:
【注:尖括号表示两个向量内积】
其约束条件:
α
⩾
0
,
和
∑
i
=
1
m
α
i
⋅
l
a
b
e
l
(
i
)
=
0
\alpha\geqslant0,和\sum_{i=1}^m\alpha_i\cdot label^{\left(i\right)}\;=\;0
α⩾0,和i=1∑mαi⋅label(i)=0
至此,一切都很完美,但是这里有个假设:数据必须10%线性可分。目前为止,我们知道几乎所有数据都不那么“干净”。这时我们就可以通过引人所谓松弛变量(slack variable),来允许有些数据点可以处于分隔面的错误一侧。这样我们的优化目标就能保持仍然不变,但是此时新的约束条件则变为:
C ⩾ α ⩾ 0 , 和 ∑ i = 1 m α i ⋅ l a b e l ( i ) = 0 C\geqslant\alpha\geqslant0,和\sum_{i=1}^m\alpha_i\cdot label^{\left(i\right)}\;=\;0 C⩾α⩾0,和i=1∑mαi⋅label(i)=0
这里的常数C用于控制“最大化间隔”和“保证大部分点的函数间隔小于1.0”这两个目标的权重。在优化算法的实现代码中,常数C是一个参数,因此我们就可以通过调节该参数得到不同的结果。一旦求出了所有的alpha,那么分隔超平面就可以通过这些alpha来表达。这一结论十分直接,SVM中的主要工作就是求解这些alpha。
1.3、SMO高效优化算法
1.3.1、Platt 的SMO算法
1996年,John Platt发布了一个称为SMO”的强大算法,用于训练SVM。SM0表示序列最小优化( Sequential Minimal Optimization )。Platt的SMO算法是将大优化问题分解为多个小优化问题来求解的。这些小优化问题往往很容易求解,并且对它们进行顺序求解的结果与将它们作为整体来求解的结果是完全一致的。在结果完全相同的同时,SMO算法的求解时间短很多。
SMO算法的目标是求出一系列alpha和b, 且求出了这些alpha,就很容易计算出权重向量w并得到分隔超平面。
SMO算法的工作原理是:每次循环中选择两个alpha进行优化处理。一旦找到一对合适的alpha,那么就增大其中-个同时减小另一个。这里所谓的“合适”就是指两个alpha必须要符合一定的条件, ,条件之- -就是这两个alpha必须要 在间隔边界之外,而其第二个条件则是这两个alpha还没有进行过区间化处理或者不在边界上。
1.3.2、简化版SMO算法
Platt SMO算法中的外循环确定要优化的最佳alpha对。而简化版却会跳过这一部分,首先在数据集上遍历每个alpha, 然后在剩下的alpha集合中随机选择另一个alpha, 从而构建alpha对。这里有一点相当重要,就是我们要同时改变两个alpha。之所以这样做是因为我们有一个约束条件:
∑
i
=
1
m
α
i
⋅
l
a
b
e
l
(
i
)
=
0
\sum_{i=1}^m\alpha_i\cdot label^{\left(i\right)}\;=\;0
i=1∑mαi⋅label(i)=0
由于改变一个alpha可能会导致该约束条件失效,因此我们总是同时改变两个alpha。