学习July博文总结——支持向量机(SVM)的深入理解(上)

前言

本文是参照CSDN的July大神的热门博文《支持向量机通俗导论(理解SVM的三层境界》)写的。目的是因为July大神文中说,SVM理论的理解,需要一遍一遍的推导公式,直到脑中梳理下来,并可以直接推导相关公式的。本文的写作目的,是在笔者在第一次参考了July大神的博客,并手动推导公式成功后,希望通过Markdown的记录流程,进行第二遍对SVM理论的理解。另外,在笔者第一次研究SVM过程中会存在某些不懂的问题,笔者也会秉着July大神的理念——让没有机器学习理论基础的读者们看懂博文,尽量的将SVM的理论解释清楚。
再次说明,本文的最主要目的是笔者对博主July关于SVM理论介绍的二次学习,如果可以的话,也希望能给笔者的读者一些启发。

本文说明:

  1. 本文中涉及大量的向量,有的加了向量符号,有的没有加向量符号,但由于数量过多,且参考资料比较多,所以难以统一,笔者只能尽量的说明清楚。例如,文中的数据点 x 都是向量,核函数中的 K(xi,x) K(xi,x) 表达的是同一个意思。

参考网址:

《支持向量机通俗导论(理解SVM的三层境界》)
《支持向量机(五)SMO算法 》

一、了解SVM

支持向量机(Support Vector Machine, SVM),通俗来讲,它是一种二类分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器,其学习策略便是间隔最大化,最终可转化为一个凸二次规划问题的求解。

1. 分类标准的起源:Logistic回归

(1) 线性分类器

理解SVM,咱们必须先弄清楚一个概念:线性分类器。
给定一些数据点,它们分别属于两个不同的类,现在要找到一个线性分类器把这些数据分成两类。如果用x表示数据点,用y表示类别(y可以取1或者-1,分别代表两个不同的类),一个线性分类器的学习目标便是要在n维的数据空间中找到一个超平面(hyper plane),这个超平面的方程可以表示为:

ωTx+b=0(1.1.1)

  • ωT 中的T表示转置;
  • x :数据点
  • y :类别(取1或-1)

对于 y 取1或-1,可能有读者表示有疑问。其实1或-1的分类标准起源于logistic回归。

(2) Logistic回归

Logistic回归目的是从特征学习出一个0/1分类模型。这个模型是将特性的线性组合作为自变量,由于自变量的取值范围是负无穷到正无穷。因此,使用logistic函数(或称作sigmoid函数)将自变量映射到(0,1)上,映射后的值被认为是属于y=1的概率。

有假设函数:

hθ(x)=g(θTx)=11+eθTx(1.1.2)

  • x:n维数据点;
  • g:Logistic函数;
  • θTx :数据点x x 的特征;

(关于\theta θ \omega ω 的关系,后面式1.1.5中会给出解释)
g(z) = \frac {1}{1+e^{-z}} g(z)=11+ez 的图像如下图1.1所示:


学习July博文总结——支持向量机(SVM)的深入理解(上)_第1张图片
图1.1 Logistic函数曲线

