一、定义
SVM(Support Vector Machine)指的是支持向量机,是常见的一种判别方法。在机器学习领域,是一个有监督的学习模型,通常用来进行模式识别、分类以及回归分析。
二、优缺点
优点:泛化错误率低,计算开销不大,结果易于解释。SVM能够利用已知的有效算法发现目标函数的全局最小值,而其他分类方法(如基于规则的分类器和人工神经网络)都采用一种基于贪心学习的策略来搜索假设空间,这种方法一般只能获得局部最优解
缺点:核函数选择和参数调整比较敏感,原始分类器如果不经过调整,只能用于二分类的问题。
适用数据类型:数值型、标称型
三、相关概念
分隔超平面:如果数据是n维的,要将数据分类隔开,那么需要一个(n-1)维的对象对数据进行分隔,这个对象就被称为分隔超平面。
间隔:离分隔超平面最近的点,离超平面的距离,称为间隔。SVM的目的就是追求间隔最大化。
支持向量:离分割超平面最近的那些点。
线性分类器:线性分类器的学习目标是——要在n维的数据空间中找到一个超平面(hyper plane),这个超平面的方程可以用线性函数表示为( wT中的T代表转置):
w
T
x
+
b
=
0
w^Tx+b=0
wTx+b=0
这里是强调的是平面。而非线性的分类界面没有这个限制,可以是曲面,多个超平面的组合等。
四:目的
追求间隔最大化
五、知识储备
1、点(x
0
_0
0,y
0
_0
0)到直线(AX+BY+C=0)的距离:
∣
A
x
0
+
B
y
0
+
C
∣
A
2
+
B
2
\frac{|Ax_0+By_0+C| }{\sqrt{A^2+B^2}}
A2+B2∣Ax0+By0+C∣
将y0看作xi,此处等价于:
l
a
b
e
l
∗
(
w
T
∗
x
i
+
b
)
∣
∣
w
∣
∣
\frac{label*(w^T*x_i+b)}{||w||}
∣∣w∣∣label∗(wT∗xi+b)
函数距离:
∣
w
T
∗
x
i
+
b
∣
|w^T*x_i+b|
∣wT∗xi+b∣
几何距离:
l
a
b
e
l
∗
(
w
T
∗
x
i
+
b
)
∣
∣
w
∣
∣
\frac{label*(w^T*x_i+b)}{||w||}
∣∣w∣∣label∗(wT∗xi+b)
当w 和b 同倍数增加时候,函数距离也会通倍数增加;而几何距离不变
2、两个向量的内积:
x
=
(
x
1
x
2
x
3
…
x
n
)
x=\begin{pmatrix} x_1 \\x_2 \\x_3 \\… \\x_n \end{pmatrix}
x=⎝⎜⎜⎜⎜⎛x1x2x3…xn⎠⎟⎟⎟⎟⎞,
y
=
(
y
1
y
2
y
3
…
y
n
)
y=\begin{pmatrix} y_1 \\y_2 \\y_3 \\… \\y_n \end{pmatrix}
y=⎝⎜⎜⎜⎜⎛y1y2y3…yn⎠⎟⎟⎟⎟⎞
向量x与y的内积:
⟨
x
,
y
⟩
=
x
1
y
1
+
x
2
y
2
+
x
3
y
3
+
…
+
x
n
y
n
\langle x,y \rangle = x_1y_1+x_2y_2+x_3y_3+…+x_ny_n
⟨x,y⟩=x1y1+x2y2+x3y3+…+xnyn
3、极值:
函数在其定义域的某些局部区域所达到的相对最大值或相对最小值,分别称为极大值或极小值,统称为极值。
对于一元可微函数f(x),它在某点
x
0
x_0
x0有极值的充分必要条件是f(x)在
x
0
x_0
x0的某邻域上一阶可导,在
x
0
x_0
x0处二阶可导,且
f
′
(
x
0
)
f'(x_0)
f′(x0)=0,
f
′
′
(
x
0
)
f''(x_0)
f′′(x0)≠0,那么:
1)若f"(x0)<0,则f在x0取得极大值;
2)若f"(x0)>0,则f在x0取得极小值。
4、拉格朗日乘数法:
拉格朗日乘数法,是一种寻找多元函数的极值的方法,这个多元函数的变量受一个或多个条件约束。
这种方法将一个有n 个变量与k 个约束条件的最优化问题转换为一个有n + k个变量的方程组的极值问题,其变量不受任何约束。
这种方法引入了一种新的标量未知数,即拉格朗日乘数:约束方程的梯度(gradient)的线性组合里每个向量的系数。
例如:对于原目标函数ƒ(x),有k个等式约束hk(x),及n个变量(x1,x2,…,xn),求对于这具有K个等式约束的n维优化问题,可以将原目标函数改造为:
F(x,λ)=ƒ(x)+λ1 h1(x)+λ2 h2(x)+…+λk hk(x)
其中的待定系数λk称为拉格朗日乘子
在极点处,有F对xi一阶导数为0,F对λk一阶导数为0
在多元函数中,例如设给定二元函数z=ƒ(x,y)和附加条件φ(x,y)=0,为寻找z=ƒ(x,y)在附加条件下的极值点,参考上述一元函数的讲解可得:
先做拉格朗日函数:
F
(
x
,
y
,
λ
)
=
f
(
x
,
y
)
+
λ
φ
(
x
,
y
)
F_{(x,y,λ)}=f_{(x,y)}+λφ_{(x,y)}
F(x,y,λ)=f(x,y)+λφ(x,y)
求极值,令F(x,y,λ)对x和y和λ的一阶偏导数等于零,即
F
x
′
=
ƒ
x
′
(
x
,
y
)
+
λ
φ
x
′
(
x
,
y
)
=
0
F'_x=ƒ'_x(x,y)+λφ'_x(x,y)=0
Fx′=ƒx′(x,y)+λφx′(x,y)=0
F
y
′
=
ƒ
y
′
(
x
,
y
)
+
λ
φ
y
′
(
x
,
y
)
=
0
F'_y=ƒ'_y(x,y)+λφ'_y(x,y)=0
Fy′=ƒy′(x,y)+λφy′(x,y)=0
F
λ
′
=
φ
(
x
,
y
)
=
0
F'_λ=φ(x,y)=0
Fλ′=φ(x,y)=0
由上述方程组解出x,y及λ,如此求得的(x,y),就是函数z=ƒ(x,y)在附加条件φ(x,y)=0下的可能极值点。 若这样的点只有一个,由实际问题可直接确定此即所求的点。
5、求极值的几种情况:
a、无约束条件
这是最简单的情况,解决方法通常是函数对变量求导,令求导函数等于0的点可能是极值点。将结果带回原函数进行验证即可。
b、等式约束条件
设目标函数为f(x,y),约束条件为λφ(x,y),形如 s.t. 表示subject to ,“受限于”的意思,l表示有l个约束条件。
当目标函数加上约束条件后,变为如下形式:
min f(x,y)
s.t.
λ
φ
k
(
x
,
y
)
λφ_{k}(x,y)
λφk(x,y)=0 k=1,2,3,……,l
约束条件会将解的范围限定在一个可行域,此时不一定能找到使得
▽ x f ( x ) \bigtriangledown_xf(x) ▽xf(x)= 0
的点,只需找到在可行域内使得 f(x)最小的值即可。解决方法是消元法或者拉格朗日法,常用的方法即为拉格朗日乘子法:
F ( x , y , λ ) = f ( x , y ) + λ φ ( x , y ) F_{(x,y,λ)}=f_{(x,y)}+λφ_{(x,y)} F(x,y,λ)=f(x,y)+λφ(x,y)。
c、不等式约束条件
设目标函数f(x),不等式约束为g(x),有的教程还会添加上等式约束条件h(x)。此时的约束优化问题描述如下:
min f(X)
s.t.
h
i
(
X
)
h_{i}(X)
hi(X)=0 i=1,2,3,……,p
g
j
(
X
)
g_{j}(X)
gj(X)<=0 j=1,2,3,……,q
解决方法是拉格朗日乘子法,则我们定义不等式约束下的拉格朗日函数L,则L表达式为:
$L(X,λ,\mu)=f(x) + \sum_{i=1}^p λ_ih_{i}(X) + \sum_{j=1}^q \mu_jg_{j}(X) $
其中f(x)是原目标函数
,
h
i
(
X
)
h_{i}(X)
hi(X) 是第i个等式约束条件,λi是对应的约束系数
,
g
j
(
X
)
g_{j}(X)
gj(X) 是不等式约束
,
μ
j
\mu_j
μj 是对应的约束系数
。
此时若要求解上述优化问题,必须满足下述条件(也是我们的求解条件):
$\partial L/\partial X\vert_{x=x^} $=0 (1)
$ λ_i$!=0 (2)
μ
j
\mu_j
μj>=0 (3)
$\mu_jg_{j}(X^) $=0 (4)
h
i
(
X
∗
)
h_{i}(X^*)
hi(X∗)=0 (5)
$g_{j}(X^*) $<=0 (6)
这些求解条件就是KKT条件
。
(1)是对拉格朗日函数取极值时候带来的一个必要条件;
(2)是拉格朗日系数约束(同等式情况)
(3)是不等式约束情况。我们构造L(x,λ,u)函数,是希望L(x,λ,u)<=f(x)的(min表示求最小值)。在L(x,λ,u)表达式中第二项为0,若使得第三项小于等于0就必须使得系数u>=0,这也就是条件(3)。
(4)是互补松弛条件。要求得L(x,λ,u)的最小值一定是三个公式项中取得最小值,此时第三项最小就是等于0值的时候。稍微正式一点的解释,是由松弛变量推导而来。
(5)、(6)是原约束条件。
对于条件4,有如下推导:
证明开始
设有如下不等式约束优化问题:
min f(X)
s.t. g1(X)=a-x<=0
g2(X)=x-b<=0
此时引入松弛变量可以将不等式约束变成等式约束。设c和d为两个松弛变量,则上述的不等式约束可写为:
h1(x,c)=g1(X)+c2=a-x+c2=0
h2(x,d)=g2(X)+d2=x-b+d2=0
$ h_1(x,c)=a-x+c^2=0 $
$ h_2(x,d)=x-b+d^2=0 $
则该问题的拉格朗日函数为:
L
(
x
,
c
,
d
,
λ
,
μ
)
=
f
(
x
)
+
λ
h
1
(
x
,
c
)
+
μ
h
2
(
x
,
d
)
L(x,c,d,λ,\mu)=f(x) + λ h_1(x,c) +\mu h_2(x,d)
L(x,c,d,λ,μ)=f(x)+λh1(x,c)+μh2(x,d)
L
(
x
,
c
,
d
,
λ
,
μ
)
=
f
(
x
)
+
λ
(
a
−
x
+
c
2
)
+
μ
(
x
−
b
+
d
2
)
L(x,c,d,λ,\mu)=f(x) + λ(a-x+c^2) +\mu (x-b+d^2)
L(x,c,d,λ,μ)=f(x)+λ(a−x+c2)+μ(x−b+d2)
其中:
λ
≥
0
,
μ
≥
0
λ\ge0, \mu\ge0
λ≥0,μ≥0
根据拉格朗日乘子法,求解方程组:
∂
L
∂
x
=
f
′
(
x
)
+
λ
∂
g
1
(
x
)
∂
x
+
μ
∂
g
2
(
x
)
∂
x
=
0
\frac{\partial L}{\partial x}=f'(x)+λ \frac{\partial g_1(x)}{\partial x}+\mu \frac{\partial g_2(x)}{\partial x}=0
∂x∂L=f′(x)+λ∂x∂g1(x)+μ∂x∂g2(x)=0
<=>
∂
L
∂
x
=
f
′
(
x
)
−
λ
+
μ
=
0
\frac{\partial L}{\partial x}=f'(x)-λ +\mu =0
∂x∂L=f′(x)−λ+μ=0
∂ L ∂ c = 2 λ c = 0 \frac{\partial L}{\partial c}=2λc=0 ∂c∂L=2λc=0
∂ L ∂ d = 2 μ d = 0 \frac{\partial L}{\partial d}=2\mu d=0 ∂d∂L=2μd=0
∂ L ∂ λ = h 1 ( x , c ) = g 1 ( x ) + c 2 = 0 \frac{\partial L}{\partial λ}=h_1(x,c) =g_1(x) +c^2=0 ∂λ∂L=h1(x,c)=g1(x)+c2=0
∂ L ∂ μ = h 2 ( x , d ) = g 2 ( x ) + d 2 = 0 \frac{\partial L}{\partial \mu}=h_2(x,d) =g_2(x) +d^2=0 ∂μ∂L=h2(x,d)=g2(x)+d2=0
则由:
2
λ
c
=
0
,
λ
≥
0
2λc=0,λ\ge0
2λc=0,λ≥0,推出:
c
=
0
c=0
c=0
同理:
d
=
0
d=0
d=0
于是推出条件:
$ λ g_1(x) =0,\mu g_2(x)=0$
证明结束
六、SVM优化目标函数
目标:找到具有最小间隔的数据点(即支持向量),然后求间隔最大化,进而找出分类器中的w和b。
根据点到直线的距离(可翻看本文章5.1节),向量的间隔为
l
a
b
e
l
∗
label*
label∗(
w
T
∗
x
i
+
b
w^T*x_i+b
wT∗xi+b)$) * \frac1{||w||} $
得到初始函数:arg max
w
,
b
_{w,b}
w,b{
m
i
n
n
(
l
a
b
e
l
∗
min_n(label*
minn(label∗(
w
T
∗
x
i
+
b
w^T*x_i+b
wT∗xi+b)$) * \frac1{||w||} KaTeX parse error: Expected 'EOF', got '}' at position 1: }̲ 根据函数距离和几何距离可以得…w^T*x_i+b
)
取
到
最
小
值
1
,
即
所
有
点
都
在
支
持
向
量
中
,
那
么
此
时
只
需
求
解
)取到最小值1,即所有点都在支持向量中,那么此时只需求解
)取到最小值1,即所有点都在支持向量中,那么此时只需求解\frac1{||w||}$的最大值即可。
此时,问题转化成了:在约束条件label*( w T ∗ x i + b w^T*x_i+b wT∗xi+b)>=1.0 下,求 f ( x ) = 1 ∣ ∣ w ∣ ∣ f_{(x)}=\frac1{||w||} f(x)=∣∣w∣∣1的最大值。
因为求max
1
∣
∣
w
∣
∣
\frac1{||w||}
∣∣w∣∣1 的值等价于:
min(
1
2
∣
∣
w
∣
∣
2
\frac 12 ||w||^2
21∣∣w∣∣2)
s.t. label*(
w
T
∗
x
i
+
b
w^T*x_i+b
wT∗xi+b)>=1,i=1,2,……,n
这里引入拉格朗日乘子法。通过给每一个约束条件加上一个拉格朗日乘子,定义拉格朗日函数。(通过拉格朗日函数将约束条件融合到目标函数里去,从而只用一个函数表达式便能清楚的表达出我们的问题):
L
(
w
,
b
,
a
)
=
1
2
∣
∣
w
∣
∣
2
−
∑
i
=
1
n
a
i
∗
(
l
a
b
e
l
(
i
)
∗
(
w
T
∗
x
i
+
b
)
−
1
)
L(w,b,a)=\frac 12 ||w||^2-\sum ^n_{i=1} a_i * (label_{(i)}*(w^T*x_i+b)-1)
L(w,b,a)=21∣∣w∣∣2−∑i=1nai∗(label(i)∗(wT∗xi+b)−1)
其中,
a
i
a_i
ai是每一个约束条件对应的拉格朗日乘子
现在,问题转变成求: m i n w , b ( m a x a i ≥ 0 L ( w , b , a ) ) min_{w,b}(max_{a_i\ge 0}L(w,b,a)) minw,b(maxai≥0L(w,b,a))
由于一上来便得面对w和b两个参数,而 a i a_i ai又是不等式约束,这个求解过程不好做。当满足KKT条件时,我们可以把最小和最大的位置交换一下,变成: m a x a i ≥ 0 ( m i n w , b L ( w , b , a ) ) max_{a_i\ge 0}(min_{w,b}L(w,b,a)) maxai≥0(minw,bL(w,b,a))
交换以后的新问题是原始问题的对偶问题,当满足KKT条件时,这两者相等,这个时候就可以通过求解对偶问题来间接地求解原始问题。
下面可以先求L 对w、b的极小,再求L 对 a i a_i ai的极大。
1、首先固定 a i a_i ai,要让 L 关于 w 和 b 最小化,我们分别对w,b求偏导数,即令 ∂L/∂w 和 ∂L/∂b 等于零。这个地方推导出了一个重要的式子:∂L/∂w=0 <=> w = ∑ i = 1 n a i ∗ x i ∗ y i w=\sum ^n_{i=1} a_i *x_i*y_i w=∑i=1nai∗xi∗yi
2、求对 a a a的极大,即是关于对偶问题的最优化问题。经过上面第一个步骤的求w和b,得到的拉格朗日函数式子已经没有了变量w,b,只有 a a a。
最后,目标函数写成:
m
a
x
a
[
∑
i
=
1
m
α
−
1
2
∑
i
,
j
=
1
m
l
a
b
e
l
(
i
)
∗
l
a
b
e
l
(
j
)
∗
a
i
∗
a
j
∗
⟨
x
i
,
x
j
⟩
]
max_a[ \sum^m_{i=1}\alpha - \frac 12 \sum^m_{i,j=1} label_{(i)}*label_{(j)}*a_i*a_j*\langle x_i,x_j\rangle]
maxa[∑i=1mα−21∑i,j=1mlabel(i)∗label(j)∗ai∗aj∗⟨xi,xj⟩]
具体转化方法请参照:
http://blog.youkuaiyun.com/ali197294332/article/details/50767926