Python机器学习笔记:SVM(1)——SVM概述

前言

  整理SVM(support vector machine)的笔记是一个很是麻烦的事情,一方面这个东西原本就很差理解,要深刻学习须要花费大量的时间和精力,另外一方面我自己也是个初学者,整理起来不免思路混乱。因此我对SVM的整理会分为四篇(暂定为四篇)学习,不足之处,请多多指导。html

  四篇分别为:算法

Python机器学习笔记:SVM(1)——SVM概述

Python机器学习笔记:SVM(2)——SVM核函数

Python机器学习笔记:SVM(3)——证实SVM

Python机器学习笔记:SVM(4)——sklearn实现

  在整理笔记的时候,参考了很多的资料,很多网络写的优秀论文,博客,回答等。因而我在学习了SVM以后,加入了本身的理解,结合网友的笔记整理了本身能理解的SVM,于此写下本身的学习笔记。本着取之于网络,还之于网络的想法,最后将博客公开,最后申明一下,参考的博客,知乎等地址,我均会附于文章后面,不喜勿喷,谢谢。网络

  下面言归正传,开始学习SVM。机器学习

1,SVM的基本思想

  支持向量机,由于英文名为 support vector machine,故通常简称为SVM。他是一种经常使用的判别方法,在机器学习领域是一个有监督的学习模式,一般用来进行模型识别,分类,回归分析以及异常值检测。ide

  通俗的讲:支持向量机是一种两类分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器,其学习策略(分割原则)即是间隔最大化,最终可转换为一个凸二次规划问题的求解函数

  支持向量机是许多大佬在多年研究统计学习理论基础上对线性分类器提出的另外一种设计最佳准则。其原理也从线性可分提及,而后扩展到线性不可分的状况。甚至扩展到使用非线性函数中去。post

  支持向量机的提出有很深的理论背景,这个咱们后面再学习,下面先说一下SVM的基本思想,SVM的主要思想能够归纳为两点:性能

  1 它是针对线性可分状况进行分析,对于线性不可分状况,经过使用非线性映射算法将低维输入空间线性不可分的样本转化为高维特征空间使其可分,从而使得高维特征空间采用线性算法对样本的非线性特征进行线性分析成为可能。学习

  2 它是基于结果风险最小化理论之上在特征空间中构建最优超平面,使得学习器获得全局最优化,而且在整个样本空间的指望以某个几率知足必定上界。优化

  支持向量机的线性分类:是给定一组训练实例,每一个训练实例被标记为属于两个类别中的一个或另外一个,SVM训练算法建立一个将新的实例分配给两个类别之一的模型,使其成为非几率二元线性分类器。SVM模型是将实例表示为空间中的点,这样映射就使得单独类别的实例被尽量宽的明显的间隔分开。而后,将新的实例映射到同一空间,并基于他们落在间隔的哪一侧来预测所属类别。

  支持向量机的非线性分类:除了进行线性分类以外,SVM还可使用所谓的核技巧有效的进行非线性分类,将其输入隐式映射到高维特征空间中。当数据未被标记时,不能进行监督式学习,须要用非监督式学习,它会尝试找出数据到簇的天然聚类,并将新数据映射到这些已造成的簇。将支持向量机改进的聚类算法被称为支持向量聚类,当数据未被标记或者仅一些数据被标记时,支持向量聚类常常在工业应用中用做分类步骤的预处理。

   SVM(Support Vector Machines)——支持向量机是在全部知名的数据挖掘算法中最健壮,最准确的方法之一,它属于二分类算法,能够支持线性和非线性的分类。发展到今天,SVM已经能够支持多分类了。

  首先,咱们看一个例子:

   好比上图中,咱们用一条直线将两类数据分开了,可是我画了三条线,并且这三条都能分开,可是这三条线那条更好呢?用SVM的思想来讲,就是什么样的决策边界才是最好的呢?更进一步,当数据特征更加复杂,自己若是很难分,怎么办呢?那特征复杂后,计算复杂度如何呢那SVM能实际应用吗

  让咱们带着这些问题来学习SVM,而理解SVM,咱们先得明白一个概念:线性分类器。

2,分类标准的起源:Logistic回归

  以前整理的Logistic回归博文地址:

