拉格朗日乘子法与SVM分类器原理详细推导

SVM(Support Vector Machine,支持向量机)是一个十分传统且好用的分类器,在二分类问题上有十分良好的表现。

一、拉格朗日乘子法

拉格朗日乘子法是SVM参数优化的核心,它能够解决多个等式或不等式约束下的最优化问题。

例1,给定 x 1 − x 2 = 2 x_1-x_2=2 x1x2=2,如何寻找 x 1 2 + x 2 2 x_1^2+x_2^2 x12+x22的最大值,此时 x 1 , x 2 x_1,x_2 x1,x2是多少?

拉格朗日乘子法的核心在于设立一个拉格朗日方程,将目标函数与约束函数的信息融合在一起,然后找寻该函数的最值。以上述情况为例,定义目标函数 f ( x 1 , x 2 ) = x 1 2 + x 2 2 f(x_1,x_2)=x_1^2+x_2^2 f(x1,x2)=x12+x22,约束函数 g ( x 1 , x 2 ) = x 1 − x 2 − 2 g(x_1,x_2)=x_1-x_2-2 g(x1,x2)=x1x22。拉格朗日乘子法顾名思义,就是新设立一个变量乘在约束函数上,然后和目标函数相加。则可定义拉格朗日函数 L ( x 1 , x 2 , λ ) L(x_1,x_2,\lambda) L(x1,x2,λ)为:
L ( x 1 , x 2 , λ ) = f ( x 1 , x 2 ) + λ g ( x 1 , x 2 ) = x 1 2 + x 2 2 + λ ( x 1 − x 2 − 2 ) L(x_1,x_2,\lambda)=f(x_1,x_2)+\lambda g(x_1,x_2)=x_1^2+x_2^2+\lambda(x_1-x_2-2) L(x1,x2,λ)=f(x1,x2)+λg(x1,x2)=x12+x22+λ(x1x22)
要求得上式的最值,需要各个变量的偏导数为零,所以必须满足:
∂ L ∂ x 1 = ∂ L ∂ x 2 = ∂ L ∂ λ = 0 \frac{\partial L}{\partial x_1}=\frac{\partial L}{\partial x_2}=\frac{\partial L}{\partial \lambda}=0 x1L=x2L=λL=0

将上式转换为等式组,有:
2 x 1 + λ = 0 2 x 2 − λ = 0 x 1 − x 2 − 2 = 0 2x_1+\lambda=0\\2x_2-\lambda=0\\x_1-x_2-2=0 2x1+λ=02x2λ=0x1x22=0

求解可得当 x 1 = 1 , x 2 = − 1 , λ = − 2 x_1=1,x_2=-1,\lambda=-2 x1=1,x2=1,λ=2时, x 1 2 + x 2 2 x_1^2+x_2^2 x12+x22可取到最大值2。

上例是最基本的拉格朗日乘子法的应用场景,下面描述扩展场景。

例2,给定 x 1 − x 2 = 2 , x 1 + x 2 ≥ 1 x_1-x_2=2,x_1+x_2\geq1 x1x2=2,x1+x21,如何寻找 x 1 2 + x 2 2 x_1^2+x_2^2 x12+x22的最大值?

已知约束中除了一个等式约束,还引入了一个不等式约束。和等式约束不同,不等式约束需要分情况讨论:

1. 全局最值在约束范围内

由例1可知,在该例中如果撇开不等式约束,最值在 x 1 = 1 , x 2 = − 1 x_1=1,x_2=-1 x1=1,x2=1时成立。所以倘若不等式函数 h ( x 1 , x 2 ) > 0 h(x_1,x_2)>0 h(x1,x2)>0在最值情况下成立(比如 x 1 + x 2 > − 1 x_1+x_2>-1 x1+x2>1),那么这个约束就等于没有。

2.全局最值在约束范围外

这种情况是例2场景下的情况了,此时不等式约束生效,成为等式约束。即最后的最值点会落在约束条件上(此例为 x 1 + x 2 ≥ 1 x_1+x_2\geq 1 x1+x21)。

