SVM-支持向量机

一、什么是SVM?

SVM的英文全称是Support Vector Machines,我们叫它支持向量机。支持向量机是我们用于分类的一种算法。
SVM-支持向量机
SVM-支持向量机

分类问题:

  1. 数据是线性可分
  2. 数据是线性不可分时,们需要的东西就是核函数(kernel)

二、线性SVM

先看下线性可分的二分类问题:
SVM-支持向量机

黑线实线为分界线,术语称为“决策面”。每个决策面对应一个线性分类器。
两条虚线之间的垂直距离就是这个最优决策面对应的分类间隔。显然每一个可能把数据集正确分开的方向都有一个最优决策面,而不同方向的最优决策面的分类间隔通常是不同的,那个具有“最大间隔”的决策面就是SVM要寻找的最优解。而这个真正的最优解对应的两侧虚线所穿过的样本点,就是SVM中的支持样本点,称为"支持向量"

1、数学建模

求解这个"决策面"的过程,就是最优化。一个最优化问题通常有两个基本的因素:1)目标函数,也就是你希望什么东西的什么指标达到最好;2)优化对象,你期望通过改变哪些因素来使你的目标函数达到最优。在线性SVM算法中,目标函数显然就是那个"分类间隔",而优化对象则是决策面。所以要对SVM问题进行数学建模,首先要对上述两个对象(“分类间隔"和"决策面”)进行数学描述。按照一般的思维习惯,我们先描述决策面。

(1)"决策面"方程

SVM-支持向量机
其中:
SVM-支持向量机

我们已经顺利推导出了"决策面"方程,它就是我们的超平面方程,之后,我们统称其为超平面方程。

(2)"分类间隔"方程

SVM-支持向量机
SVM-支持向量机
我们目的是为了找出一个分类效果好的超平面作为分类器。分类器的好坏的评定依据是分类间隔W=2d的大小,即分类间隔w越大,我们认为这个超平面的分类效果越好。此时,求解超平面的问题就变成了求解分类间隔W最大化的为题。W的最大化也就是d最大化的。

(3)约束条件

看起来,我们已经顺利获得了目标函数的数学形式。但是为了求解w的最大值。我们不得不面对如下问题:

  1. 我们如何判断超平面是否将样本点正确分类?
  2. 我们知道要求距离d的最大值,我们首先需要找到支持向量上的点,怎么在众多的点中选出支持向量上的点呢?

将约束条件变成一个约束方程:
SVM-支持向量机

注:总能找到一对w,r 两个参数,满足SVM-支持向量机

(4)线性SVM优化问题基本描述

将目标函数简化:
SVM-支持向量机

因为,我们只关心支持向量上的点,随后我们求解的d的最大化问题变成了||w||的最小化问题。进而||w||的最小化问题等效于
SVM-支持向量机

我们将最终的目标函数和约束条件放在一起进行描述:
SVM-支持向量机

(5)求解准备

凸优化:凸集求最小值(极小值)最优解问题,通常求解的最优解有如下几类:

  1. 约束优化问题,可以写为:(此类问题求解:费马大定理(Fermat)即求导或梯度下降法)
    SVM-支持向量机

  2. 有等式约束的优化问题,可以写为:(拉格朗日乘子法(Lagrange Multiplier) )
    SVM-支持向量机

  3. 有不等式约束的优化问题,可以写为:(常常使用的方法就是KKT条件)
    SVM-支持向量机
    注:我们把所有的等式、不等式约束与f(x)写为一个式子,也叫拉格朗日函数,系数也称拉格朗日乘子,通过一些条件,可以求出最优值的必要条件,这个条件称为KKT条件。

(6)拉格朗日函数

我们知道我们要求解的是最小化问题,所以一个直观的想法是如果我能够构造一个函数,使得该函数在可行解区域内与原目标函数完全一致,而在可行解区域外的数值非常大,甚至是无穷大,那么这个没有约束条件的新目标函数的优化问题就与原来有约束条件的原始目标函数的优化问题是等价的问题。这就是使用拉格朗日方程的目的,它将约束条件放到目标函数中,从而将有约束优化问题转换为无约束优化问题。