Python机器学习笔记:Logistic Regression

  咱们从最起源提及,虽说以前博文已经学习过Logistic 回归了,不懂的能够去看看,有详细的笔记。可是这里我仍是简单的再学习一边别人理解的Logistic回归笔记,温故而知新。

  给定一些数据点,他们分别属于两个不一样的类,如今要找到一个线性分类器把这些数据分红两类。若是用 x 表示数据点,用 y表示类别(y能够取1或者-1,表明两个不一样的类),一个线性分类器的学习目标即是要在 n 维的数据空间中找到一个超平面(hyper plane),这个超平面的方程能够表示为(其中WT中的T表示转置):

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

  咱们假设函数以下:

   其中 x 是 n 维特征向量,函数 g 就是Logistic函数,咱们令 z = ΘTx ,则 g(z)为:

   其图像为:

   能够看到,将无穷映射到了(0,  1),而咱们假设的 hΘx 就是特征属于 y=1的几率:

   从而,当咱们要判别一个新来的特征属于那个类的时候,只须要求出 hΘx 便可,若 hΘx 大于 0.5就是 y=1的类,反之属于 y=0 的类。

   此外,hΘx 只和 θTx有关, θTx >0 ,那么 hΘx >0.5,而 g(z) 只是用来映射,真实的类别决定权仍是在于  θTx 。再者,当  θTx >> 0 时,hΘx = 1,反之 hΘx = 0。若是咱们只从  θTx 出发,但愿模型达到的目标就是让训练数据中 y=1 的特征  θTx >> 0,而 y=0 的特征  θTx << 0。Logistic回归就是要学习获得  θ,使得正例的特征远大于0,负例的特征远小于0,并且要在所有训练实例上达到这个目标。

  接下来,尝试把 Logistic 回归作个变形。首先,将使用的结果标签 y=0 和 y=1 替换为 y = -1, y=1,而后将下面公式的 θ0 替换为 b。

   最后将后面的 一串替换为 WTx,即下面一串被替换:

   如此,则有了:

   也就是说除了将 y由 y=0 变为 y=-1外,线性分类函数跟 logistic回归的形式化g表示函数没有区别,下面是Logistic回归的形式化表示函数:

  对于逻辑回归咱们先说到这里,下面看线性分类和逻辑回归的比较。

  SVM和Logistic虽说都是寻找一个线性分类界限,但出发点不一样。SVM是以训练集两个类的边界(支持向量)来考虑划分,而Logistic是从训练集的全局来考虑划分。这也就是为何Logistic受噪声和离群点的影响比较大。当出现一个离群点时,Logistic划定的边界颇有可能会改变。而SVM这边划分的边界却可能丝绝不动(由于离群点并不影响我支持向量)。

3,线性分类的一个例子

3.1 线性可分的二分类模型

  什么是线性可分呢?若是一个线性函数可以将样本分开,称这些数据样本是线性可分的。那么什么是线性函数呢?在二维空间中就是一条直线,在三维空间中就是一个平面,依次类推,若是不考虑空位维度,这样的线性函数就统称为超平面。咱们通常所说的线性可分支持向量机就对应着能将数据正确划分而且间隔最大的直线。

  定理1:线性二分类模型的目标就是找到一组合适的参数(w,  b),使得:

   即:线性二分类模型但愿在特征空间找到一个划分超平面,将属于不一样标记的样本分开

  咱们下面举个简单的例子。以下图所示,如今有一个二维平面,平面上有两种不一样的数据,分别用圈和叉表示。因为这些数据是线性可分的,因此能够用一条直线将这两类数据分开,这条直线就至关于一个超平面,超平面一边的数据点所对应的 y 全是 -1 ,另外一边所对应的 y 全是1。

   上面的超平面能够用分类函数 f(x) 表示,f(x)以下:

   当 f(x)=0 的时候,x即是位于超平面上的点,而 f(x) > 0的点对应 y=1 的数据点,f(x) < 0 的点对应 y = -1的点,以下图所示:

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

  因此接下来的问题是,如何肯定这个超平面呢?从直观上而言,这个超平面应该是最适合分类两类数据的直线。而断定“最适合”的标准就是这条直线离直线两边的数据的间隔最大。因此,得寻找有着c最大间隔的超平面。这个问题,咱们先搁置一下,下面说一下线性可分支持向量机。

3.2 线性可分支持向量机  

  线性可分支持向量机(SVM)也是一种线性二分类模型,也须要找到知足 定理1 约束的划分超平面,即(w,  b),因为能将样本分开的超平面可能有不少,SVM进一步但愿找到离个样本都比较远的划分超平面。

  当面对样本的随机扰动时,离每一个样本都比较远的划分超平面对扰动的容忍能力比较强,即不容易由于样本的随机扰动使得样本穿越到划分超平面的另一侧而产生分类错误。所以这样的划分超平面对样本比较稳健,不容易过拟合。另外一方面,离各样本都比较远的划分超平面不只能够把正负样本都分开,还能够比较大的确信度将全部样本分开,包括难分的样本,即离划分超平面近的样本。

  分类学习最基本的思想就是基于训练集 D 在样本空间中找到一个划分超平面,将不一样类别的样本分开,可是能将训练样本分开的划分超平面可能有不少,全部咱们应该去找位于两类训练样本“正中间”的划分超平面。由于该划分超平面对训练样本局部扰动的“容忍”性最好,例如,因为训练集的局限性或者噪声的因素,训练集外的样本可能比正中间的训练样本更接近于两个类的分割界,这将使得许多划分超平面出现错误。而正中间的超平面影响最小,因此这个划分超平面所产生的结果是鲁棒的。

  因此问题就变为哪个分类超平面是最优的?而要算最优超平面,确定先算出间隔,只有间隔最大化,才能找出最优超平面,因此下面学习函数间隔。