除了不等式总共有两项约束,因此依然要建立一个方程,将这些信息融合在一起。定义 f ( x 1 , x 2 ) = x 1 2 + x 2 2 f(x_1,x_2)=x_1^2+x_2^2 f(x1,x2)=x12+x22 g ( x 1 , x 2 ) = x 1 − x 2 − 2 g(x_1,x_2)=x_1-x_2-2 g(x1,x2)=x1x22 h ( x 1 , x 2 ) = x 1 + x 2 − 1 h(x_1,x_2)=x_1+x_2-1 h(x1,x2)=x1+x21,由于约束比例1多了一个,所以拉格朗日乘子也要多一个。所以该例下拉格朗日函数 L ( x 1 , x 2 , λ , γ ) L(x_1,x_2,\lambda,\gamma) L(x1,x2,λ,γ)为:
L ( x 1 , x 2 , λ , γ ) = f ( x 1 , x 2 ) + λ g ( x 1 , x 2 ) − γ h ( x 1 , x 2 ) = x 1 2 + x 2 2 + λ ( x 1 − x 2 − 2 ) + γ ( x 1 + x 2 − 1 ) L(x_1,x_2,\lambda,\gamma)=f(x_1,x_2)+\lambda g(x_1,x_2) -\gamma h(x_1,x_2)\\=x_1^2+x_2^2+\lambda(x_1-x_2-2)+\gamma(x_1+x_2-1) L(x1,x2,λ,γ)=f(x1,x2)+λg(x1,x2)γh(x1,x2)=x12+x22+λ(x1x22)+γ(x1+x21)

首先,需要前三个变量的偏导数为零,可以得到下列等式组:
2 x 1 + λ + γ = 0 2 x 2 − λ + γ = 0 x 1 − x 2 − 2 = 0 2x_1+\lambda+\gamma=0\\2x_2-\lambda+\gamma=0\\x_1-x_2-2=0 2x1+λ+γ=02x2λ+γ=0x1x22=0

然后,针对不等式约束,此处引出KKT条件,即对每一个不等式约束所需要满足的条件。在本例中可如下表示:
γ ≥ 0 h ( x 1 , x 2 ) ≥ 0 γ h ( x 1 , x 2 ) = 0 \gamma\geq0\\h(x_1,x_2)\geq0\\\gamma h(x_1,x_2)=0 γ0h(x1,x2)0γh(x1,x2)=0

下面具体描述其原理。
注:为了便于描述,有些表达会将 h ( x 1 , x 2 ) h(x_1,x_2) h(x1,x2)等表述为 h ( x ‾ ) h(\underline x) h(x),因为大多数情况往往不止两个变量,所以通过下划线的表达方式更泛用。

  1. γ ≥ 0   o r   γ ≤ 0 \gamma \geq0\ or\ \gamma \leq0 γ0 or γ0
    在例2的已知条件中,由于 f ( x ‾ ) f(\underline x) f(x)要求最大值,所以我们需要找到各个变量的值来使得拉格朗日函数 L L L达到最大值。现在,给定了 h ( x ‾ ) h(\underline x) h(x)大于等于0的约束,将这个约束放在拉格朗日函数中,可以看到它对最后的结果有正面的贡献,换句话说, h ( x ‾ ) h(\underline x) h(x) f ( x ‾ ) f(\underline x) f(x)一条心,都有利于拉格朗日函数 L L L达到最大值,所以 h ( x ‾ ) h(\underline x) h(x)的乘子 γ \gamma γ为正。反之,如果 h ( x ‾ ) h(\underline x) h(x)给出的约束是小于等于0的约束,乘子 γ \gamma γ就必须满足 γ ≤ 0 \gamma \leq 0 γ0

  2. h ( x 1 , x 2 ) ≥ 0 h(x_1,x_2) \geq 0 h(x1,x2)0
    这个约束很浅显,是已知条件给出的。

  3. γ h ( x 1 , x 2 ) = 0 \gamma h(x_1,x_2)=0 γh(x1,x2)=0
    这一条其实可以换一种写法: γ = 0   o r   h ( x 1 , x 2 ) = 0 \gamma=0\ or\ h(x_1,x_2)=0 γ=0 or h(x1,x2)=0。这其实就刚好贴合了先前提到的不等式约束的两种情况:极值点在不等式约束范围内 o r or or 极值点在不等式约束范围外。可以看到当 γ = 0 \gamma=0 γ=0时,拉格朗日函数里的不等式约束等同于不存在,而当 h ( x 1 , x 2 ) = 0 h(x_1,x_2)=0 h(x1,x2)=0时,不等式约束就等同于等式约束,意思是目标点在不等式约束的边界。以上就是KKT条件的描述。

回到例2,归并所有条件为:
γ ≥ 0 x 1 + x 2 − 1 ≥ 0 γ ( x 1 + x 2 − 1 ) = 0 2 x 1 + λ + γ = 0 2 x 2 − λ + γ = 0 x 1 − x 2 − 2 = 0 \gamma \ge 0 \\ x_1+x_2-1\ge0\\ \gamma(x_1+x_2-1)=0\\2x_1+\lambda+\gamma=0\\2x_2-\lambda+\gamma=0\\x_1-x_2-2=0 γ0x1+x210γ(x1+x21)=02x1+λ+γ=02x2λ+γ=0x1x22=0

