support vector machines,SVM是二类分类模型。定义在特征空间上间隔最大的线性分类器,由于包括核技巧实质上成为非线性分类器。学习策略是间隔最大化,可形式化为求解凸二次规划问题(convex quadratic programming)。求解算法是求解凸二次规划的最优化算法。 
SVM学习方法分为线性可分支持向量机(linear support vector machine in linearly separable case)、线性支持向量机(linear support vector machine)、非线性支持向量机(non-linear support vector machine)。当数据线性可分时,通过硬间隔最大化(hard margin maximization)学习线性svm称为硬间隔SVM。当数据近似线性可分,通过软间隔最大化(soft margin maximization)学习线性svm称为软间隔SVM。当数据线性不可分时,使用核技巧(kernel trick)及软间隔最大化学习非线性SVM。 
当输入 空间是欧式空间或离散集合,特征空间是希尔伯特空间,核函数(kernel function)表示将输入从输入空间映射到特征空间得到的特征向量之间的内积。核函数可以学习非线性svm,其实就是在更高维的特征空间中学习线性svm。
 
内容:

推荐svm理论基础的blog


1 线性可分与硬间隔最大化

1.1 线性可分SVM

SVM的学习是在特征空间上进行的,SVM所有输入都是由输入空间转换到特征空间,但是在线性可分SVM和线性SVM中假设这两个空间元素一一对应,而非线性SVM中,是非线性映射。回顾线性可分的定义是存在一个线性函数能够将两类样本完全分开的数据称为线性可分数据。

思想:给定特征空间的训练集T={(x1,x2),…(xN,yN)},X属于Rn,Y={+1,-1}称为正类,负类。学习的目标是在特征空间找到一个分离超平面,能将实例完全分类。超平面方程w·x+b=0,法向量w,b截距,可用(w,b)来用。这里用间隔最大化来最优化分离超平面。

线性可分支持向量机定义:训练集通过间隔最大化或等价地求解相应凸二次规划问题学习model分离超平面;分类决策函数为。这里的超平面对应将线性可分数据正确划分且间隔最大。

1.2 函数间隔和几何间隔

一个点距离超平面的远近可以表示分类预测的确信程度,较远的可更为可信。函数间隔(function margin)的概念简单说就是用|w·x+b|能够相对的表示点x距离超平面的远近,w·x+b的符号与label y的符号是否一致表示分类是否正确,因此可用y(w·x+b)表示分类正确性和确信度。即超平面(w,b)关于样本点(xi,yi)的函数间隔为:

超平面的函数间隔所有样本点中函数间隔最小值:,表示超平面的预测正确性和确信度。

以上函数间隔存在问题:当法向量w,截距b成倍增加如2w,2b,超平面未变,但是函数间隔成为原来的2倍。

处理:将w规范化,如,||w||=1,||w||为L2范数,这就是几何间隔(geometric margin),即

(其实就是中学的点到直线的距离公式)

同理,超平面要求为所有样本点中几何间隔最小值。超平面关于样本点的几何间隔就是实例点到超平面的带符号距离(signed distance)

几何间隔和函数间隔的关系是:

虽然当||w||=1时二者相等,但是几何间隔因为归一化的问题,不会因为w,b的成倍变化而变化。

1.3 间隔最大化

满足分类条件的超平面可能有无穷多个,但是几何间隔最大化就将得到唯一超平面——称为硬间隔最大化。几何间隔最大的好处是能够对距离最近的点也能有很好的划分,即对未知数据的预测能力更强。

  1. 几何间隔最大化分离超平面

    约束最优化问题:对几何间隔(约束:所有样本中最小间隔的的间隔)γ最大化。即



    根据二者关系式可得



    可以发现,函数间隔的成倍增加对于不等式的约束没有影响,对目标函数的优化也没有影响。取γ hat=1则1/||w||最大化等价于1/2(||w||2),因此得到线性可分支持向量机学习最优化问题

    (这就是凸二次规划问题(convex quadratic programming))。

    求解了本约束最优化问题,就能得到线性可分SVM模型。

    最大间隔(maximum margin method)算法:


补充一下凸优化的概念:

凸优化问题就是约束最优化问题:



其中f为目标函数,g为约束函数,f,g均是R空间上连续可微的凸函数,约束函数h是R上的仿射函数(即形式y=ax+b,作为对比线性函数为y=ax)。

