例子
给定数据
xi
和标签
yi
,比如:
xi | yi |
---|---|
(2,3) | -1 |
(3,2) | -1 |
(5,7) | +1 |
(8,9) | +1 |
如何寻找一条直线
把这组点分开,使得两类之间间隔最大?
这个问题可归结为寻找分割线:
wx+b=1
和
wx+b=−1
。我们假设每个点都有标签
yi
,满足下面约束条件:
对于所有使
yi=1
的上标
i
,有
对于所有使
yi=−1
的上标
i
,有
该约束条件等价于:
数学模型
由于直线
wx+b=1
和
wx+b=−1
之间的距离:
间隔最大化实际上就是 2w21+w22√ 最大化,也就是 w21+w22 最小化。就本文例子来看,约束方程如下:
显然这是 二次规划问题。
习惯上,支持向量机的规划模型表述为下述形式:
二次规划求解方法
不打算太过正式讨论二次规划求解方法,等我有时间全面搜集一下素材,专门讨论一下。二次规划求解算法的开源代码应该也容易找到,可能根本不需要自己动手写这些代码。这里简单说一下基本思路,不一定真有用,只能解决有强迫症的读者的思想性疑问。支持向量机给出的二次规划模型有一定特殊性,我会另写文章分析更好的求解方法。
对于数学规划问题而言,如果最优解落在可行域内部,则最优解通常是目标函数的无约束极值之一;否则,最优解应该落在可行域边界。如果不考虑(2)式的约束条件,它的唯一的一个无约束极值点显然是
w1=0,w2=0
。依据(1)式,显然
b=0
,这显然不符合后面的约束条件。好吧,既然无约束极值点落在了约束条件之外,那么,规划(3)的最优解一定落在可行域的边界上。比如第一条边界上的最优解可通过下面规划问题求得:
最后把答案代入约束条件验证,即可求出最优解,详细步奏不再赘述。(其实这个过程还是有些复杂,我会在稍后的博文中讨论这个话题。)