从图中可以看出,Logister函数将范围为负无穷到正无穷的自变量z,映射到了区间(0, 1)。
前面提到的假设函数(式1.1.2),就是类型属于y = 1的概率。
\left\{\begin{matrix} \begin{align*} & P(y=1|x;\theta)=h_\theta(x) \\ & P(y=0|x;\theta)=1-h_\theta(x) \end{align*} \end{matrix} \right. \qquad (1.1.3)

{P(y=1|x;θ)=hθ(x)P(y=0|x;θ)=1hθ(x)(1.1.3)

这样,当我们要判别一个新来的特征属于哪个类时,只需求h_\theta(x) hθ(x) 即可,若h_\theta(x) hθ(x) 大于0.5,数据点就是y=1的类;反之,属于y=0类。

注: hθ(x) 只与 θTx 有关

  • θTx>0 时,则 hθ(x)>0.5 ,即 g(z) 只是用来映射;
  • θTx0 时,则 hθ(x)=1 θTx0 时,则 hθ(x)=0

如果我们只从特征 θTx 出发,那么我们所构建的模型的目标,就是让训练数据中,y=1 y=1 的特征 θT0 ,且 y=0 的特征 θT0 。Logistic回归,就是要学习得到 θ ,使得正例的特征远大于0,负例的特征远小于0,而且要在全部训练实例上达到这个目标。

(3) Logistic回归变形

为了后面的使用方便,我们这里对Logistic回归进行变形。
首先,将使用的结果标签 y=0 y=1 替换为 y=1 y=1 。展开特征 θTx ,如下式:

θTx=θ0+θ1x1+θ2x2+...+θnxn(x0=1)(1.1.4)

然后将上式(1.1.4)中的 θ0 替换为 b ,最后将后面的 θ1x1+θ2x2+...+θnxn 替换为 ωTx 。如此,则得到了:
θTx=ωTx+b(1.1.5)

也就是说,除了分类值y,由 y=0 变为 y=1 之外,线性分类函数与Logistic回归的形式 hθ(x)=g(θTx)=11+eθTx 没有区别。
进一步,我们可以将假设函数 hω,b(x)=g(ωTx+b) 中的 g(z) 函数做一个简化,将其简单映射到 y=1 y=1 上。映射关系如下:
g(z)={1,z01,z<0(1.1.6)

2. 线性分类的一个例子

(1) 线性分类举例

下面举个简单的例子。如下图1.2所示,现在有一个二维平面,平面上有两种不同的数据,分别用圈和叉表示。由于这些数据是线性可分的,所以可以用一条直线将这两类数据分开,这条直线就相当于一个超平面,超平面一边的数据点所对应的y全是-1 ,另一边所对应的y全是1。


学习July博文总结——支持向量机(SVM)的深入理解(上)_第2张图片
图1.2 二维平面线性分类

这个超平面可以用分类函数 f(x)=ωTx+b 表示,当 f(x) 等于0的时候,x便是位于超平面上的点,而 f(x) 大于0的点对应 y=1 的数据点, f(x) 小于0的点对应 y=1 的点,如下图1.3所示:


学习July博文总结——支持向量机(SVM)的深入理解(上)_第3张图片
图1.3 二维平面超平面分类

换言之,在进行分类的时候,遇到一个新的数据点 x ,将 x 代入 f(x) 中。如果 f(x) 小于0,则将x的类别赋为-1;如果 f(x) 大于0,则将x的类别赋为1。

注:
有的资料定义特征到结果的输出函数为 u=ωxb (后文也有用到),与这里定义的 f(x)=ωTx+b 本质上是一样的。
为什么呢?因为无论是 u=ωxb ,还是 f(x)=ωTx+b ,都不影响最终的优化结果。
下文你将看到,当我们转化到优化目标函数 max1ω,s.t.,yi(ωTxi+b,i=1,...,n) 的时候,为了求解方便,我们会把 yf(x) 令为1。即 yf(x) 无论是 y(ωT+b) ,还是 y(ωTb) ,对我们要优化的目标函数 max1ω 已经没有影响。

(2) y的取值意义

在July大神的博客中,有人问:SVM函数间隔中, γ^=y(wTx+b)=yf(x) 中的 y 是只取1和-1 吗? y 的唯一作用就是确保函数间隔的非负性?
此处总结July博客下面评论中的解释如下:

这个问题将问题搞混了。 y 是个分类标签,二分时,y就取了两个值,而刚好取了-1和1。只是因为用超平面分类时,不同的类中的点的函数值刚好有不同的符号,所以这里就用符号来进行了分类。
具体阐述如下:
1. 对于二类问题,因为 y 只取两个值,这两个是可以任意取的,只要是取两个值就行;
2. 支持向量机去求解二类问题,目标是求一个特征空间的超平面;而超平面分开的两类对应于超平面的函数值的符号是刚好相反的;
3. 基于上述两种考虑,为了使问题足够简单,我们取 y 的值为1和-1;
4. 在取定分类标签y为-1和1之后,一个平面正确分类样本数据,就相当于用这个平面计算 yf(x)>0
5. 并且这样一来, yf(x) 也有了明确的几何含义;

总而言之要明白,二类问题的标签 y 是可以取任意两个值的,不管取怎样的值对于相同的样本点,只要分类相同,所有的y的不同取值都是等价的。之所以取某些特殊的值,只是因为这样一来计算会变得方便,理解变得容易。正如July大神的朋友张磊所言,svm中y取1或-1的历史原因是因为感知器最初的定义,实际取值可以任意,总能明确表示输入样本是否被误分,但是用+1、-1可以起码可以是问题描述简单化、式子表示简洁化、几何意义明确化。
举个例子:如果取 y 为1与2(比如原来取-1的现在取1,原来取1的现在取2 ),那么分类正确的判定标准就变成了 (y1.5)f(x)>0 。所以取1和-1只是为了计算简单方便,没有实质变化,更非一定必须取一正一负。

接下来的问题是,如何确定这个超平面呢?从直观上而言,这个超平面应该是最适合分开两类数据的直线。而判定“最适合”的标准就是这条直线离直线两边的数据的间隔最大。所以,得寻找有着最大间隔的超平面。

3. 函数间隔与几何间隔

(1) 函数间隔(Functional Margin)

在超平面 ωTx+b=0 确定的情况下, |ωTx+b| 能够表示点x到超平面的距离远近,而通过观察 ωTx+b 的符号与类型标记 y 符号是否一致,可以判断分类是否正确
所以,我们可以用 y(ωT+b) 的正负性来判定或表示分类的正确性。所以我们便在此处引出了函数间隔(Functional Margin)的概念。
定义函数间隔如下所示:

γ^=y(ωTx+b)=yf(x)(1.3.1)

式(1.3.1)中参数含义如下:

  • x :特征;
  • y :结果标签;
  • i :表示第i个样本;

而超平面 (ω,b) 关于训练数据集 T 中所有样本点 (xi,yi) 的函数间隔最小值,便成为超平面 (ω,b) 关于 T 的函数间隔:

γ^=minγi^(i=1,...n)(1.3.2)

(2) 几何间隔(Geometrical Margin)

上面给出了函数间隔的定义,但这样定义的函数间隔有问题。比如成比例的改变 ω,b (如将他们都增大2倍),则函数间隔 f(x) 的值变成了原来的2倍,但此时超平面却没有改变。所以只有函数间隔远远不够。
事实上,我们可以对法向量 ω 加些约束条件,从而引出真正定义点到超平面的距离–几何间隔(geometrical margin)的概念。
假定对于一个点 x ,令其垂直投影到超平面上的对应点为 x0 ω 是垂直于超平面的一个向量,为样本 x 到超平面的距离,如下图1.4所示:


学习July博文总结——支持向量机(SVM)的深入理解(上)_第4张图片
图1.4 点 x 在超平面的投影 x0

根据平面几何知识,有:

x=x0+γωω(1.3.3)

上式(1.3.3)中参数说明如下:

  • ω ω 的二阶范数,是一个类似于模的表示长度的概念;
    • 例如有向量 ω={a,b,c} ,则 ω=a2+b2+c2
  • ωω 是单位向量,即一个向量除以它的模;

又由于 x0 是超平面上的点,满足 f(x0)=0 ,所以代入超平面的方程 ωTx+b=0 ,可得到 ωTx0+b=0 ,即 ωTx0=b
然后,令式(1.3.3)即 x=x0+γωω 两端同时乘 ωT ,再根据 ωTx0=b ωTω=ω2 ,可以得到:

γ=ωT+bω=f(x)ω(1.3.4)

为了得到 γ 的绝对值,令 γ 乘上对应的类别y,即可得出几何间隔(用 γ˜ 表示)的定义:
γ˜=yγ=γ^ω(1.3.5)

式(1.3.5)中, γ^ 是前文中的函数间隔。所以可以看出,几何间隔就是函数间隔除以 ω ,而且函数间隔 y(ωTx+b)=yf(x) 实际上就是 |f(x)| ,只是人为定义的一个间隔度量。几何间隔 yf(x)ω 才是直观上的点到超平面的距离。

4. 最大间隔分类器(Maximum Margin Classifier)

(1) “间隔”的说明

对一个数据点进行分类,当超平面离数据点的”间隔”越大,分类的确信度(confidence)也越大。所以,为了使得分类的确信度尽量高,需要让所选择的超平面能够最大化该“间隔”值。这个间隔就是下图1.5中的Gap的一半。


学习July博文总结——支持向量机(SVM)的深入理解(上)_第5张图片
图1.5 超平面的间隔

通过由前面的分析可知:函数间隔不适合用来最大化间隔值,因为在超平面固定以后,可以等比例地缩放 ω 的长度和 b 的值,这样可以使得 f(x)=ωT+b 的值任意大,即函数间隔 γ^ 可以在超平面保持不变的情况下被取得任意大。
但由于几何间隔 γ˜ ω 做了除运算,所以在缩放 ω b 的时候,几何间隔 γ˜ 不会改变,它只随着超平面的变化而变动。因此,这是更加合适的一个间隔,即这里要找的最大间隔分类超平面中的“间隔”指的是几何间隔

(2) 最大间隔分类器的定义

最大间隔分类器(maximum margin classifier)的目标函数可以定义为:

maxγ˜(1.4.1)

同时需要满足一些条件,根据式(1.3.2)中间隔的定义,存在:
s.t.,yi(ωTxi+b)=γi^γ^,i=1,...,n(1.4.2)

上式(1.4.2)中, s.t. 即Subject to的缩写,约束条件的意思。
回顾式(1.3.5)中几何间隔的定义 γ˜=yγ=γ^ω ,可知如果令函数间隔 γ^=1 ,则有 γ˜=1ω ,且约束条件如上式(1.4.2)。综上,上述目标函数便转化成了:
max1ωs.t.,yi(ωTxi+b)=γi^γ^,i=1,...,n(1.4.3)

上式(1.4.3),相当于在相应的约束条件 yi(ωTxi+b)1,i=1,...,n 下,将值 1ω 最大化,即最大化几何间隔 γ˜

注:为什么令 γ^=1
在几何间隔部分说到,若成比例改变 ω,b ,超平面不会改变,但函数间隔 γ^ 会成比例改变,所以可以通过等比例改变 ω,b 值的方法使函数间隔 γ^=1
具体方法:令 γ^=y(ωTx+b) 中的 ω,b 同乘 γ^=1 ,得到 ω=ωγ^,b=bγ^ ,再将 ω,b 代入式(1.4.1)中,即得到最大间隔分类器的目标函数。
此处如下图1.6所示:


学习July博文总结——支持向量机(SVM)的深入理解(上)_第6张图片
图1.6 超平面上的支持向量

中间的实线便是寻找到的最优超平面(Optimal Hyper Plane),其到两条虚线边界的距离相等,这个距离就是几何间隔 γ˜ 。两条虚线间隔边界之间的距离等于 2γ˜ ,而 虚线边界上的点,就是支持向量。由于这些支持向量刚好在虚线间隔边界上,且我们之前把函数间隔 γ^ 设置为1,所以它们满足 y(ωTx+b)=1 。而对于其他所有不是支持向量的点,则显然有 y(ωTx+b)>1

至此算是将SVM的第一层讲解完毕,对于那些只关心怎么用SVM的朋友便已足够,不必再更进一层深究其更深的原理。

二、深入SVM

1. 从线性可分到线性不可分

接着考虑上一章中得到的式(1.4.3)中的目标函数:

max1ωs.t.,yi(ωT+b)=γi^γ^,i=1,...,n

由于求 max1ω 的最大值,相当于求 12ω2 的最小值,所以上述目标函数等价于下式:
min12ω2s.t.,yi(ωT+b)=γi^γ^,i=1,...,n(2.1.1)

(1) 从原始问题到对偶问题的求解

由于现在的目标函数是二次的,约束条件是线性的,所以它是一个凸二次规划问题。
这个问题可以用现成的QP (Quadratic Programming) 优化包进行求解。一言以蔽之:在一定的约束条件下,目标最优,损失最小。
此外,由于这个问题的特殊结构,还可以通过拉格朗日对偶性(Lagrange Duality)变换到对偶变量 (dual variable) 的优化问题,即通过求解与原问题等价的对偶问题(Dual Problem)得到原始问题的最优解,这就是线性可分条件下支持向量机的对偶算法
这样做的优点在于:

  • 对偶问题往往更容易求解;
  • 可以自然的引入核函数,进而推广到非线性分类问题。

什么是拉格朗日对偶型呢?简单的讲,通过给每一个约束条件加上一个拉格朗日乘子 α (Lagrange Multiplier),定义拉格朗日函数如下式(2.1.2):

L(ω,b,α)=12ω2i=1nαi[yi(ωTxi+b)1](2.1.2)

注:
1. 这里定义为拉格朗日函数的好处,在于通过拉格朗日函数将约束条件融合到目标函数里,从而只用一个函数表达式便能清楚表达出我们的问题。(具体内容可以见大学课堂的概率论教材);
2. 拉格朗日乘子 α={αi},i=1,...,n ,且 αi>0,i=1,...,n

然后令:

θ(ω)=maxαi0L(ω,b,α)(2.1.3)

容易验证,当某个约束条件不满足时,例如 yi(ωTxi+b)<1 ,那么显然有 θ(ω)=+ (只要让 αi=+ 即可)。
而当所有约束条件都满足时,此时式(2.1.3)多项式的后一项 ni=1αi[yi(ωTxi+b)1]>0 ,此时式(2.1.3)的最优值为 θ(ω)=12ω2 ,该值也为最初要最小化的量。
因此,在约束条件得到满足的情况下(包括拉格朗日乘子的约束条件: α={αi},i=1,...,n ,且 αi>0,i=1,...,n ),最小化 12ω2 ,实际上等价于直接最小化(2.1.3)式 θ(ω) 。因为如果约束条件没有得到满足, θ(ω) 会等于无穷大,自然不会是我们所要求的最小值。
具体写出来,目标函数变成了:
minω,bθ(ω)=minω,bmaxαi0L(ω,b,α)=p(2.1.4)

这里用 p 表示这个问题的最优解,而且与最初的问题等价。如果直接求解,那么一上来便得面对 ω b b 两个参数,而 \alpha_i αi 又是不等式约束,这个求解过程不好做。所以这里我们把最小和最大的位置交换,变成:
\max _{\alpha_i \geq 0} \min _{\omega, b} \mathcal{L}(\omega, b, \alpha) = d^* \qquad (2.1.5)
maxαi0minω,bL(ω,b,α)=d(2.1.5)

交换以后的新问题是原始问题的对偶问题,这个新问题的最优值用 d 表示,而且这里有 dp ,在满足某些条件(后文中的Slater条件)的情况下, d=p 。这时候就可以通过求解对偶问题,间接地求解原始问题。换句话说,之所以从式(2.1.4)中的原始问题 p ,转换到式(2.1.5)中的对偶问题 d ,一是因为 d p 的近似解,而是因为转化为对偶问题后更容易求解。

下面,我们可以先求 L ω,b 的极小值,然后求 L α 的极大值。

(2) KKT条件

上一小节中提到,在满足某些条件的情况下, d=p 。这里某些条件是指Slater条件。
所谓Slater条件,就是指凸优化问题:如果存在一个点 x ,使得所有等式约束都成立,而且所有不等式约束都严格成立(即取 >,< ,不取 , ),则满足Slater条件。
对于此处,Slater条件成立,所以 dp 可以取等号。

一般情况下,一个最优化数学模型能表示成下列标准形式:

minf(x)s.t. hj(x)=0,j=1,...,pgk(x)0,k=1,...,qxXRn(2.1.6)

式(2.1.6)中参数如下:

  • f(x) :需要最小化的函数;
  • h(x) :等式约束;
  • g(x) :不等式约束;
  • p,q :等式约束和不等式约束的数量;

同时,我们需要了解以下两点:

  1. 凸优化的概念:
    • χRn 为一凸集, f:χRn 为一个凸函数;
    • 凸优化就是找出一点 xχ ,使得每一个 xχ 满足 f(x)f(x) ,即 x f(x) 的极小值点;
  2. KKT条件的意义:
    • KKT条件是一个非线性规划(Nonlinear Programming)问题能有最优化解法的必要和充分条件;

而KKT条件就是指上面式(2.1.6)中最优化数学模型的标准形式中的最小点 x 必须满足下面的条件,这些条件如下式(2.1.7)所示:

hj(x)=0,j=1,..,p,gk(x)0,k=1,...,qf(x)+j=1pλjhj(x)+k=1qμkgk(x)=0λj0,μk0,μkgk(x)=0(2.1.7)

经过论证,我们这里的问题是满足KKT条件的。原因如下:

  1. 满足Slater条件;
  2. f=min12ω2 可微, g=yi(ωTxi+b)10 可微,即在拉格朗日函数 L(ω,b,α) 中, L ω,b 都可导;

因为我们现在转化为求解第二个问题。也就是说,原始问题(即式(1.4.3)) max1ω ,通过满足KKT条件,已经转化成了对偶问题(即式(2.1.5)) maxαi0minω,bL(ω,b,α)=d

(3) 对偶问题求解的3个步骤

求解这个对偶学习问题,分为三个步骤:
1. 令 L(ω,b,α) 关于 ω b 最小化;
2. 利用SMO算法求解对偶问题中的拉格朗日乘子,求对 α 的极大;
3. 求参数 ω,b

注:July大神的原文中的步骤与笔者的不同,是因为笔者没有理解按照July大神的步骤。按照原文中的(2)(3)步骤的话,是已经在步骤(2)中求出了 α 的极大(即已经求出了 α ),然后又在步骤(3)中用SMO算法求了一遍 α ,这是笔者不能理解的。所以笔者在此按照自己的理解,把这三个步骤改了一下。如果真有读者看到了这里而且有指点意见的话,笔者感激不尽。

下面按步骤进行说明:

A. 首先固定 α ,令 L 关于 ω,b 最小化

对于式(2.1.2),我们分别对 ω,b 求偏导数,即令 Lω,Lb 等于0。

Lω=0ω=i=1nαiyixiLb=0i=1nαiyi=0(2.1.8)

注:关于二范数的求导如下式(2.1.9)所示:

xxα2=xαxα2x22x=xTx2x=2x(2.1.9)

将上式(2.1.8)代入之前的式(2.1.2),即 L=12ω2ni=1αi[yi(ωTxi+b)1] 中,得到:

L=12i,j=1nαiαjyiyjxTixji,j=1nαiαjyiyjxTixjbi=1nαiyi+i=1nαi=i=1nαi12i,j=1nαiαjyiyjxTixj(2.1.10)

关于上式(2.1.10)的推导比较复杂,如下式所示:
L(ω,b,α)=12ω2i=1nαi[yi(ωTxi+b)1]=12ωTωi=1nαiyiωTxibi=1nαiyi+i=1nαi(2.1.11)

将式(2.1.8)中的 ω=ni=1αiyixi 代入上式(2.1.11)中得:
L(ω,b,α)=12ωTi=1nαixiyiωTi=1nαiyixibi=1nαiyi+i=1nαi=12ωTi=1nαiyixibi=1nαiyi+i=1nαi=12[i=1nαiyixi]Ti=1nαiyixibi=1nαiyi+i=1nαi=12i=1nαiyi(xi)Ti=1nαiyixibi=1nαiyi+i=1nαi=12i,j=1nαiαjyiyjxTixj+i=1nαi(2.1.12)

经过式(2.1.11)与(2.1.12)的推导,即可得到式(2.1.10)。

在式(2.1.10)中我们可以看出,由于 xi,yi 都是已知量,所以此时的拉格朗日函数只包含了一个变量,那就是 αi(i=1,...,n) 。只要求出了 αi ,就能在后面的步骤中求出 ω,b ,从而求出分类函数 f(x)=ωT+b

B. 利用SMO算法求解对偶问题中的拉格朗日乘子

求对 α 的极大值,就是关于对偶问题的最优化问题。经过上一个步骤的求取 ω,b ,得到的拉格朗日函数已经没有了变量 ω,b ,只存在变量 α
通过上面的式(2.1.5), (2.1.6), (2.1.10),可以得到此时的目标函数:

maxαi=1nαi12i=1nαiαjyiyjxTixjs.t.,αi0,i=1,...,ni=1nαiyi=0(2.1.13)

这时候通过SMO算法可以求解对偶问题中的拉格朗日乘子 α
注:关于SMO算法,可以跳到后文,即下一篇博客的第三章第5节。但SMO算法中需要使用到后文讲到的核函数、松弛因子的概念,所以笔者建议还是按照顺序进行学习。

这样求出了极值情况下的 αi ,就可以求出极值情况下的 ω,b

C. 求参数 ω,b

上面一步求出了拉格朗日乘子 α 。通过式(2.1.8),可以计算出:

ω=i=1nαiyixi

这里的 ω 是指极值情况下的 ω 值,再然后可以求 b 值。由于对于边界上的支持向量有:
y(ωTx+b)=1(2.1.14)

式(2.1.14)的参数 x 数据点是支持向量,参数 y 表示支持向量所属类别(取值1或-1)。
而在 y=1,y=1 的类别中,支持向量处于边界点。由超平面的图(即图1.6)可得:
maxyi=1ωTxi+b=1minyi=1ωTxi+b=1(2.1.15)

上式(2.1.15)中的两式相加,得到极值情况下的 b 值,记为 b
b=12[maxyi=1ωTxi+minyi=1ωTxi](2.1.16)

这样就求出了 ω,b,α ,便求出了我们在 线性情况下的超平面 f(x)

(4) 线性不可分的情况

到目前为止,我们的 SVM 还比较弱,只能处理线性的情况,下面我们将引入核函数,进而推广到非线性分类问题。
让我们再来看看上述推导过程中得到的一些有趣的形式。首先就是关于我们的超平面,对于一个数据点 x 分类,实际上是通过把 x 带入到 f(x)=ωTx+b 算出结果,然后根据其正负号进行类别划分的。在前面的推导中,我们得到式(2.1.8)):

ω=i=1nαiyixi

因此我们的分类函数为:
f(x)=(i=1nαiyixi)Tx+b=i=1nαiyixi,x+b(2.1.17)

上式(2.1.17)中,符号 , 表示向量内积。
这里的形式的有趣之处在于,对于新点 x 的预测,只需要计算它与训练数据点的内积即可。这一点是之后使用核函数Kernel进行非线性推广的基本前提,至关重要。
此外,所谓 Supporting Vector 也在这里显示出来——事实上,所有 非支持向量所对应的系数 α 都是等于零的,因此对于新点的内积计算,不需要针对所有的训练数据,实际上只要针对少量的支持向量就可以了。

为什么非支持向量对应的 α 等于零呢?直观上来理解的话,就是这些“后方”的点(即在超平面另一侧的点)——正如我们之前分析过的一样,对超平面是没有影响的,由于分类完全有超平面决定,所以这些无关的点并不会参与分类问题的计算,因而也就不会产生任何影响了。
在本节第一小节中,通过拉格朗日乘子得到的目标函数(式(2.1.3))如下:

θ(ω)=maxαi0L(ω,b,α)=maxαi012ω2i=1nαi[yi(ωTxi+b)1]

注意:如果 x_i xi 是支持向量的话,上式右边的 [y_i(\omega ^ T x_i + b) - 1] [yi(ωTxi+b)1] 部分是等于0的,因为支持向量的函数间隔等于1;而对于非支持向量来说,函数间隔大于0,所以 [y_i(\omega ^ T x_i + b) - 1] [yi(ωTxi+b)1] 部分是大于0的。而 \alpha_i \geq 0 αi0 (见式(2.1.2)的注),所以为了满足最大化, \alpha_i αi 必须等于0。这也是非支持向量点的局限性。
从第一章第4节到上述所有内容,便得到了一个最大间隔超平面分类器(Maximum Margin Hyper Plane Classifier),这就是所谓的支持向量机(Support Vector Machine)。但是 到目前为止,我们的 SVM 还比较弱,只能处理线性的情况。不过,在得到了对偶dual 形式之后, 通过核函数Kernel推广到非线性的情况就变成了一件非常容易的事情了。

2. 核函数Kernel

(1) 特征空间的隐式映射

事实上,大部分时候数据并不是线性可分的,这个时候满足这样条件的超平面就根本不存在。
在上文中,我们已经了解到了SVM处理线性可分的情况,那对于非线性的数据SVM应该怎么处理?对于非线性的情况,SVM 的处理方法是选择一个核函数\mathcal{K}(⋅,⋅) K(,) ,通过将数据映射到高维空间,来解决在原始空间中线性不可分的问题。
具体来说,在线性不可分的情况下,支持向量机首先在低维空间中完成计算,然后通过核函数将输入空间映射到高维特征空间,最终在高维特征空间中构造出最优分离超平面,从而把平面上本身不好分的非线性数据分开。如图2.1所示,一堆数据在二维空间无法划分,从而映射到三维空间里划分:


学习July博文总结——支持向量机(SVM)的深入理解(上)_第7张图片
图2.1 二维空间数据映射到三维空间里并划分

而在我们遇到核函数之前,如果用原始的方法,那么在用线性学习器学习一个非线性关系,需要选择一个非线性特征集,并且将数据写成新的表达形式,这等价于应用一个固定的非线性映射,将数据映射到特征空间,在特征空间中使用线性学习器,因此,考虑的假设集是如下式(2.2.1)这种类型的函数:
f(x) = \sum_{i=1}^n \omega_i \phi_i (x) + b \qquad (2.2.1)
f(x)=i=1nωiϕi(x)+b(2.2.1)

这里的 \phi : X \rightarrow F ϕ:XF 从输入空间到某个特征空间的映射
这意味着,建立非线性学习器分为两步:

  1. 使用一个非线性映射将原始数据x x 变换到一个特征空间F;
  2. 在特征空间使用线性学习器分类。

而由前面的内容可以了解到,对偶形式是线性学习器的一个重要性质,这意味着假设可以表达为训练点的线性组合,因此决策规则可以用测试点和训练点的内积来表示:
f(x) = \sum_{i=1}^n \alpha_i y_i \langle \phi (x_i) , \phi (x)\rangle + b \qquad (2.2.2)

f(x)=i=1nαiyiϕ(xi),ϕ(x)+b(2.2.2)

上式(2.2.2)中, \langle \phi (x_i) , \phi (x)\rangle ϕ(xi),ϕ(x) 的意义就是 在特征空间中直接计算内积。这种像在原始输入点的函数中一样,有可能将上面两个步骤融合到一起建立一个非线性的学习器,这样直接计算的方法,被称为 核函数方法
这里的核,是一个函数 \mathcal{K} K ,对于所有的数据点 x,zX ,满足:
K(x,z)=ϕ(x),ϕ(z)(2.2.3)

(2) 核函数:如何处理非线性数据

A. 原始数据的映射

来看个核函数的例子。如下图2.2所示的两类数据,分别分布为两个圆圈的形状,这样的数据本身就是线性不可分的,此时我们该如何把这两类数据分开?
注:后面会有July大神的好友pluskid提供的gif动图说明。


学习July博文总结——支持向量机(SVM)的深入理解(上)_第8张图片
图2.2 圆圈状的数据

事实上,上图所述的这个数据集,是用两个半径不同的圆圈加上了少量的噪音生成得到的。所以,一个理想的分界应该是一个“圆圈”,而不是一条线(超平面)。如果用 x1,x2 来表示这个二维平面的两个坐标的话,我们知道一条二次曲线(圆圈是二次曲线的一种特殊情况)的方程可以写作这样的形式:
a1x1+a2x21+a3x2+a4x22+a5x1x2+a6=0(2.2.4)

在上面形式的基础上,如果我们构造另外一个五维的空间,其中五个坐标的值分别为 Z1=x1,Z2=x21,Z3=x2,Z4=x22,Z5=x1x2 ,那么显然式(2.2.4)中的方程在新的坐标系下可以写成:
i=15aiZi+a6=0(2.2.5)

关于新的坐标Z,这正是一个 超平面的方程!解释一下,就是说如果我们做一个映射 ϕ:R2R5 ,将 x 按照上面的规则映射为 Z ,那么在新的五维空间中,原来的数据将会变成线性可分的,从而使用之前我们推导的线性分类算法就可以进行处理了。这正是Kernel方法处理非线性问题的基本思想。

在进一步描述Kernel的细节之前,不妨再来看看这个例子映射过后的直观例子。虽然我们可能无法把 5 维空间画出来,不过由于July大神这里生成数据的时候就是用了特殊的情形,具体来说,我们这里的超平面实际的方程是这个样子(圆心在 X2 轴上的一个正圆),因此我们只需要把它映射到 Z1=x1,Z2=x21,Z3=x2 这样一个三维空间里就可以了。
下图2.3是July大神的好友pluskid提供的gif动图:


学习July博文总结——支持向量机(SVM)的深入理解(上)_第9张图片
图2.3 映射到三维空间的数据动图

上图映射之后的结果,将坐标轴经过适当的旋转,就可以很明显地看出,数据是可以通过一个平面来分开的。

上面的例子可以体现,核函数相当于将原来的分类函数:

f(x)=i=1nαiyixi,x+b

映射成了式(2.2.2)中的:
f(x)=i=1nαiyiϕ(xi),ϕ(x)+b

而其中的 α 值是可以通过求解由(2.1.13)映射变形来的对偶问题得到:
maxαi=1nαi

你可能感兴趣的:(Linux,嵌入式系统,图像处理算法,机器学习算法)