由例1可知,其解不位于不等式约束内,所以在例2中,不等式约束将会生效为等式约束,因此可以改写为:
x 1 + x 2 − 1 = 0 2 x 1 + λ + γ = 0 2 x 2 − λ + γ = 0 x 1 − x 2 − 2 = 0 x_1+x_2-1=0\\2x_1+\lambda+\gamma=0\\2x_2-\lambda+\gamma=0\\x_1-x_2-2=0 x1+x21=02x1+λ+γ=02x2λ+γ=0x1x22=0
得: x 1 = 1.5 , x 2 = − 0.5 x_1=1.5,x_2=-0.5 x1=1.5,x2=0.5

实际应用中,往往会出现多个约束,只需要增加乘子,按如上方法一起求和构建拉格朗日函数即可。

二、SVM

提完拉格朗日乘子法,就要回到SVM的话题上了。本质上说,SVM和感知器类似,也是训练一组线性参数来对原数据集分割。给定一组包含 N N N个数据的训练数据集,我们首先假设它线性可分(即存在直线,可以将这个数据集完全正确分类),线性可分的概念可以通过如下式子从数学角度进行描述:
∃ w ⃗ w ⃗ T x i ⃗ + w 0 > 0 , ∀ x i ⃗ ∈ S 1 w ⃗ T x ⃗ i + w 0 ≤ 0 , ∀ x i ⃗ ∈ S 2 \exist \vec{w}\\ \vec w^T\vec{x_i}+w_0>0,\forall \vec{x_i}\in S_1\\ \vec w^T\vec x_i+w_0\leq0,\forall\vec{x_i}\in S_2 w w Txi +w0>0,xi S1w Tx i+w00,xi S2