4,函数间隔 functional margin 与几何间隔 geometrical  margin

  间隔(margin):每一个训练观测点到超平面距离中的最小值。

  上面也提到了,咱们的划分超平面能够用以下线性方程来描述:

  其中W为法向量,决定了超平面的方向,b为位移量,决定了超平面与原点的距离。

  假设超平面能将训练样本正确的分类,即对训练样本(xi,  yi),知足如下公式:

   该公式称为最大间隔假设,yi = +1 表示样本为正样本,yi = -1 表示样本为负样本,式子前面选择 >= +1, <= -1只是为了方便计算,原则上但是任意常数,但不管是多少,均可以经过对 w 的变换使其为 +1 和 -1,实际上公式等价于:

  在超平面 w*x+b=0 肯定的状况下, | w*x+b | 可以表示点 x 到距离超平面的远近,而经过观察 w*x+b 的符号与类标记 y 的符号是否一致能够判断分类是否正确,因此,能够用 (y * (w*x+b))的正负性来断定或表示分类的正确性。于此,咱们便引出了函数间隔(functional margin)的概念。

  通常的,当样本点被分类正确时,定义函数间隔(用 γ hat 表示)为:

   而超平面(w,  b)关于 训练数据集T 中全部样本点(xi , yi)的函数间隔最小值(其中, x是特征, y是结果标签,i表示第 i 个样本),便为超平面(w,  b)关于训练数据集T的函数间隔(即训练观测与超平面的间隔):

   但这样定义的函数间隔有问题,即若是成比例的改变 w 和 b (假设将他们改成 2w 和 2b),则函数间隔的值 f(x) 却变成了原来的 2 倍(虽然此时超平面没有改变),因此引出真正定义点到超平面的距离——几何间距(geometrical  margin)的概念。

  假定对于一个点 x,令其垂直投影到超平面上的对应点为 x0, w是垂直于超平面的一个向量,γ 为样本 x 到超平面的距离,以下图所示:

   根据平面几何知识,有:

   其中 ||w|| 为 w 的二阶范数(范数是一个相似于模的表示长度的概念),w / ||w|| 是单位向量(一个向量除以它的模称之为单位向量)。

  又因为 x0 是超平面的点,知足 f(x0) = 0,代入超平面的方差 wTx+b=0 ,可得 wTx0+b=0,即 wTx0 = -b。

  随即让上式(平面几何所得公式)的两边同时乘以 WT,而后根据 wTx0 = -b 和 wTw = ||w||2,便可算出 γ :

   为了获得 γ 的绝对值,令 γ 乘上对应的类别 y,便可得出几何间隔 (用 γ hat 表示)的定义:

   从上述函数间隔和几何间隔的定义能够看出:几何间隔就是函数间隔除以 ||w||,并且函数间隔  y * (w*x+b) = y * f(x) 实际上就是 | f(x) |,只是人为定义的一个间隔度量,并且几何间隔 | f(x) | / || w || 才是直观上的点到超平面的距离。

4.1 点到超平面的距离

  这里补充一下点到超平面的距离的概念。设二维空间存在一个超平面实现二类可分以下图所示:

  图中的斜线表示超平面 g(x) = w*x + b = 0,二维平面上一点 X 在超平面的距离投影为 X',则两者关系可表示为 X = X' + λ w(w 表示超平面的梯度向量),将 X 代入到 g(x)得:

  点到超平面的距离便是 X 与 X' 之间的距离:

  该公司为高等数学中点到平面的距离公式,只不过这里点和平面表达式的系数都用向量表示了。而咱们上面倒是使用函数间隔和几何间隔的角度引入距离的。因此注意区分。

  咱们使用PPT的内容表达以下:

