6.支持向量机(SVM),推理与思考,Lagrange,核函数

1. SVM简介

1.1 引入SVM

支持向量机(Support Vector Machine)于1995年首先提出,基本模型是的定义在特征空间上的间隔最大的线性分类器,SVM的学习策略就是间隔最大化。它在解决小样本非线性高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中。

  • 小样本:SVM算法要求的样本数量相对较少
  • 非线性:是指SVM擅长应付样本数据线性不可分的情况,主要通过松弛变量(也有人叫惩罚变量)和核函数技术来实现,这一部分是SVM的精髓。
  • 高维模式识别:SVM 产生的分类器很简洁,用到的样本信息很少,擅长梳理高维度的数据。

在这里插入图片描述

该坐标系中有两类点,途中画出了三个分类器的决策边界。凭借直观感受,我们认为H3的分类效果是最好的,首先H1不能把类别分开;H2可以,但分割线与最近的数据点只有很小的间隔,如果测试数据有一些噪声的话可能就会被H2错误分类(即对噪声敏感、泛化能力弱)。H3以较大间隔将它们分开,这样就能容忍测试数据的一些噪声而正确分类,是一个泛化能力不错的分类器。

1.2 SVM入门

线性分类器(一定意义上,也可以叫做感知机) 是最简单也很有效的分类器形式。在二维平面中,线性分类器的表示就是一条直线。如果一个线性函数能够将样本完全正确的分开,就称这些数据是线性可分的,否则称为非线性可分的。

决策边界

什么叫线性函数呢?在一维空间里就是一个点,在二维空间里就是一条直线,三维空间里就是一个平面,可以如此想象下去,如果不关注空间的维数,这种线性函数还有一个统一的名称——超平面(Hyper Plane)!

一个线性函数是一个实值函数(即函数的值是连续的实数),而我们的分类问题需要离散的输出值,例如用1表示某个样本属于类别,而用0表示不属于,这时候只需要简单的在实值函数的基础上附加一个阈值即可。线性函数的公式通常如下:
g ( x ) = w T x + b g(x)=w^T x+b g(x)=wTx+b
在Logistic算法中,我们通常将阈值设置为0,当 g(x) > 0 时,我们判断类别为1,小于0则判断类别为0,但是当 g(x) 的值接近0的时候,分类器就十分缺乏说服力了。