当目标函数f是二次函数且约束函数g是仿射函数时,凸优化问题就是凸二次规划问题。

  1. 最大间隔分离超平面的存在唯一性

    这里要证明这个结论,分为两个存在性,唯一性。

    存在性:

    训练集线性可分,必存在可行解;目标函数有下界,必有解;训练集既有正类又有负类,因此(0,b)不是最优可行解

    唯一性:

    反证法,假设存在两个最优解。 具体如下:



  2. 支持向量和间隔边界

    支持向量(support vector):线性可分情况下,训练数据集的样本点与分离超平面距离最近的样本点实例,对约束条件化简为:

    正类点,支持向量H1在超平面:

    负类点,支持向量H2在超平面:



    H1与H2之间的距离称为间隔(margin),H1,H2称为间隔边界。

    可以发现,支持向量决定分离超平面,其他点不起作用,故将这种方法称为SVM,支持向量很少但决定了model。

1.4 求解最优化的算法:对偶算法(dual algorithm)

对原始的最优化问题应用拉格朗日对偶性,求解对偶问题(dual problem)得到原始问题(primal problem)最优解。

首先构建Lagrange function:对约束引入拉格朗日乘子(Lagrange multuplier),得,

其中,α为multiplier向量。

根据对偶性,原始问题转化为

分两步走:

*先求min部分:分别对w,b求偏导,并另偏导为0。

得,

将w的表达式代入L函数,同时利用第二个summation=0的条件消去一项得:



因此,得到,

  • 再求第二个部分max

    将其换号转化为求极小值:

    此式就是算法中使用的式子

这里补充一些基础知识:

[深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件] http://blog.csdn.net/xianlingmao/article/details/7919597)

第二个理解博客


回到正题,如此将原始约束最优化问题转化为对偶最优化问题,原始最优化的解可求(具体可证):

分离超平面为:

分类决策函数为:

此式称为SVM的对偶形式,只依赖于输入x和训练样本xi的内积

线性可分SVM学习算法:





支持向量在定义:

称为SV

支持向量一定在边界上,因此

αi*>0,故, or

注意:现实情况可能是数据集含有噪声,导致数据集线性不可分。

2 线性支持向量机与软间隔最大化

2.1 线性SVM

简单来说就是数据集中存在一些特异点(outlier),正是因为这些点的存在导致数据变得线性不可分,容易想到的是除去这些点,数据集仍然变得线性可分。线性不可分意味着某些点不满足约束条件

为了解决这个问题对每个样本点(xi,yi)引入一个松弛变量ξi>=0,则约束条件为

同时,对每个松弛变量ξi,在目标函数引入ξi

其中,C>0称为惩罚参数,C变大对误分类惩罚增大,变小误分类惩罚减小。最小化目标函数的两层含义:对最大间隔尽量小;同时误分类点个数也尽量小,C是调和二者的系数。从而可以根据上节内容来学习此处的svm模型,称为软间隔最大化。

线性不可分线性SVM学习模型:凸二次规划(原始问题):



因这个问题是context quadratic programming,因此关于(w,b,ξ)的解是存在的,w唯一,b不唯一存在于某一区间。

通过求解上述凸优化问题得到分离超平面:;相应分类决策函数:,这就是线性支持向量机,比线性可分SVM更具有广适性。

2.2 学习算法:dual algorithm

对偶问题:



原始最优化拉格朗日函数为:

对L的w,b,ξ求偏导=0,即得到对偶问题,求解对偶问题得到原始问题的解:



线性SVM算法:

2.3 支持向量

线性不可分时,将对偶问题的解中对应于称为支持向量(软间隔的支持向量)

支持向量到边界的距离:

α和ξ对分类的影响:




此处书上讲解不太详细可看http://www.cnblogs.com/pinard/p/6100722.html

其中,这也是一系列SVM原理介绍。


2.4 合页损失函数hinge loss function

与以上思路(软间隔最大化,凸二次规划)不同的是,最小化以下目标函数:



其中,第一项为经验风险,则合页损失函数为:,第二项为正规化项

右下角的“+”符号为取正值的函数:



L式的含义是:当样本点被正确分类且函数间隔大于1时损失为0,否则

因此线性SVM原始最优化问题

等价于



合页损失函数是0-1损失函数的上界又称为代理损失函数(surrogate loss funtion),虚线为感知机的损失函数,可见合页损失函数更靠右所以对学习提出更高的要求。

3 非线性支持向量机与核函数