其中 S 1 S_1 S1 S 2 S_2 S2表示二分类情况下的第一类和第二类。一般情况下,可以通过引入类别系数 z i z_i zi来简化上式:
z i = { 1 , x ⃗ i ∈ S 1 − 1 , x ⃗ i ∈ S 2 z_i=\left\{ \begin{aligned} 1, \vec x_i\in S_1 \\-1,\vec x_i\in S_2 \end{aligned} \right. zi={1,x iS11,x iS2

现在可将上式改写为:
∃ w ⃗ , s . t .   z i ( w ⃗ T x i ⃗ + w 0 ) > 0 , ∀ x i ⃗ \exist \vec{w},s.t.\ z_i(\vec{w}^T\vec{x_i}+w_0)>0,\forall \vec{x_i} w ,s.t. zi(w Txi +w0)>0,xi

SVM的目标在于寻找 w ⃗ \vec w w 使得对所有数据点,最小值越大越好。 即对于所有 x ⃗ i \vec x_i x i,希望下式的 b b b越大越好:
z i ( w ⃗ T x ⃗ i + w 0 ) > b {z_i(\vec w^T\vec x_i+w_0)}>b zi(w Tx i+w0)>b
但是通过最大化 b b b来求解 w ⃗ \vec w w w 0 w_0 w0不是一个好主意,最好的情况是能够有一个与 w ⃗ \vec w w 相关的目标函数来求解最优 w ⃗ \vec w w w 0 w_0 w0。可以将两边同时除以 ∣ ∣ w ∣ ∣ ||w|| w来标准化 w ⃗ \vec w w ,这样不会改变不等号。可得:
z i ( w ⃗ T x ⃗ i + w 0 ) ∣ ∣ w ∣ ∣ ≥ b ∣ ∣ w ∣ ∣ \frac{z_i(\vec w^T\vec x_i+w_0)}{||w||}\geq\frac{b}{||w||} wzi(w Tx i+w0)wb

可以看到,在给定 ∣ ∣ w ∣ ∣ ||w|| w的情况下最大化 b b b,和在给定 b b b的情况下最小化 ∣ ∣ w ∣ ∣ ||w|| w是等价的。所以此处令 b = 1 b=1 b=1,上式可转化为优化问题:对于所有 i i i,在约束 z i ( w ⃗ T x ⃗ i + w 0 ) − 1 ≥ 0 z_i(\vec w^T\vec x_i+w_0)-1\ge0 zi(w Tx i+w0)10下,优化 m i n ( ∣ ∣ w ⃗ ∣ ∣ ) min(||\vec w||) min(w )。建立拉格朗日函数:
L ( w ⃗ , w 0 , λ ⃗ ) = 1 2 ∣ ∣ w ⃗ ∣ ∣ 2 − ∑ i = 1 N λ i [ z i ( w ⃗ T x ⃗ i + w 0 ) − 1 ] L(\vec w, w_0, \vec \lambda)=\frac12||\vec w||^2-\sum\limits_{i=1}^N\lambda_i[z_i(\vec{w}^T\vec x_i+w_0)-1] L(w ,w0,λ )=21w 2i=1Nλi[zi(w Tx i+w0)1]

注:上式的第一项, ∣ ∣ w ⃗ ∣ ∣ ||\vec w|| w 写为 1 2 ∣ ∣ w ⃗ ∣ ∣ 2 \frac 12||\vec w||^2 21w 2并不影响求解,因为两者都单调上升,写后者是因为可以便于求偏导。
根据KKT条件,上式必须满足:
{ λ i ≥ 0 , ∀ i z i ( w ⃗ T x ⃗ i + w 0 ) − 1 ≥ 0 , ∀ i λ i z i ( w ⃗ T x ⃗ i + w 0 ) − 1 = 0 , ∀ i \left\{ \begin{aligned} \lambda_i\ge0,\forall i\\ z_i(\vec{w}^T\vec x_i+w_0)-1\geq0,\forall i\\ \lambda_iz_i(\vec{w}^T\vec x_i+w_0)-1=0,\forall i \end{aligned} \right. λi0,izi(w Tx i+w0)10,iλizi(w Tx i+w0)1=0,i

上式称为拉格朗日原始问题,要求解是比较难的,所以一般转化为拉格朗日对偶问题来化简求解。对 w ⃗ \vec w w w 0 w_0 w0求偏导,并使其等于零,可得:
∂ L ∂ w ⃗ = w ⃗ − ∑ i = 1 N λ i z i x i = 0 ∂ L ∂ w 0 = − ∑ i = 1 N λ i z i = 0 \frac{\partial L}{\partial \vec w}=\vec w-\sum_{i=1}^{N}\lambda_iz_ix_i=0\\ \frac{\partial L}{\partial w_0}=-\sum_{i=1}^{N}\lambda_iz_i=0 w L=w i=1Nλizixi=0w0L=i=1Nλizi=0

将上式代入拉格朗日函数,可得:
L ( λ ⃗ ) = 1 2 ∣ ∣ w ⃗ ∣ ∣ 2 − ∑ i = 1 N λ i z i ( w ⃗ T x ⃗ i ) − ∑ i = 1 N λ i z i w 0 + ∑ i = 1 N λ i = 1 2 ∑ i = 1 N ∑ j = 1 N λ i λ j z i z j x i ⃗ T x j ⃗ − ∑ i = 1 N ∑ j = 1 N λ i λ j z i z j x i ⃗ T x j ⃗ − 0 ∗ w 0 + ∑ i = 1 N λ i = − 1 2 ∑ i = 1 N ∑ j = 1 N λ i λ j z i z j x i ⃗ T x j ⃗ + ∑ i = 1 N λ i L(\vec \lambda)=\frac12||\vec w||^2-\sum_{i=1}^N\lambda_iz_i(\vec{w}^T\vec{x}_i)-\sum_{i=1}^N\lambda_iz_iw_0+\sum_{i=1}^N\lambda_i \\ =\frac12\sum_{i=1}^N\sum_{j=1}^N\lambda_i\lambda_jz_iz_j\vec{x_i}^T\vec{x_j}-\sum_{i=1}^N\sum_{j=1}^N\lambda_i\lambda_jz_iz_j\vec{x_i}^T\vec{x_j}-0*w_0+\sum_{i=1}^{N}\lambda_i\\ =-\frac12\sum_{i=1}^N\sum_{j=1}^N\lambda_i\lambda_jz_iz_j\vec{x_i}^T\vec{x_j}+\sum_{i=1}^{N}\lambda_i L(λ )=21w 2i=1Nλizi(w Tx i)i=1Nλiziw0+i=1Nλi=21i=1Nj=1Nλiλjzizjxi Txj i=1Nj=1Nλiλjzizjxi Txj 0w0+i=1Nλi=21i=1Nj=1Nλiλjzizjxi Txj +i=1Nλi
通过最优化上式的 λ ⃗ \vec \lambda λ 之后,可以通过 w ⃗ ∗ = ∑ i = 1 N λ i z i x ⃗ i \vec w^*=\sum_{i=1}^N\lambda_iz_i\vec{x}_i w =i=1Nλizix i来求得最优的 w ⃗ ∗ \vec w^* w ,并通过 λ i [ z i ( w ∗ T x ⃗ i + w 0 ) − 1 ] = 0 \lambda_i[z_i(w^{*T}\vec{x}_i+w_0)-1]=0 λi[zi(wTx i+w0)1]=0来求得 w 0 w_0 w0

接下来,讨论数据集线性不可分的情况,显然我们无法使用上述方法求解。此处引入松弛变量 σ \sigma σ,表示SVM开始容忍一些错误分类。其定义为如果分类正确,且在最优分界线内,则为零。如果在最优分界线外,则为到最优分界线的标准化距离。以下图为例,如果某个红色类别的数据点在黑粗线上,则其松弛变量为1,因为它距离最优分界线(最上的这条线)为1。显然对于所有数据点, σ i ≥ 0 \sigma_i\ge0 σi0
拉格朗日乘子法与SVM分类器原理详细推导_第1张图片
现在,约束不再是原先的对所有数据点 x ⃗ i \vec x_i x i要求其 z i ( w ⃗ T x ⃗ i + w 0 ) ≥ 1 z_i(\vec w^T\vec x_i+w_0)\ge1 zi(w Tx i+w0)1,而是 z i ( w ⃗ T x ⃗ i + w 0 ) ≥ 1 − σ i 。 z_i(\vec w^T\vec x_i+w_0)\ge1-\sigma_i。 zi(w Tx i+w0)1σi最小化目标函数也不再是 1 2 ∣ ∣ w ⃗ ∣ ∣ 2 \frac 12||\vec w||^2 21w 2,而变成了 1 2 ∣ ∣ w ⃗ ∣ ∣ 2 + c ∑ i = 1 N σ i \frac 12||\vec w||^2+c\sum\limits_{i=1}^N\sigma_i 21w 2+ci=1Nσi。也就是说,在考虑使得分界线离数据点尽可能远的同时,还考虑到使错分点也尽可能像分界线靠拢。 c c c为常数,表示松弛变量所占比重的超参数,在训练前需要人工设置。

这种情况下,其对偶问题与线性数据集类似(推导省略),即:
L ( λ ⃗ ) = − 1 2 ∑ i = 1 N ∑ j = 1 N λ i λ j z i z j x i ⃗ T x j ⃗ + ∑ i = 1 N λ i L(\vec \lambda)=-\frac12\sum_{i=1}^N\sum_{j=1}^N\lambda_i\lambda_jz_iz_j\vec{x_i}^T\vec{x_j}+\sum_{i=1}^{N}\lambda_i L(λ )=21i=1Nj=1Nλiλjzizjxi Txj +i=1Nλi
约束也与原先相同,除了 λ i ≥ 0 \lambda_i\ge 0 λi0需要转变为 0 ≤ λ i ≤ c 0 \le \lambda_i \le c 0λic

至此,线性的SVM就推导完毕了。当然还没完,在实际应用中,仅仅是线性的分类器很难有所作为,所以需要引入非线性的核函数来达到准确的分类目的。在上式中,有一部分是 x ⃗ i T x ⃗ j \vec x_i^T\vec x_j x iTx j,这是两个数据的内积,如果将其标准化,它其实是相似度的一种度量方式(具体地说,是余弦相似度)。这个内积,就是核函数的一种,可以考虑修改核函数来引入非线性信息,从而达到不同的分类效果。将核函数定义为 K ( x ⃗ i , x ⃗ j ) K(\vec x_i, \vec x_j) K(x i,x j),比较常见的有:

  1. 线性核函数 K l i n e a r ( x ⃗ i , x ⃗ j ) = α x ⃗ i T x ⃗ j K_{linear}(\vec x_i, \vec x_j)=\alpha \vec x_i^T\vec x_j Klinear(x i,x j)=αx iTx j
  2. 多项式核函数 K p o l y ( x ⃗ i , x ⃗ j ) = ( x ⃗ i T x ⃗ j + 1 ) P K_{poly}(\vec x_i, \vec x_j)=(\vec x_i^T\vec x_j+1)^P Kpoly(x i,x j)=(x iTx j+1)P
  3. 高斯核函数 K R B F ( x ⃗ i , x ⃗ j ) = e x p { − σ ∣ ∣ x ⃗ i − x ⃗ j ∣ ∣ 2 } K_{RBF}(\vec x_i, \vec x_j)=exp\{-\sigma||\vec x_i-\vec x_j||^2\} KRBF(x i,x j)=exp{σx ix j2}

最后一种也是sklearn的默认核函数,十分常见。

你可能感兴趣的:(机器学习)