5,最大间隔分类器 Maximum Margin Classifier 的定义

  最大间隔超平面:间隔最大的超平面,即便得训练观测到分割超平面的间隔达到最大。

  支持向量:样本点中与分离超平面距离最近的样本点的实例

  最大间隔超平面的选取只与支持向量有关

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

   经过由前面的分析可知:函数间隔不适合用来最大化间隔值,由于在超平面固定之后,能够等比例地缩放 w 的长度和 b 的值,这样可使得 f(x) = wTx + b 的值任意大,亦即函数间隔 γ hat 能够在超平面保持不变的状况下被取得任意大。但几何间隔由于除上了 ||w||,使得在缩放 w 和 b 的时候几何间隔 γ hat 的值是不会改变的,它只随着超平面的变更而变更。所以,这是更加合适的一个间隔。换言之,这里要找的最大间隔分类超平面中的“间隔”指的是几何间隔。

  因而最大间隔分类器(maximum  margin  classifier)的目标函数能够定义为: max  γ hat

  同时须要知足一些条件,根据间隔的定义,有(下面两个式子是等价的):

   其中,s.t 即subject to,它导出的是约束条件。

  即咱们但愿最大化超平面关于训练集的间隔 γ ,约束条件表示的是超平面关于每一个训练样本点的间隔至少是 γ

  回归一下几何间隔的定义:

   可知:若是令函数间隔 γ hat 等于1(之因此令 γ hat =1,是为了方便推导和优化,且这样作对目标函数的优化没有影响)则有 γ hat = 1 / || w || 且:

   从而上述目标函数转换成了(即线性可分支持向量机模型的最优化问题):

   至关于在相应的约束条件下(约束条件为上上式子),最大化这个 1 / ||w|| 值,而 1 / ||w|| 即是几何间隔 γ hat 。

  以下图所示,中间的实线即是寻找到的最优超平面(optimal Hyper Plane),其到两条虚线边界的距离相等,这个距离即是几何间隔 γ hat ,两条虚线间隔边界之间的距离等于  2*γ hat ,而虚线间隔边界上的点则是支持向量。因为这些支持向量恰好在虚线间隔边界上,因此他们知足 y( wTx + b) = 1(还记得咱们把functional margin 定位1了吗?上面咱们方便推导和优化的目的,咱们能够令 γ hat = 1),而对于全部不是支持向量的点,则显然有 y( wTx + b) > 1。

   因此线性可分支持向量机模型的最优化问题:

   这是一个凸二次规划问题,若能求出(1)~(2)的解 w*, b*,那么就能够获得最大间隔超平面 w*Tx + b = 0 t及分类决函数 f(x)

   其实到目前为止,对于只关心如何使用SVM的盆友便足够了。能够不用深究其更深的原理了。而须要深究的话,那就接着来。

6,从线性可分到线性不可分

  支持向量机是一种二分类模型,他的目的是寻找一个超平面对样本进行分割,分割的原则是间隔最大化,最终转换为一个凸二次规划问题来求解,而由简至繁的模型包括:

  • 当训练样本线性可分时,经过硬间隔最大化,学习一个线性可分支持向量机
  • 当训练样本近似线性可分时,经过软间隔最大化,学习一个线性支持向量机
  • 当训练样本线性不可分时,经过核技巧和软间隔最大化,学习一个非线性支持向量机

  说这个的目的是什么呢?就是咱们上面一堆例子,经过线性可分的例子说明了支持向量机,要深刻学习支持向量机,咱们第一步确定是从训练样本线性可分过渡到线性不可分。

  那咱们接着从以前的目标函数说:

   因为求 1 / ||w|| 的最大值至关于求 1 /2  ||w||2 的最小值,因此上述目标函数等价于(w 由分母变为分子,从而也由原来的 max 问题变为 min 问题,很明显,二者问题等价):

  由于如今的目标函数是二次的,约束条件是线性的,因此它是一个凸二次规划问题(这些咱们上面均提到了)。那么这个问题如何求解呢?

  能够用线程的QP(Quadratic Programming)优化包进行求解。简单来讲:就是在必定的约束条件下,目标最优,损失最小。

  此外,因为这个问题的特殊结构,还能够经过拉格朗日对偶性(Lagrange  Duality)变换到对偶变量(dual variable)的优化问题,即经过求解与原问题等价的对偶问题(dual problem)获得原始问题的最优解,这就是线性可分条件下支持向量机的对偶算法,这样作的优势在于:一者对偶问题每每更容易求解;两者能够天然的引入核函数,进而推广到非线性分类问题。

6.1整理一下咱们的思绪

  这里使用老师的PPT,整理一下咱们对SVM的理解。