3.1核技巧kernel trick

  1. 非线性分类问题

    对于数据集中(此处还是正负类),用一个超曲面才能将类别分开的叫做非线性可分。比如下图:用一个椭圆曲线将其分开。



    非线性问题不好求解,故需要将非线性空间的点转化为线性空间的点,因此需要非线性变换



    线性方法求解非线性问题分为两步:
  • 首先使用一个变换将原空间的数据映射到新空间;
  • 在新空间用线性分类的学习方法从训练数据学习分类模型。

    ————这就是核技巧kernel trick的思想。

    核技巧的基本想法:通过一个非线性变换将输入空间(欧式空间Rn或离散集合)对应于一个特征空间(希尔伯特空间H),使得输入空间中超曲面模型对应于特征空间H中超平面模型(SVM),分类问题的学习任务通过在特征空间求解线性SVM就可以完成。
  1. 核函数的定义



    (注意是内积inner product)

    φ(x)为映射函数,K(x,z)为核函数。

    通常,在学习和预测中只定义核函数K而不显式的定义映射函数φ,因为直接计算K(x,z)更容易。注意到特征空间可能是高维的甚至是无穷维的,对给定的核函数有不同的特征空间和映射,即使同一特征空间映射也不同。
  2. 核函数在SVM中的应用

    在线性支持向量机的对偶问题中,无论是目标函数还是决策函数都只涉及输入实例与训练实例之间的内积,如果将对偶问题中的内积xi·xj用核函数来代替K(xi,xj)=φ(xi)·φ(xj),

    对偶函数目标函数为:



    分类决策函数为:



    说明:映射函数将原来的输入空间的内积xi·xj变换为新的特征空间的内积φ(xi)·φ(xj),在新的特征空间里,从训练样本中学习SVM,当映射函数是非线性函数时,学到的含有核函数的SVM是非线性分类模型。

    要注意的是在给定K的条件下,解决非线性分类问题的SVM的学习是隐式的在特征空间进行,不需要显式的定义映射函数和特征空间,因此称为核技巧。核函数的有效性需要通过实验验证。

3.2 正定核positive define kernel function

由上可知映射函数是不知道的,那么一个函数K(x,z)满足什么样的条件才是核函数?——正定核。


补充矩阵知识:

正定:所有特征值均大于0;

半正定:所有特征值均大于等于0;

贴一个知乎回答:



用户语冰对特征值大于0与变换角度小于0的关系阐述:特征值就是原空间某一个基在变换后的空间的长度变化系数,大于0表示方向一致,小于0表示方向相反。变换后夹角小于90度,其实隐藏的含义是变换后的向量投影回原向量时方向不变。用特征值不小于零或者大于零的条件做限制可以更直观也更严格地表达出这一个特点

Gram矩阵:v1,v2,…,vn 是内积空间的一组向量,Gram 矩阵定义为: Gij=⟨vi,vj⟩,显然其是对称矩阵。

性质:Gram矩阵是半正定的;

一个重要应用是计算线性无关:一组向量线性无关 当且仅当 Gram行列式不等于0.


  1. 定义映射,构成向量空间S

    先定义一个映射φ:

    定义线性组合:

    线性组合为元素的集合S,由于S对加法和数乘封闭,所以S构成一个向量空间。
  2. 在S上定义内积,使其成为内积空间



    定义运算'':

    要证'
    '是空间S的内积,只需证





    证明以上得出结论S是内积空间:

  3. 将内积空间S完备化为希尔伯特空间

    求f的范数:,因此S为赋范向量空间,泛函理论得知分析得知不完备的赋范向量空间一定可以完备化得到完备赋范向量空间H。一个内积空间当作为一个赋范向量空间是完备的时候就是希尔伯特空间。

    ——称为再生核希尔伯特空间(reproducing kernel Hilbert space)。由于核K具有再生性,即满足

    ——称为再生核
  4. 正定核的充要条件





    定义7.7对于构造核函数非常有用。但是对于一个具体核函数来说检验其是否为正定核并不容易。实际问题中常常应用已有的核函数。

3.3 常用核函数

  1. 多项式核函数polynomial kernel function



    对应SVM是一个p次多项式分类器,在此情况下,分类决策函数为

  2. 高斯核函数Gaussian kernel function



    对应的SVM是高斯径向基函数radial basis function分类器,分类决策函数为:

  3. 字符串核函数string kernel function

    核函数不仅可以定义在欧式空间上,还可以定义在离散数据集合上。字符串核函数是定义在字符串集合上的核函数,在文本分类,信息检索,生物信息学等方面都有应用。

    书上讲解十分学术化因此,这里推荐一个博客:http://blog.csdn.net/shijing_0214/article/details/51134802





    长度的定义是指定序列下的序列号,从1开始,比如lass das,的asd序列号为(2,3,6)和(2,4,6)所以长度为5因此这里映射后为2λ^5.

    两个字符串s,t上的字符串核函数是基于映射φn的特征空间中的内积:



    字符串核函数kn(s,t)给出了字符串s,t中长度等于n的所有子串组成的特征向量余弦相似度(cosine similarity)。两个字符串相同的子串越多,他们越相似,字符串核函数的值就越大。