我们在拉格朗日优化我们的问题这个道路上,需要进行下面二个步骤:
第一步:将有约束的原始目标函数转换为无约束的新构造的拉格朗日目标函数SVM-支持向量机
其中αi是拉格朗日乘子,αi大于等于0
求新目标函数的最小值
SVM-支持向量机
注:约束条件的作用为限制自变量的取值范围,不能改变目标函数的取值。因此 a*g(x) = 0,也就是取最大值
第二步:将不易求解的优化问题转化为易求解的优化(拉格朗日对偶
SVM-支持向量机

交换以后的新问题是原始问题的对偶问题,这个新问题的最优值用d来表示。而且d<=p*。我们关心的是d=p的时候,这才是我们要的解。需要什么条件才能让d=p呢?

  1. 首先必须满足这个优化问题是凸优化问题
  2. 其次,需要满足KKT条件

凸优化问题的定义是:求取最小值的目标函数为凸函数的一类优化问题。目标函数是凸函数我们已经知道,这个优化问题又是求最小值。所以我们的最优化问题就是凸优化问题。

(7)KKT条件
一个最优化模型能够表示成下列标准形式:
SVM-支持向量机
KT条件是说最优值条件必须满足以下条件:

  1. 条件一:经过拉格朗日函数处理之后的新目标函数L(w,b,α)对x求导为零:
  2. 条件二:h(x) = 0;
  3. 条件三:α*g(x) = 0;

(8)对偶问题求解

首先固定α,要让L(w,b,α)关于w和b最小化,我们分别对w和b偏导数,令其等于0,即:
SVM-支持向量机

求解外侧的最大值,从上面的式子得到
SVM-支持向量机

对于上述问题,我们就可以使用SMO算法进行求解了,但是,SMO算法又是什么呢?

2、SMO算法

1996年,John Platt发布了一个称为SMO的强大算法,用于训练SVM。SMO表示序列最小化(Sequential Minimal Optimizaion)。Platt的SMO算法是将大优化问题分解为多个小优化问题来求解的。这些小优化问题往往很容易求解,并且对它们进行顺序求解的结果与将它们作为整体来求解的结果完全一致的。在结果完全相同的同时,SMO算法的求解时间短很多。
SMO算法的目标是求出一系列alpha和b,一旦求出了这些alpha,就很容易计算出权重向量w并得到分隔超平面。

SMO算法的解法

先来定义特征到结果的输出函数为:
SVM-支持向量机
实际上,对于上述目标函数,是存在一个假设的,即数据100%线性可分。但是,目前为止,我们知道几乎所有数据都不那么"干净"。这时我们就可以通过引入所谓的松弛变量ξ(slack variable)和惩罚参数C,来允许有些数据点可以处于超平面的错误的一侧。此时我们的约束条件有所改变:
原始问题的拉格朗日函数变为:

SVM-支持向量机

约束条件变为:(由L对w、ξ、b、c、ui求导得到)

SVM-支持向量机
对偶问题拉格朗日函数的极大极小问题,得到以下等价优化问题:
SVM-支持向量机

KKT条件:SVM-支持向量机
KKT条件推导:SVM-支持向量机
其中yiui就是每个样本点的函数间隔

接下来,综合下面两个条件
SVM-支持向量机

1.当y1不等于y2时,即一个为正1,一个为负1的时候,此时,取值范围如下图所示:

SVM-支持向量机

所以有:SVM-支持向量机

注:根据 ksi的取值情况画图的,当ksi>0是,L=0,H=C-ksi;当ksi<0,L=-ksi,H =C,因此,无论哪种情况得到的结果同时上式取值选择。

2.同理,当y1等于y2时,即两个都为正1或者都为负1,可以得到
SVM-支持向量机

整理,根据y1和y2异号或同号,可以得出α2 new的上下界分别为:

SVM-支持向量机

下面为SMO算法编程时的步骤:

步骤1:计算误差:
SVM-支持向量机

步骤2:计算上下界L和H:
SVM-支持向量机

步骤3:计算η:
SVM-支持向量机
步骤4:更新αj:
SVM-支持向量机

步骤5:根据取值范围修剪αj:
SVM-支持向量机

步骤6:更新αi:
SVM-支持向量机

步骤7:更新b1和b2:
SVM-支持向量机

步骤8:根据b1和b2更新b:
SVM-支持向量机