6.2  从原始问题到对偶问题的求解

  那么什么是拉格朗日对偶性呢?简单来讲,经过对每个约束条件加上一个拉格朗日乘子(Lagrange multiplier)α,而后定义出拉格朗日函数(经过拉格朗日函数将约束条件融合到目标函数里去,从而只用一个函数表达式便能清楚的表达出咱们的问题)

  而后令:

   而当全部约束条件都知足时,则最优值为:

   上式最优值即最初要最小化的量,因此在要求约束条件获得知足的状况下最小化  1 /2  ||w||2 ,实际上等价于直接最小化 Θ(w) (固然,这里也有约束条件(即KKT条件的约束),就是 αi >= 0, i=1,....n),容易验证,当某个约束条件不知足时,例如 yi * (w*xi + b) < 1,那么显然有 Θ(w) = ∞(只要令 αi = ∞ 便可)

  具体写出来,目标函数变成了:

   这里用 P* 表示这个问题的最优解,且和最初的问题是等价的。若是直接求解,那么一上来便得面对 w  和 b 这两个参数,而 αi 又是不等式约束,这个求解过程很差作。不妨把最小和最大的位置交换一下,变成:

  交换之后的新问题是原始问题的对偶问题,这个新问题的最优值用 d* 来表示。并且有 d* <= p*,在知足某些条件的状况下,这两者等价,这时候就能够经过求解对偶问题来间接地求解原始问题。

  换言之,之因此从 min  max 的原始问题 p*,转换为 max min 的对偶问题 d*,一者是由于 d* 是 p* 的近似解,两者转换为对偶问题后,更容易求解。

  因此下面能够先求 L 对w, b的极小,再求 L 对 α  的极大。

   上面提到了 d* <= p* 在知足某些条件的状况下,两者等价,而要让二者等价需知足 strong  duality(强对偶),然后有学者在强对偶下提出了KKT条件,且KKT条件的成立要知足 constraint qualifications,而 constraint qualifications 之一就是  Slater条件。所谓的Slater条件,即指:凸优化问题,若是存在一个点 x,使得全部等式约束都成立,而且全部不等式约束都严格成立(即取严格不等号,而非等号),则知足Slater条件。对于此处,Slater条件成立,因此 d* <= p* 能够取等号。

  通常的,一个最优化数学模型可以表示成下列标准形式:

  其中f(x)是须要最小化的函数,h(x)是等式约束,g(x)是不等式约束,p和q分别为等式约束和不等式约束的数量。

  同时,得明白如下两点:

   而KKT的条件就是指上面最优化数学模型的标准形式中的最小点 x* 必须知足下面的条件:

   通过论证,咱们这里的问题是知足KKT条件的(首先已经知足Slater条件,再者 f 和 gi 也都是可微的,即 L 对 w 和 b 均可导),所以如今咱们便转换为求解第二个问题。

  也就是说原始问题经过知足KKT条件,已经转换成了对偶问题。而求解这个对偶学习问题,分为三个步骤:

  • 1,要让 L(w, b, a) 关于 w 和 b 最小化,
  • 2,求 对 α 的极大
  • 3,利用SMO算法求解对偶问题中的拉格朗日乘子

6.3 对偶问题求解的三个步骤

  根据拉格朗日的对偶性,原始问题的对偶问题是极大极小问题,因此咱们求解对偶问题的步骤以下:

  (1)首先固定 α,要让 L 关于 w 和 b 最小化,咱们分别对 w, b 求偏导数,即令  ∂L / ∂w 和 ∂L / ∂b 等于零:

  将求偏导数的结果,代入下式:

  获得:

   推导过程以下:

   最后,获得:

   上面推导过程当中,“倒数第4步” 推导到  “倒数第3步” 使用了线性代数的转置运算,因为 ai 和 yi 都是实数,所以转置后与自身同样。“倒数第3步” 推导到“倒数第2步” 使用了(a + b + c + ...)(a + b + c + ...) = aa + ab + ac +ba +bb + bc + ... 的乘法法则。最后一步是上一步的顺序调整。

  从上面的最后一个式子,咱们能够看出,此时的拉格朗日函数只包含一个变量,那就是 αi 便能求出 w 和 b,因而可知,上面提出来的核心问题:分类函数  f(x) = wTx + b 也能够垂手可得的求出来。

  (2)对 α 的极大,便是关于对偶问题的最优化问题。通过上面第一个步骤的求 w 和 b,获得的拉格朗日函数式子已经没有变量 w,  b ,只有 α 。从上面的式子获得:

   这样,求出了 αi ,根据上面对 w 求偏导的式子,咱们能够求出 w。而后经过下面式子,能够求出b,最终获得分离超平面和分类决策函数:

   (3)在求得 L(w,  b,  a) 关于 w 和 b 最小化,以及对  α 的极大值后,最后一步则能够利用 SMO 算法求解对偶问题中的拉格朗日乘子  α。

  咱们须要构造并求解对偶约束最优化问题

   上述式子要解决的是在参数 {α1, α2, α3,.....αn} 上求最大值 W的问题,至于 x(i) 和 y(i) 都是已知数。要了解这个SMO算法如何推导,后面继续学。

6.4 拉格朗日乘子法求解SVM

  这里继续使用老师的PPT对SVM的推导作一个梳理,其实就是整理上面6.2  6.3 小节的内容。