3.4 非线性支持向量机



利用核技巧可以将线性分类的学习方法应用到非线性分类问题上,将线性SVM扩展到非线性SVM中,只需将线性SVM对偶形式中的内积函数换成核函数。

非线性SVM学习算法:

4 序列最小最优化算法sequential minimal optimization SMO

凸二次规划问题具有全局最优解,但是当训练样本很大时,这种求解算法很低效。故这里提出一个SMO算法,以快速实现(1998年 Platt提出)。

要解决的问题是:凸二次规划的对偶问题



SMO基本思路:启发式算法,KKT条件时最优化问题的充要条件,如果满足则解就得到了。否则,选择两个变量,固定其他变量,针对这两个变量构建二次规划问题,这就使得原始问题变得更小,可以通过解析方法得到,提高计算速度;应该要求关于这两个变量的解更接近于原始二次规划的解。注意子问题有两个变量,一个是违反KKT条件最严重的一个,另外一个由约束条件自动确定,如此SMO将原问题不断分解为子问题求解,进而达到求解原始问题的目的。

比如,将约束条件中假设两个变量alpha1,alpha2,其他固定,那么等式约束为:



SMO算法包括两部分:两个变量二次规划的解析方法,选择变量的启发式方法。

4.1 两个变量二次规划的解析方法

还是假设两个变量为alpha1,alpha2,则:



目标函数省略了不含这两个变量的常数项,ζ是常数。

首先观察约束条件,然后在约束条件下求解:



经过画图和变形,发现这已经变成中学学过的线性规划的问题,这里不等式约束变成一个区域,等式约束变成一条平行于正方形约束区域的对角线的直线,两个变量可相互表示,因此两个变量最优解的问题变成了单变量最优化的问题。

4.2 变量的选择方法

选择两个变量,至少一个变量严重违反KKT条件。

  1. 第一个变量选择

    SMO中将选择第一个变量称为外层循环。外层循环选择训练样本中违反KKT条件最严重的样本点,检验方法是:





    说明:该检验是在范围内进行的。检验过程中,外层循环首先遍历所有满足条件的样本点,即在间隔边界上的支持向量点,检验他们是否满足KKT条件。若这些均满足,那么遍历整个训练集检验他们是够满足KKT条件。
  2. 第二个变量的选择

    SMO称这个选择为内层循环。假设外层循环找到alpha1,那么这里alpha2的要求是希望alpha2能有足够大的变化。根据以上手写的结论,alpha2 依赖于|E1-E2|,如果alpha1已经找到则E1也会确定。如果E1是正的,那么选择最小的Ei作为E2,如果E1是负的,那么选择最大的Ei作为E2。为了节省计算时间,将所有的Ei保存在一个列表中。

    特殊情况下,如果内层循环通过以上方法选择的alpha2不能不能使目标函数有足够的下降,那么采用启发式规则继续选择,遍历间隔边界上的支持向量点,一次对alpha2进行试用,直到目标函数有足够的下降。若找不到合适的,遍历整个训练集,若扔找不到合适的,放弃alpha1,再通过外层循环寻求另外的alpha1。
  3. 计算阈值b,和差值Ei





    合并化简后:



    每次完成两个变量的优化后,还必须更新对应的Ei值,并将它们保存在Ei表中



    b1,b2的关系:



    SMO算法:





    总结SMO



    推荐博客:https://www.cnblogs.com/jerrylead/archive/2011/03/18/1988419.html
 