而在SVM算法中,通常将类别表示为1和-1,阈值设置为1和-1,如下公式:
{  if  w T x i + b >   1 ,   y i = 1.  if  w T x i + b < − 1 ,   y i = − 1. \left\{\begin{array}{l} \text { if } \quad w^{T} x_{i}+b> \ 1, \ y_{i}=1. \\ \text { if } \quad w^{T} x_{i}+b<-1, \ y_{i}=-1. \end{array}\right. { if wTxi+b> 1, yi=1. if wTxi+b<1, yi=1.
根据1.1中的图片,为了使模型的泛化效果更好,我们希望找到一条能够很好的对点进行分割的超平面,大致体现为这个超平面不会挨着某些点很近。综上,我们希望寻找这样一个超片面:距离超平面最近的点到超平面的距离最远

2. 分类间隔

需要有一个指标来衡量解决方案(即我们通过训练建立的分类模型)的好坏,而分类间隔是一个比较好的指标。首先,我们将数据集中的第 i 个数据表示为:
D i = ( x i , y i ) D_{i}=\left(x_{i}, y_{i}\right) Di=(xi,yi)
首先,我们了解一下范式概念,范数是对向量长度的一种度量。我们常说的向量长度其实指的是它的2-范数,范数最一般的表示形式为p-范数,可以将写成如下表达式:
w = ( w 1 , w 2 , w 3 , … … w n ) w=\left(w_{1}, w_{2}, w_{3}, \ldots \ldots w_{n}\right) w=(w1,w2,w3,……wn)
那么这个向量的p-范式为
∥ ω ∥ p = ω 1 p + ω 2 p + ω 3 p … + ω n p p \|\omega\|_{p}=\sqrt[p]{\omega_{1}^{p}+\omega_{2}^{p}+\omega_{3}^{p} \ldots+\omega_{n}^{p}} ωp=pω1p+ω2p+ω3p+ωnp
当p换成2时,就是传统的向量长度。通常当我们不指明p的时候,就忽略掉p值,以为不必关心p值,用几范数都可以。不过一般我们似乎会优先当作二范式,也就是代表向量长度。

在二维坐标系中,点到直线的距离公式为
d = ∣ A x 0 + B y 0 + C A 2 + B 2 ∣ d=\left|\frac{A x_{0}+B y_{0}+C}{\sqrt{A^{2}+B^{2}}}\right| d= A2+B2 Ax0+By0+C
将该公式映射到多维坐标系,结果便很明了,用范式表示如下:
d = ∣ w T x i + b ∣ ∥ w ∥ d=\frac{\left|w^{T} x_{i}+b\right|}{\|w\|} d=w wTxi+b
根据SVM的阈值公式,我们知道,在笛卡尔坐标系上,我们会有两个决策边界,公式如下所示。在二维和三维中,决策边界分别表示为直线和平面。
{ ω T x i + b + 1 = 0 ω T x i + b − 1 = 0 \left\{\begin{array}{l} {\omega}^{T} x_{i}+b+1=0 \\ {\omega}^{T} x_{i}+b-1=0 \end{array}\right. {ωTxi+b+1=0ωTxi+b1=0
那么我们该如何计算两个超平面之间的距离?根据上面的距离公式,我们能够很轻松地就推导得到,这倒是一个优雅美丽的公式。
d = 2 ∥ w ∥ d=\frac{2}{\|w\|} d=w2
当然,我们的目的是希望离超平面最近的点到超平面的距离最远,这里也只是简单做了一下其它引申,我们更应该考虑的还是点到超平面的距离。结合SVM的阈值公式,我们对点到超平面的距离公式略作变形:
 distance  = 1 ∥ w ∥ y i ( w T x i + b ) \text { distance }=\frac{1}{\|w\|} y_{i}\left(w^{T} x_{i}+b\right)  distance =w1yi(wTxi+b)

3. 最优间隙分类器

那么我们的目标就是找到离超平面最近的数据点,然后让其距离超平面最远,并求出参数w,b。这就可以写作:
arg ⁡ max ⁡ w , b { min ⁡ i ( y i ⋅ ( ω T x i + b ) ) ⋅ 1 ∥ w ∥ } \arg \max _{w, b}\left\{\min _{i}\left(y_{i} \cdot\left(\omega^{T} x_{i}+b\right)\right) \cdot \frac{1}{\|w\|}\right\} argw,bmax{imin(yi(ωTxi+b))w1}
通过控制 wb 来使得距离最远,通过控制 xi选中离超平面最近的点。根据阈值的公式,显然可以知道:
y i ⋅ ( ω T x i + b ) ≥ 1 y_{i} \cdot\left(\omega^{T} x_{i}+b\right) \geq 1 yi(ωTxi+b)1
我们这里可以认为左边表达式的最小值可以取到1,原因是如果超平面可以正确分类样本,那么总存在这样一个放缩变换:
{ ζ w   →   w ′ ζ b   →   b ′ \left\{\begin{array}{l} \zeta w \ \rightarrow \ w^{\prime} \\ \zeta b \ \rightarrow \ b^{\prime} \end{array}\right. {ζw  wζb  b
使得等式的右边为1。因此,我们可以将目标式改写成:
m a x w , b 1 ∥ w ∥ m a x_{w, b} \frac{1}{\|w\|} maxw,bw1
到现在,我们就将目标转化成了一个优化问题,对于优化问题,我们通常求解最小值;此外,我们有必要考虑到实际性的约束:使得每一个点都在超平面的两侧!那么,我们就需要加入约束方程。对目标函数稍作改变,我们得到这样一个优化问题,也就是SVM的最终目标。
{ min ⁡ w , b 1 2 ∥ w ∥ 2  s.t.  y i ( w T x i + b ) ⩾ 1 , i = 1 , 2 , … , m \left\{\begin{array}{l} \min _{w, b} \frac{1}{2}\|w\|^{2} \\ \text { s.t. } y_{i}\left(w^{T} x_{i}+b\right) \geqslant 1, i=1,2, \ldots, m \end{array}\right. {minw,b21w2 s.t. yi(wTxi+b)1,i=1,2,,m

4. Lagrange Multiplier

4.1 凸优化

在动手求一个优化的解之前我们必须先考虑:这个问题是不是有解?如果有解,是否能找到?对于一般意义上的规划问题,两个问题的答案都是不一定,但凸二次规划让人喜欢的地方就在于,它有解,而且可以找到,当时算法不同收敛速度也会随之不同。

(1)凸集

什么是凸集,对于n维空间中点的集合C,如果对集合中的任意两点 x 和 y ,以及实数 0≤θ≤1 ,都有:
θ x + ( 1 − θ ) y ∈ C \theta \mathrm{x}+(1-\theta) \mathrm{y} \in C θx+(1θ)yC
则称该集合称为凸集。如果把这个集合画出来,其边界是凸的,没有凹进去的地方。直观来看,把该集合中的任意两点用直线连起来,直线上的点都属于该集合。

(2)凸函数

在微积分中我们学习过凸函数的定义,下面来回忆一下。在函数的定义域内,如果对于任意的 xy ,以及实数0≤θ≤1,都满足如下条件:
f ( θ x + ( 1 − θ ) y ) ≤ θ f ( x ) + ( 1 − θ ) f ( y ) f(\theta \mathrm{x}+(1-\theta) \mathrm{y}) \leq \theta f(\mathrm{x})+(1-\theta) f(\mathrm{y}) f(θx+(1θ)y)θf(x)+(1θ)f(y)
则函数为凸函数。这个不等式和凸集的定义类似。从图像上看,一个函数如果是凸函数,那么它是向下凸出去的。用直线连接函数上的任何两点A和B,线段AB上的点都在函数的上方。

(3)凸优化

有了凸集和凸函数的定义之后,我们就可以给出凸优化的定义。如果一个最优化问题的可行域是凸集,并且目标函数是凸函数,则该问题为凸优化问题。凸优化问题可以形式化的写成:
min ⁡ f ( x ) x ∈ C \begin{array}{l} \min f(\mathrm{x}) \\ {\mathrm{x} \in C} \end{array} minf(x)xC
从最一般的定义上说,一个求最小值的问题就是一个优化问题(也叫寻优问题,更文绉绉的叫法是规划——Programming),它同样由两部分组成,目标函数和约束条件,可以用下面的式子表示:
min ⁡ f ( x ) s u b j e c t t o c i ( x ) ≤ 0 i = 1 , 2 , … , p c j ( x ) = 0 j = p + 1 , p + 2 , … , p + q \min f(x) \\ subject to c_{i}(x) \leq 0 \quad i=1,2, \ldots, p \\ \quad c_{j}(x)=0 \quad j=p+1, p+2, \ldots, p+q minf(x)subjecttoci(x)0i=1,2,,pcj(x)=0j=p+1,p+2,,p+q
凸优化的特点:

  • 有最优解,可以找到!
  • 局部最优解就是全局最优解

4.2 拉格朗日乘数法

(1)等式约束

首先我们看一下存在等式约束的极值问题求法,比如下面的最优化问题:
min ⁡ w f ( w )  s.t.  h i ( w ) = 0 , i = 1 , … , l \begin{array}{cc} \min _{w} & f(w) \\ \text { s.t. } & h_{i}(w)=0, \quad i=1, \ldots, l \end{array} minw s.t. f(w)hi(w)=0,i=1,,l
目标函数是f(w),下面是等式约束。通常解法是引入拉格朗日算子,这里使用β来表示算子,得到拉格朗日公式为:
L ( w , β ) = f ( w ) + ∑ i = 1 l β i h i ( w ) \mathcal{L}(w, \beta)=f(w)+\sum_{i=1}^{l} \beta_{i} h_{i}(w) L(w,β)=f(w)+i=1lβihi(w)
然后分别对 ωβ 求偏导,使得偏导数等于0,然后解出ω 和 βi。

(2)KKT条件

对于含有不等式约束的优化问题,如何求取最优值呢?常用的方法是KKT条件,同样地,把所有的不等式约束、等式约束和目标函数全部写为一个式子
L ( a , b , x ) = f ( x ) + a g ( x ) + b h ( x ) L(a, b, x)=f(x)+a g(x)+b h(x) L(a,b,x)=f(x)+ag(x)+bh(x)
KKT条件是说最优值必须满足以下条件:

  • L(a, b, x)对x求导为零
  • h(x) =0
  • a*g(x) = 0

求取这些等式之后就能得到候选最优值。其中第三个式子非常有趣,因为g(x)<=0,如果要满足这个等式,必须a=0或者g(x)=0. 这是SVM的很多重要性质的来源,如支持向量的概念。

这些个条件也让我想起了在学习运筹学时看到的一句话:线性规划如果存在最优解,那必然可以在某一个边界处的交点上可以取到。

(3)不等式约束

在了解KKT条件以后,我们开始探讨有不等式约束的极值问题求法。
min ⁡ w f ( w )  s.t.  g i ( w ) ≤ 0 , i = 1 , … , k h i ( w ) = 0 , i = 1 , … , l \begin{array}{cc} \min _{w} & f(w) \\ \text { s.t. } & g_{i}(w) \leq 0, \quad i=1, \ldots, k \\ & h_{i}(w)=0, \quad i=1, \ldots, l \end{array} minw s.t. f(w)gi(w)0,i=1,,khi(w)=0,i=1,,l
我们定义一般的拉格朗日公式:
L ( w , α , β ) = f ( w ) + ∑ i = 1 k α i g i ( w ) + ∑ i = 1 l β i h i ( w ) \mathcal{L}(w, \alpha, \beta)=f(w)+\sum_{i=1}^{k} \alpha_{i} g_{i}(w)+\sum_{i=1}^{l} \beta_{i} h_{i}(w) L(w,α,β)=f(w)+i=1kαigi(w)+i=1lβihi(w)
求出的极值点满足KKT条件:
{ ∂ L ∂ w = 0 α i ⩾ 0 α i g i ( w ) = 0 g i ( w ) ⩽ 0 \left\{\begin{array}{l} \frac{\partial L}{\partial w}=0 \\ \alpha_i \geqslant 0 \\ \alpha_{i} g_{i}(w)=0 \\ g_{i}(w) \leqslant 0 \end{array}\right. wL=0αi0αigi(w)=0gi(w)0
根据这些限制条件,我们往往就可以找到极值点!

注意,我们这里的约束方程都是凸函数。KKT的总体思想是将极值会在可行域边界上取得,也就是不等式为0或等式约束里取得,而最优下降方向一般是这些等式的线性组合,其中每个元素要么是不等式为0的约束,要么是等式约束。

5. SVM的求解

基于上述的理论,我们首先构建拉格朗日函数。不过不要忘记了我们的目标:最小化下面这个函数,找到对应的的W和b。
L ( W , b , α ) = 1 2 ∥ W ∥ 2 − ∑ i = 1 n α i [ y i ( X i T W + b ) − 1 ] L(W, b, \alpha)=\frac{1}{2}\|W\|^{2}-\sum_{i=1}^{n} \alpha_{i}\left[y_{i}\left(X_{i}^{T} W+b\right)-1\right] L(W,b,α)=21W2i=1nαi[yi(XiTW+b)1]
根据KKT条件,我们分别对W和b求偏导,并令其导函数为0,可以得到这样两个式子:
{ ∣ W ∣ = ∑ i = 1 n α i x i y i ∑ i = 1 n α i y i = 0 \left\{\begin{array}{l} {|W|}=\sum_{i=1}^{n} \alpha_{i} x_{i} y_{i} \\ \sum_{i=1}^{n} \alpha_{i} y_{i}=0 \end{array}\right. {W=i=1nαixiyii=1nαiyi=0
我们将这两个表达式代入到原函数,经过化简,最终可以得到这样一个简洁美丽的函数:
L = ∑ i = 1 n α i − 1 2 ∑ i ∑ j α i α j y i y j x i x j L=\sum_{i=1}^{n} \alpha_{i}-\frac{1}{2} \sum_{i} \sum_{j} \alpha_{i} \alpha_{j} y_{i} y_{j} x_{i} x_{j} L=i=1nαi21ijαiαjyiyjxixj
这个时候,我们的目标函数已经不包含w和b了,而仅仅包含α,已经不是我们曾经的函数了。我们这里只能针对α做优化,实际上我们得到了一个原模型的对偶模型。在运筹学基础理论中,我们知道,原问题和对偶问题如果均存在最优解,那么两个模型的最优解带入函数得到的值是一样的。另外,对偶问题和原问题的最大化最小化目标是相反的!

因此下一步,我们便要建立一个“新的”优化模型,求出对应的α,而后一步一步回代求出w和b。此时待处理的优化模型为:
max ⁡ α L = ∑ i = 1 n α i − 1 2 ∑ i ∑ j α i α j y i y j x i x j .  s.t.  ∑ α i y i = 0 \begin{array}{l} \max _{\alpha} \quad L=\sum_{i=1}^{n} \alpha_{i}-\frac{1}{2} \sum_{i} \sum_{j} \alpha_{i} \alpha_{j} y_{i} y_{j} x_{i} x_{j} . \\ \text { s.t. } \sum \alpha_{i} y_{i}=0 \end{array} maxαL=i=1nαi21ijαiαjyiyjxixj. s.t. αiyi=0
而对于该模型的寻优,就需要通过SMO算法了,本文不做介绍。

why 支持向量?

​ 当样本点 xi 没有落在虚线上,即:wx + b ≠ ±1 ,有 1 − y (wx + b) ≠ 0 ,此时根据KKT条件的第二条,必须要有 λi=0

​ 当样本点 xi 落在虚线上,即:wx + b = 1或−1 ,有 1 − y (wx + b) = 0 ,此时根据KKT条件的第二条, λi 取值没有限制。

​ 而我们的求解参数 w∗b∗ 是和 λi 息息相关(参考上面求导后的两个公式),如果样本点不落在虚线上,那么其λi=0,在累加 w∗时它的贡献值始终为0。也就是说,只有落在虚线上的点才对求解参数有影响,而这些点就被称为支持向量

6. 核函数

6.1 升维映射

以上,我们使用SVM处理的都是线性问题,但如果是非线性的,我们的做法是通过核函数将非线性问题转化成线性问题,我们有这样一个数学结论:可以把一个非线性可分数据集映射到足够足够高的维度,使其线性可分。

针对到每一个数据,就是将其从低纬度向高纬度做映射。
x i → φ ( x i ) x_{i} \rightarrow \varphi_{\left(x_{i}\right)} xiφ(xi)
将映射后的数据带入函数中,得到:
L = Max ⁡ ∑ i = 1 m α i − 1 2 ∑ i = 1 m ∑ 14 m α i y i α j y j φ ( x i T ) φ ( x j ) L=\operatorname{Max} \sum_{i=1}^{m} \alpha_{i}-\frac{1}{2} \sum_{i=1}^{m} \sum_{14}^{m} \alpha_{i} y_{i} \alpha_{j} y_{j} \varphi\left(x_{i}^{T}\right) \varphi\left(x_{j}\right) L=Maxi=1mαi21i=1m14mαiyiαjyjφ(xiT)φ(xj)

另外,假设我们有这样的一组数据集:
d i = ( x 1 i x 2 i ) d_{i}=\left(\begin{array}{l} x_{1}^{i} \\ x_{2}^{i} \end{array}\right) di=(x1ix2i)
我们对数据进行升高维度的映射,需要满足这样子的基本性质:
φ ( d 1 ) ⊤ ⋅ φ ( d 2 ) = ( d 1 ⋅ d 2 ) 2 \varphi\left(d_{1}\right)^{\top} \cdot \varphi\left(d_{2}\right) = \left(d_{1} \cdot d_{2}\right)^{2} φ(d1)φ(d2)=(d1d2)2
根据这条性质,再找到核函数以后,实际上又可以把数据从高维回溯到低维进行运算。我们令
K ( x i , x j ) = φ ( x 1 ) ⊤ ⋅ φ ( x 2 ) K(x_i,x_j) = \varphi\left(x_{1}\right)^{\top} \cdot \varphi\left(x_{2}\right) K(xi,xj)=φ(x1)φ(x2)
这里的K我们就称之为核函数!此时原函数就变为:
L = Max ⁡ ∑ i = 1 m α i − 1 2 ∑ i = 1 m ∑ 14 m α i y i α j y j K ( x i , x j ) L=\operatorname{Max} \sum_{i=1}^{m} \alpha_{i}-\frac{1}{2} \sum_{i=1}^{m} \sum_{14}^{m} \alpha_{i} y_{i} \alpha_{j} y_{j} K(x_i,x_j) L=Maxi=1mαi21i=1m14mαiyiαjyjK(xi,xj)

6.2 常见核函数

(1)线性核函数
K ( x , x i ) = x ⋅ x i K(x,x_i)=x⋅x_i K(x,xi)=xxi
线性核,主要用于线性可分的情况,我们可以看到特征空间到输入空间的维度是一样的,其参数少速度快,对于线性可分数据,其分类效果很理想,因此我们通常首先尝试用线性核函数来做分类,看看效果如何,如果不行再换别的

(2)多项式核函数
K ( x , x i ) = ( ( x ⋅ x i ) + 1 ) d K(x,x_i)=((x⋅x_i)+1)^d K(x,xi)=((xxi)+1)d
多项式核函数可以实现将低维的输入空间映射到高纬的特征空间,但是多项式核函数的参数多,当多项式的阶数比较高的时候,核矩阵的元素值将趋于无穷大或者无穷小,计算复杂度会大到无法计算。

(3)高斯核函数RBF
k ( x , x ′ ) = e − ∥ x − x ′ ∥ 2 2 σ 2 k\left(x, x^{\prime}\right)=e^{-\frac{\left\|x-x^{\prime}\right\|^{2}}{2 \sigma^{2}}} k(x,x)=e2σ2xx2
值得注意,根据泰勒公式,RBF实际上直接将数据映射到了无穷维度!

高斯径向基函数是一种局部性强的核函数,其可以将一个样本映射到一个更高维的空间内,该核函数是应用最广的一个,无论大样本还是小样本都有比较好的性能,而且其相对于多项式核函数参数要少,因此大多数情况下在不知道用什么核函数的时候,优先使用高斯核函数。

(4)核函数的选取

在选用核函数的时候,如果我们对我们的数据有一定的先验知识,就利用先验来选择符合数据分布的核函数;如果不知道的话,通常使用交叉验证的方法,来试用不同的核函数,误差最下的即为效果最好的核函数,或者也可以将多个核函数结合起来,形成混合核函数。

  • 如果特征的数量大到和样本数量差不多,则选用LR或者线性核的SVM;
  • 如果特征的数量小,样本的数量正常,则选用SVM+高斯核函数;
  • 如果特征的数量小,而样本的数量很大,则需要手工添加一些特征从而变成第一种情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

⁠脱欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值