7,从线性不可分到非线性问题

  为了过渡到非线性分类状况,咱们先看看上述推导过程当中获得的一些有趣的形式。

  首先就是关于咱们的 hyper plane,对于一个数据点 x 进行分类,其实是经过把 x 代入到   f(x) = wTx + b 算出结果真后根据其正负号来进行类别划分的。而前面的推导,咱们得出:

  所以分类函数为:

   这里的形式的有趣之处在于,对于新点 x 的预测,只须要计算它与训练数据点的内积便可( < ·,  ·>表示向量内积),这一点直观重要,是以后使用Kernel进行非线性推广的基本前提。此外,所谓 Supporting  Vector 也在这里显示出来——事实上,所谓非 Supporting Vector所对应的系数 α 都是等于零的,所以对于新点的内积计算实际上只须要针对少许的“支持向量” 而不是全部的训练数据便可。

  为何非支持向量对应的  α 等于零呢?直观上来看理解的话,就是这些“后方”的点——正如咱们以前分析过同样,对超平面是没有影响的,因为分类彻底由超平面决定,因此这些无关的点并不会参与分类问题的计算,于是也就不会产生任何影响了。

  首先,咱们看看经过Lagrange multiplier 获得的目标函数:

   注意到若是 xi 是支持向量的话,上式中红颜色的部分是等于0 的(由于支持向量的 functional margin 等于1),而对非支持向量来讲,functional margin 会大于 1,所以红颜色部分是大于零的,而 αi 又是非负的,为了知足最大化,  αi 必须等于0。这也就是这些非 supporting vector 的局限性。

   至此,咱们便获得了一个 maximum  margin hyper plane classifier,这就是所谓的支持向量机(Support Vector Machine)。固然,,到目前为止,咱们的SVM还比较弱,只能处理线性的状况,不过,在获得了对偶 dual 形式以后,经过 Kernel推广到非线性的状况就变成了一件很是容易的事情了(咱们以前说过:经过求解对偶问题获得最优解,这就是线性可分条件下支持向量机的对偶算法,这样作的优势在于:一者对偶问题每每更容易求解;两者能够天然的引入核函数,进而推广到非线性分类问题)。

8,从线性不可分到特征空间映射与核函数问题——线性不可分支持向量机

8.1 线性不可分

  线性不可分定义以下图:

   对于上图的二分类数据点,普通线性分类器不行,最大间隔超平面和软间隔超平面也无能为力。面对这样的线性不可分问题,一般的思路是找一个非线性分类边界(好比组合分类器)来实现分类,而SVM则另辟蹊径,将数据点从原始空间映射到特征空间,而数据在特征空间每每就能实现线性可分。

8.2 特征空间映射

  对于非线性问题,线性可分支持向量机并不能有效解决,要使用非线性模型才能很好的分类。

  • 一维空间向二维空间映射

  下面咱们考虑一维空间的二分类问题:

   咱们将它进行一个二次变换,换到二维空间,这里的变换为 x -> x2

   从上面的例子,咱们知道变换的核心思想就是:将原始输入空间的数据集映射到高维特征空间中,从而使得数据集可分

  • 二维空间向二维特征空间映射

  上图中二维空间不可分,可是变换一下坐标空间,也能实现线性可分。

  • 二维空间向三维空间的映射

 

  二维空间的数据点不只能够映射到二维空间,一样也能够映射到三维,如上所示,因此一样能够找到一个超平面可以实如今三维空间的线性可分。

   首先将原始的输入特征经过函数 h(xi) 映射到高维空间,拉格朗日对偶有以下形式:

   决策函数为:

8.3  核函数

  原始空间向特征空间的映射须要借助映射函数 Ψ(x)。例如对于数据点 xi,映射到特征空间就变成了Ψ(xi)。而SVM的一大巧妙之处就是映射后的特征空间数据点内积的计算等价于低维空间数据点在映射函数对应的核函数中计算。这大大下降了运算量,由于有的时候高维空间的计算很复杂,下图是一个将 m 维度向量的映射到特征空间的映射函数的例子:

  映射后的维度大概是 m^2 / 2 维,则计算映射后的数据内积 Ψ(xi)T*Ψ(xj) 的时间复杂度为 O(n^2)。而若是使用核函数,则计算复杂度会下降为 O(n),例如:

   其中 a,b为 m维的向量,Ψ(a) 为 a 通过上面的映射函数后的 m^2 / 2维向量,能够看出核函数 K(a, b) = (aT*b + 1)2 计算的时间复杂度为 O(n)。

   核函数是指:设从输入空间 Χ 到特征空间 H的一个映射 h,对任意 x, z 属于 X,函数 K(x,  z) 知足 K(x,  z) = (h(x),  h(z)),则称 K 为核函数。

  具体的核函数,咱们下一节完整介绍,这里再也不赘述。

  核技巧:在学习与预测中只定义核函数,而不显示的定义映射函数 h。

   一般,直接计算 K(x, z)比较容易,而经过 h(x) 和 h(z) 计算 K(x, z)并不容易。

  而成为核函数的充要条件:设 K 是对称函数,则 K(x, z)为核函数的充要条件是对输入空间中任意xi,i=1,2,....m,Gram矩阵K = [K(xi, xj)] m * m 是半正定矩阵。

  对偶问题的目标函数:

   决策函数的形式:

   对SVM从简到难的介绍就到这里,而后下一篇文章主要学习核函数的问题,下下一篇对使用Sklearn实现SVM进行了解,最后咱们证实一下SVM。这个系列就算结束。可能这一个多月的整理,我不是百分百理解它,可是我相信这是我理解它的开始。

