一、定义

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||} wlabel(wTxi+b)
函数距离: ∣ w T ∗ x i + b ∣ |w^T*x_i+b| wTxi+b
几何距离: l a b e l ∗ ( w T ∗ x i + b ) ∣ ∣ w ∣ ∣ \frac{label*(w^T*x_i+b)}{||w||} wlabel(wTxi+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=x1x2x3xn y = ( y 1 y 2 y 3 … y n ) y=\begin{pmatrix} y_1 \\y_2 \\y_3 \\… \\y_n \end{pmatrix} y=y1y2y3yn
向量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&#x27;_x=ƒ&#x27;_x(x,y)+λφ&#x27;_x(x,y)=0 Fx=ƒx(x,y)+λφx(x,y)=0
F y ′ = ƒ y ′ ( x , y ) + λ φ y ′ ( x , y ) = 0 F&#x27;_y=ƒ&#x27;_y(x,y)+λφ&#x27;_y(x,y)=0 Fy=ƒy(x,y)+λφy(x,y)=0
F λ ′ = φ ( x , y ) = 0 F&#x27;_λ=φ(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)+λ(ax+c2)+μ(xb+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&#x27;(x)+λ \frac{\partial g_1(x)}{\partial x}+\mu \frac{\partial g_2(x)}{\partial x}=0 xL=f(x)+λxg1(x)+μxg2(x)=0
<=> ∂ L ∂ x = f ′ ( x ) − λ + μ = 0 \frac{\partial L}{\partial x}=f&#x27;(x)-λ +\mu =0 xL=f(x)λ+μ=0

∂ L ∂ c = 2 λ c = 0 \frac{\partial L}{\partial c}=2λc=0 cL=2λc=0

∂ L ∂ d = 2 μ d = 0 \frac{\partial L}{\partial d}=2\mu d=0 dL=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 wTxi+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 wTxi+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 wTxi+b)>=1.0 下,求 f ( x ) = 1 ∣ ∣ w ∣ ∣ f_{(x)}=\frac1{||w||} f(x)=w1的最大值。

因为求max 1 ∣ ∣ w ∣ ∣ \frac1{||w||} w1 的值等价于:
min( 1 2 ∣ ∣ w ∣ ∣ 2 \frac 12 ||w||^2 21w2)
s.t. label*( w T ∗ x i + b w^T*x_i+b wTxi+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)=21w2i=1nai(label(i)(wTxi+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(maxai0L(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)) maxai0(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=1naixiyi

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α21i,j=1mlabel(i)label(j)aiajxi,xj]
具体转化方法请参照:
http://blog.csdn.net/ali197294332/article/details/50767926

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