支持向量机(SVM)和python实现(一)

1. 问题的提出

若存在一个样本集,其中有两类数据,我们希望将他们分类

像上图(a)那样的样本集,SVM的目的就是企图获得一个超平面(在这个例子中超平面是一个直线),这个超平面可以完美的分割不同的数据集,我们用下面的线性方程来表示这个超平面:

ω T x + b = 0

对于二维空间的超平面,实际上就是:
[ w 1 w 2 ] [ x y ] + b = 0

我们再观察图(b)和(c)的两个直线,很明显b中的直线对样本集的划分更好一些,因为,在直线边缘的样本点离直线更远一些,这样就提高了样本划分的鲁棒性,所以我们就有了一个寻找超平面的最开始的理念:找到的这个超平面要离2组样本集尽量的远,即点到超平面的距离尽量大。
这里直接给出点到超平面的距离:
d = | ω T x + b | ω

我们现在再给出样本的类别标签,红色点为-1,蓝色点为1,则有:
{ ω T x i + b > 0 y i = 1 ω T x i + b < 0 y i = 1

如果我们要求再高一些,我们希望这些点到超平面的距离都要大于d,则有:
{ ( ω T x i + b ) / ω d y i = 1 ( ω T x i + b ) / ω d y i = 1

不等式两边同时除以d,可以得到:
{ ω d T x i + b d 1 y i = 1 ω d T x i + b d 1 y i = 1

其中
ω d = ω ω d , b d = b ω d

实际上 ω d T x i + b d = 0 ω T x i + b = 0 是同样的超平面,既然如此我们就把 ω d b d 继续叫做 ω b ,那么我们就获得了SVM优化问题的约束条件:
(1.1) { ω T x i + b 1 y i = 1 ω T x i + b 1 y i = 1

(图片来自https://www.cnblogs.com/freebird92/p/8909546.html)

如上图所示的距离超平面最近的几个训练样本点使(1.1)中的等号成立,这些点我们称为“支持向量”,两个异类支持向量到超平面的距离之和为 2 ω 2 ,我们希望这个值越大越好,即 1 2 ω 2 越小越好,所以我们的问题就变成了:

(1.2) m i n 1 2 ω 2 s . t .   y i ( ω T x i + b ) 1 , i = 1 , 2 , . . . , m .

2. 对偶问题

式(1.2)是一个凸二次规划问题,我们可以使用拉格朗日乘子法获取其对偶问题来求解,引入拉格朗日乘子 α i 0 i = 1 , 2 , . . . , m ,则式(1.2)写为:

(2.1) L ( ω , b , α ) = 1 2 ω 2 + i = 1 m α i ( 1 y i ( ω T x i + b ) )

ω ,b求偏导为0可得:
(2.2) ω = i = 1 m α i y i x i 0 = i = 1 m α i y i

将(2.2)带入(2.1)可得:
(2.3) L ( ω , b , α ) = 1 2 ω 2 + i = 1 m α i ( 1 y i ( ω T x i + b ) ) = 1 2 ω T ω ω T i = 1 m α i y i x i + i = 1 m α i i = 1 m α i y i b = 1 2 ω T ( ω 2 i = 1 m α i y i x i ) + i = 1 m α i = i = 1 m α i 1 2 i = 1 , j = 1 m α i α j y i y j x i T x j

最后的对偶问题为:
(2.4) m a x . i = 1 m α i 1 2 i = 1 , j = 1 m α i α j y i y j x i T x j s . t .   α i 0 i = 1 m α i y i

解出 α 后求出 ω 和b就可以得到模型:
(2.5) f ( x ) = ω T x + b = i = 1 m α i y i x i x + b

因为式(1.2)含有不等式约束,因此对偶问题应满足KKT条件,这里稍微说一下KKT条件怎么获得的。

KKT条件

(图来自https://zhuanlan.zhihu.com/p/24638007

不等式约束 g ( x ) 0 即为图中的可行解区域,最优解 x 的位置有两种情况:在可行区域边界上或者在可行区域内部。
在边界上:这种情况下 g ( x ) = 0 ,目标函数 f ( x ) 在可行解区域边缘更大,可行解区域其他地方更小,而 g ( x ) 在可行解区域内小于0,外部大于0,意味着 f ( x ) 的梯度方向与约束条件函数 g ( x ) 的梯度方向相反,则在最优解处满足下式:

f ( x ) + λ g ( x ) = 0

根据上式可以推出当最优解在边界上时 λ > 0
在区域内:这种情况相当于约束条件不存在,因此拉格朗日乘子 λ = 0 g ( x ) < 0
这样就得出了KKT条件
{ g ( x ) 0 λ 0 λ g ( x ) = 0

其中第一个式子是约束本身,第二个式子是对拉格朗日乘子的描述,第三个式子是综合上述2种情况后获得的表达。

现在我们再回到之前的对偶问题中,(2.4)需要满足的KKT条件为:

{ α i 0 y i f ( x i ) 1 0 α i ( y i f ( x i ) 1 ) = 0

于是,对于任意训练样本,总有 α i = 0 y i f ( x i ) = 1 ,当 α i = 0 时,该样本不会对目标函数产生影响,若 α i > 0 ,则必有 y i f ( x i ) = 1 ,此时对应样本位于最大间隔边界上,是一个支持向量。

3. 核函数

前面我们举的例子都是线性可分的,如果找不到一条直线将两个数据集分离的时候该怎么办呢?
这里写图片描述
(图片来自http://www.360doc.com/content/14/0526/16/10724725_381159791.shtml
对于这样的问题,我们可以通过将样本点从原始空间映射到一个更高维的特征空间,使在这个新的特征空间内,样本点变得线性可分,就像上图描述的那样,我们用 φ ( x ) 来表示将x映射后的特征向量,于是我们就可以将模型写为:

(3.1) f ( x ) = ω T φ ( x ) + b = i = 1 m α i y i φ ( x ) T φ ( x i ) + b

对偶问题也描述为:
(3.2) m a x . i = 1 m α i 1 2 i = 1 , j = 1 m α i α j y i y j φ ( x i ) T φ ( x j ) s . t .   α i 0 i = 1 m α i y i

求解(3.2)涉及到计算 φ ( x i ) T φ ( x j ) 考虑到样本x映射到特征空间后维数可能很高,因此直接计算 φ ( x i ) T φ ( x j ) 是很困难的,为了避免这种情况,我们引入下面这样的函数:
κ ( x i , x j ) =< φ ( x i ) φ ( x j ) >= φ ( x i ) T φ ( x j )

未完待续。。。

猜你喜欢

转载自blog.csdn.net/z962013489/article/details/82499063