9,从线性不可分到软间隔问题——使用松弛变量处理 outliers(软间隔支持向量机)

  软间隔(soft-margin):有时候数据中有一些噪音点,若是咱们考虑他们,那么咱们的分割超平面就不太好了。

  在以前讨论支持向量机的时候,咱们就假定,数据是线性可分的,即咱们能够找到一个可行的超平面将数据彻底分开。后来为了处理非线性数据,在下文使用 Kernel 方法对原来的线性 SVM 进行了推广,使得非线性的状况也能处理。虽然经过映射 Φ(•) 将原始数据映射到高维空间以后,可以线性分隔的几率大大增长,可是对于某些状况仍是很难处理。

  例如可能并非由于数据自己是非线性结构的,而只是由于数据有噪音。对于这种偏离正常位置很远的数据点,咱们称之为 outlier,在咱们原来的SVM模型里,outlier的存在有可能形成很大的影响,由于超平面自己就是只有少数几个 support vector 组成的,若是这些 support vector里又存在 outliers 的话,其影响就很大了。例以下图:

  用黑圈圈起来的那个蓝点是一个 outlier,它偏离了本身本来应该在的那个半空间,若是直接忽略掉它的话,原来的分割超平面仍是挺好的,可是因为这个 outlier 的出现,致使分割超平面不得不被挤歪了,变成途中黑色虚线所示(这只是一个示意图,并无严格计算精确坐标),同时 margin 也相应变小了。固然,更严重的状况是,若是这个 outlier 再往右上移动一些距离的话,咱们将没法构造出能将数据分开的超平面来。

  为了处理这种状况,SVM 容许数据点在必定程度上偏离一下超平面。例如上图中,黑色实线所对应的距离,就是该 outlier 偏离的距离,若是把它移动回来,就恰好落在原来的超平面蓝色间隔边界上,而不会使得超平面发生变形了。

  也就是说,在有松弛的状况下 outline 点也属于支持向量SV,同时,对于不一样的支持向量,拉格朗日参数的值也不一样,如此篇论文 《Large  Scale Machine Learning》中的下图所示:

  对于远离分类平面的点值为0;对于边缘上的点值在 [0, 1/L],其中,L为训练数据集个数,即数据集大小;对于 outline  数据和内部的数据值为 1/L。

  OK,继续回到问题,咱们原来的约束条件为:

   如今考虑到 outlier 问题,约束条件变成了:

   其中,ξi >= 0 称为松弛变量(slack  variable),对应数据点 xi 容许偏离的 functional  margin 的量。固然,若是咱们运行 ξi 任意大的话,那任意的超平面都是符合条件的了。因此,咱们在原来的目标函数后面加上一项,使得这些 ξi 的总和也要最小,即软间隔支持向量机的学习问题以下(原始问题):

   其中 C是惩罚系数,用于控制目标函数中两项(“寻找 margin 最大的超平面” 和 “保证数据点误差量最小”)之间的权重。注意,其中 ξ 是须要优化的变量(之一),而 C 是一个事先肯定好的常量C值大时对误分类的惩罚增长(C趋于很大时,意味着分类严格不能有错误),C值小时对误分类的惩罚减少(C趋于很小时,意味着能够有更大的错误容忍)。完整的写出来是这个样子:

  因此上式包含两层含义,使  ||w||2/2 尽可能小即间隔尽可能大,同时使误分类点的个数尽可能小,C是调和二者的系数,有了上式,就能够和线性可分支持向量机同样考虑线性可分支持向量机同样考虑线性支持向量机的学习过程,此时,线性不可分支持向量机的学习问题能够变为以前的凸二次规划问题的求解。

   用以前的方法将限制或约束条件加入到目标函数中,获得新的拉格朗日函数,以下所示:

  约束以下:

   分析方法和前面同样,转换为另外一个问题以后,解法相似,咱们先让 L 针对 w,  b 和 ξ 最小化:

   将 w 带回 L 并化简,获得和原来同样的目标函数:

   不过因为咱们获得 C - αi - ri = 0 而 又有 ri >= 0 (做为 Lagrange multiplier 的条件),所以有 αi <= C,因此整个 dual 问题如今写做:

   把先后的结果对比一下:

   能够看到惟一的区别就是如今 dual  varibale α 多了一个上限 C。而 Kernel 化的非线性形式也是同样的,只要把 <xi,  xj> 换成 k(xi,  xj)便可。这样一来,一个完整的能够处理线性和非线性并能容忍噪音和 outliers 的支持向量机就介绍完毕了。

  因此能够作一个总结,不许确的说:SVM它本质上是一个分类方法,用 WT+b 定义分类函数,因而求 w,b为寻最大间隔,引出 1 / 2 || w || ^2,继而引入拉格朗日因子,化为对拉格朗日乘子a 的求解(求解过程当中会设计一系列的最优化或凸二次规划等问题),如此,求 w.b 与 求 a 等价,而 a 的求解能够用一种快速学习算法 SMO,至于核函数,是为了处理非线性问题,若直接映射到高维计算恐维度爆炸,故在低维计算,等效高维表现。

10,支持向量机(SVM)的优缺点

  支持向量机(SVM)是一组用于分类,回归和异常值检测的监督学习方法。