class-支持向量机SVM全析笔记的更多相关文章

  1. OpenCV 学习笔记 07 支持向量机SVM(flag)

    1 SVM 基本概念 本章节主要从文字层面来概括性理解 SVM. 支持向量机(support vector machine,简SVM)是二类分类模型. 在机器学习中,它在分类与回归分析中分析数据的监督 ...

  2. 机器学习笔记:支持向量机(svm)

    支持向量机(svm)英文为Support Vector Machines 第一次接触支持向量机是2017年在一个在线解密游戏"哈密顿行动"中的一个关卡的二分类问题,用到了台湾教授写 ...

  3. 机器学习之支持向量机—SVM原理代码实现

    支持向量机—SVM原理代码实现 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/9596898.html 1. 解决 ...

  4. 一步步教你轻松学支持向量机SVM算法之理论篇1

    一步步教你轻松学支持向量机SVM算法之理论篇1 (白宁超 2018年10月22日10:03:35) 摘要:支持向量机即SVM(Support Vector Machine) ,是一种监督学习算法,属于 ...

  5. 支持向量机SVM 参数选择

    http://ju.outofmemory.cn/entry/119152 http://www.cnblogs.com/zhizhan/p/4412343.html 支持向量机SVM是从线性可分情况 ...

  6. 转:机器学习中的算法(2)-支持向量机(SVM)基础

    机器学习中的算法(2)-支持向量机(SVM)基础 转:http://www.cnblogs.com/LeftNotEasy/archive/2011/05/02/basic-of-svm.html 版 ...

  7. [白话解析] 深入浅出支持向量机(SVM)之核函数

    [白话解析] 深入浅出支持向量机(SVM)之核函数 0x00 摘要 本文在少用数学公式的情况下,尽量仅依靠感性直觉的思考来讲解支持向量机中的核函数概念,并且给大家虚构了一个水浒传的例子来做进一步的通俗 ...

  8. 机器学习——支持向量机SVM

    前言 学习本章节前需要先学习: <机器学习--最优化问题:拉格朗日乘子法.KKT条件以及对偶问题> <机器学习--感知机> 1 摘要: 支持向量机(SVM)是一种二类分类模型, ...

  9. 【IUML】支持向量机SVM

    从1995年Vapnik等人提出一种机器学习的新方法支持向量机(SVM)之后,支持向量机成为继人工神经网络之后又一研究热点,国内外研究都很多.支持向量机方法是建立在统计学习理论的VC维理论和结构风险最 ...

随机推荐

  1. [Python Study Notes] Basic I\O + File 操作

    列表操作 Python 文件I/O 本章只讲述所有基本的的I/O函数,更多函数请参考Python标准文档. 打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个用逗号隔开的表达式. ...

  2. Hive metastore源码阅读(二)

    最近随着项目的深入,发现hive meta有些弊端,就是你会发现它的元数据操作与操作物理集群的代码耦合在一起,非常不利于扩展.比如:在create_table的时候同时进行路径校验及创建,如下代码: ...

  3. Navicat的使用

    Navicat的使用 navicat作为一种数据库的操作工具,在工作中使用的频率很高.相比phpMyAdmin而言,无论是从界面操作的易用性上,还是外观上,抑或是IP的配置上都有着很大的突出优势.ph ...

  4. CentOS源码安装Python3.6

    一.安装环境及版本 CentOS 6.5 Python 3.6.1 二.安装依赖包 1.安装静态库 # yum install -y openssl-static 注:如果不安装该静态库,会导致pyt ...

  5. 提高SQL查询效率

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  6. 并行执行 Job - 每天5分钟玩转 Docker 容器技术(134)

    有时,我们希望能同时运行多个 Pod,提高 Job 的执行效率.这个可以通过 parallelism 设置. 这里我们将并行的 Pod 数量设置为 2,实践一下: Job 一共启动了两个 Pod,而且 ...

  7. 【动画】JQuery实现冒泡排序算法动画演示

    1 前言 冒泡排序是大家最熟悉的算法,也是最简单的排序算法,因其排序过程很象气泡逐渐向上漂浮而得名.为了更好的理解其基本的思想,毛三胖利用JQuery实现了冒泡排序的动画演示,并计划陆续实现其它排序算 ...

  8. JavaScript 常用单词整理

    JS单词 push :添加一个数组元素 document :文档 pop :删除最后一个数组元素 console :控制台 shift :删除第一个数组元素 string :字符串 Concat 组合 ...

  9. 分享一个集成在项目中的REST APIs文档框架swagger

    1 为什么是使用swagger? 1-1 当后台开发人员开发好接口,是不是还要重新书写一份接口文档提给前端人员,当然对于程序员最不喜欢的就是书写文档(当然文档是必须的,有利于项目的维护) 1-2 当后 ...

  10. C#委托与事件--简单笔记

    委托 简单记录点东西 适合似懂非懂的朋友看看 委托类型用来定义和响应应用程序中的回调. 借此可以设计各种有面向对象特性的代码模式.下面要说的事件在我看来就是委托的一种实现,再深一步讲,利用委托加事件, ...