10.1  支持向量机(SVM)的优势:

  • 在高维空间有效
  • 在维度数量大于样本数量的状况下仍然有效
  • 在决策功能(称为支持向量)中使用训练点的子集,所以他也是内存有效的
  • 多功能:能够为决策功能指定不一样的内核函数。提供经过内核,也能够指定自定义内核

10.2  支持向量机(SVM)的缺点:

  • 若是特征数量远远大于样本数量,则该方法可能会致使交叉的性能
  • 支持向量机不直接提供几率估计,这些是使用昂贵的五折交叉验证计算的

 

知识储备1:什么叫凸优化?

  咱们能够看到,上面线性可分支持向量机模型的最优化问题以下:

   上面的基本型目标函数是二次的,约束条件是线性的,这是一个凸二次规划问题。能够直接用现成的优化计算包求解。但若利用“对偶问题”来求解,会更高效。

  • 啥是凸?什么是凸优化?

  凸优化说的是这样一回事情:

   凸优化能够想象成给我一个凸函数,咱们须要找最低点。

  • 为啥叫二次规划问题呢?

  据了解。目标函数和约束条件都为变量的线性函数,叫作——线性规划问题。目标函数为变量的二次函数和约束条件为变量的线性函数,叫作二次规划问题。

   拉格朗日对偶性,即经过给每个约束条件加上一个拉格朗日乘子。而后定义出拉格朗日函数,经过拉格朗日函数将约束条件融合进目标函数中。目的是,只须要经过一个目标函数包含约束条件,即可以解释清楚问题。

知识储备2:有约束最优化问题的数学模型

   SVM 问题是一个不等式约束条件下的优化问题。绝大多数模式识别教程在讨论这个问题时都会加上优化算法的简介。

2.1  有约束优化问题的几何意向

  约束条件通常分为等式约束和不等式约束,前者表示为 g(x) = 0 ;后者表示为 g(x) <= 0、

  假设 x 属于 Rd(就是这个向量一共有 d 个标量组成),则 g(x) = 0 则是由 d-1 维的超平面。那么有约束优化问题就要求在这个 d-1 维的曲面或者超平面上找到能使得目标函数最小的点,这个 d-1 维的曲面就是“可行解区域”。

  对于不等式约束条件, g(x) <= 0 ,则可行解区域 d-1 维曲面扩展成 d 维空间的一个子集。咱们能够从  d=2 的二维空间进行比对理解。等式约束对应的可行解空间就是一条线;不等式约束对应的则是这条线以及线的某一侧对应的区域,就像下面的这幅图(图中的模板函数等高线其实就是等值线,在同一条等值线上的点对应的目标函数值相等)。

2.2  拉格朗日乘子法

  尽管上面咱们已经想象出有约束优化问题的几何意向。但是如何利用代数方法找到这个被约束了的最优解呢?这就须要用到拉格朗日乘子法。

  首先定义原始目标函数 f(x),拉格朗日乘子法的基本思想是把约束条件转换为新的目标函数 L(x,  λ) 的一部分,从而使有约束优化问题变成咱们习惯的无约束优化问题,那么该如何去改造原来的目标函数 f(x),使得新的目标函数 L(x,  λ)  的最优解刚好在可行解区域中呢?这就须要咱们去分析可行解区域的最优解的特色。

知识储备3:KKT条件

   KKT条件是一个线性规划问题能有最优解的充分和必要条件。

  对于不等式约束条件 g(x) <= 0 的状况,以下图所示,最优解所在的位置 x* 有两种可能,或者在边界曲线 g(x)=0 上或者在可行解区域内部知足不等式 g(x) < 0 的地方。

  第一种状况:最优解在边界上,就至关于约束条件就是 g(x) = 0.参考下图,注意此时的目标函数 f(x) 的最优解是在可行解区域外面,因此函数 f(x) 在最优解 x* 附加的变化趋势是“在可行解区域内侧较大而在区域外侧较小”,与之对应的是函数 g(x) 在可行解区域内小于 0 ,在区域外大于零,因此在最优解 x* 附加的变换趋势是内部较小而外部较大。这意味着目标函数 f(x) 的梯度方向与约束条件函数 g(x) 的梯度方向相反。所以根据下式,能够推断出参数 λ > 0。

   通常的,一个最优化数学模型能够表示成以下形式:

   h(x) 是等式约束,g(x)是不等式约束,p, q表示约束的数量。

  而这个最优化数学模型的最优解 x* 需知足的条件(即KTT条件)为:

参考文献:

https://zhuanlan.zhihu.com/p/31652569

https://zhuanlan.zhihu.com/p/57648645

http://www.360doc.com/content/18/0727/00/7669533_773495537.shtml

https://blog.csdn.net/qq_35992440/article/details/80987664

https://zhuanlan.zhihu.com/p/24638007

https://blog.csdn.net/weixin_40170902/article/details/80113128

相关文章
相关标签/搜索