class-支持向量机SVM全析笔记

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。

内容:

1 线性可分与硬间隔最大化
1.1 线性可分SVM
1.2 函数间隔和几何间隔
1.3 间隔最大化
1.4 求解最优化的算法:对偶算法(dual algorithm)
2 线性支持向量机与软间隔最大化
2.1 线性SVM
2.2 学习算法:dual algorithm
2.3 支持向量
2.4 合页损失函数hinge loss function
3 非线性支持向量机与核函数
3.1核技巧kernel trick
3.2 正定核positive define kernel function
3.3 常用核函数
3.4 非线性支持向量机
4 序列最小最优化算法sequential minimal optimization SMO
4.1 两个变量二次规划的解析方法
4.2 变量的选择方法



推荐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

原文地址:https://www.cnblogs.com/sxzhou/p/8528612.html

时间: 2024-10-31 00:11:52

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

机器学习与数据挖掘-支持向量机(SVM)(一)

最近在看斯坦福大学的机器学习的公开课,学习了支持向量机,再结合网上各位大神的学习经验总结了自己的一些关于支持向量机知识. 一.什么是支持向量机(SVM)? 1.支持向量机(Support Vector Machine,常简称为SVM)是一种监督式学习的方法,可广泛地应用于统计分类以及回归分析.支持向量机属于一般化线性分类器,这族分类器的特点是他们能够同时最小化经验误差与最大化几何边缘区,因此支持向量机也被称为最大边缘区分类器. 2.支持向量机将向量映射到一个更高维的空间里,在这个空间里建立有一个

关于支持向量机(SVM)一些不得不说的话

做为一种监督学习模型,支持向量机(Supprot Vector Machine)在机器学习领域内很重要.首先,SVM用来干什么?一句话将,就是分类(Classification).比较简单的分类,比如线性分类.Logistic 回归等等,得到的分类结果未必是最优的.而SVM则旨在找到一个最优的分类器.从这个目的出发,SVM提出了Soft Margin,Support Vector等等看似很直观的概念. 对支持向量机的介绍,往往从线性模型开始讲起.如果想对这个部分有一个了解,有两个英文的资料绝对值

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

[白话解析] 深入浅出支持向量机(SVM)之核函数 0x00 摘要 本文在少用数学公式的情况下,尽量仅依靠感性直觉的思考来讲解支持向量机中的核函数概念,并且给大家虚构了一个水浒传的例子来做进一步的通俗解释. 0x01 问题 在学习核函数的时候,我一直有几个很好奇的问题. Why 为什么线性可分很重要? Why 为什么低维数据升级到高维数据之后,就可以把低维度数据线性可分? What 什么是核函数,其作用是什么? How 如何能够找到核函数? 不知道大家是否和我一样有这些疑问,在后文中, 我将通过

【Hibernate步步为营】--核心对象+持久对象全析(二)

上篇文章讨论了Hibernate的核心对象,在开发过程中经常用到的有JTA.SessionFactory.Session.JDBC,其中SessionFactory可以看做数据库的镜像,使用它能够创建Session对象,JTA用来管理事务,在对象模型修改后同步到数据库中,另外还有Hibernate作为持久层它封装了持久层的转化过程,下面着重讨论持久对象的转换过程. 一.状态解析 Hibernate的持久对象主要分为三个状态,Transient.Persistent.Detached,其中Tran

支持向量机(SVM)(二)-- 拉格朗日对偶(Lagrange duality)

简介: 1.在之前我们把要寻找最优的分割超平面的问题转化为带有一系列不等式约束的优化问题.这个最优化问题被称作原问题.我们不会直接解它,而是把它转化为对偶问题进行解决. 2.为了使问题变得易于处理,我们的方法是把目标函数和约束全部融入一个新的函数,为了使问题变得易于处理,我们的方法是把目标函数和约束全部融入一个新的函数,即拉格朗日函数,再通过这个函数来寻找最优点.即拉格朗日函数,再通过这个函数来寻找最优点. 3.约束条件可以分成不等式约束条件和等式约束条件,只有等式约束条件的问题我们在高等数学课

博客1: 将相关的小命令进行全析了解      

对于文件的相关操作:    1.首先你要查看,那么相关的查看文件的命令是:            cat,tac,head,tail,more,less    这其中包括了多功能查看一个文件的选项,可以查看man文档.    2.那么我们知道,一个文件它有分为两部分,一部分是matadata,另一部分就是我们熟知的data.      上文中介绍了如何查看正文data的方法,下面我们介绍如何管理matadata的相关命令:          touch,stat    对于时间戳的理解,及其命令

支持向量机(SVM)(五)-- SMO算法详解

一.我们先回顾下SVM问题. A.线性可分问题 1.SVM基本原理: SVM使用一种非线性映射,把原训练            数据映射到较高的维.在新的维上,搜索最佳分离超平面,两个类的数据总可以被超平面分开. 2.问题的提出: 3.如何选取最优的划分直线f(x)呢? 4.求解:凸二次规划 建立拉格朗日函数: 求偏导数: B.线性不可分问题 1.核函数 如下图:横轴上端点a和b之间红色部分里的所有点定为正类,两边的黑色部分里的点定为负类. 设: g(x)转化为f(y)=<a,y> g(x)=

第八篇:支持向量机 (SVM)

前言 本文讲解如何使用R语言中e1071包中的SVM函数进行分类操作,并以一个关于鸢尾花分类的实例演示具体分类步骤. 分析总体流程 1. 载入并了解数据集:2. 对数据集进行训练并生成模型:3. 在此模型之上调用测试数据集进行分类测试:4. 查看分类结果:5. 进行各种参数的调试并重复2-4直至分类的结果让人满意为止. 参数调整策略 综合来说,主要有以下四个方面需要调整: 1. 选择合适的核函数:2. 调整误分点容忍度参数cost:3. 调整各核函数的参数:4. 调整各样本的权重. 其中,对于特

机器学习第7周-炼数成金-支持向量机SVM

支持向量机SVM 原创性(非组合)的具有明显直观几何意义的分类算法,具有较高的准确率源于Vapnik和Chervonenkis关于统计学习的早期工作(1971年),第一篇有关论文由Boser.Guyon.Vapnik发表在1992年(参考文档见韩家炜书9.10节)思想直观,但细节异常复杂,内容涉及凸分析算法,核函数,神经网络等高深的领域,几乎可以写成单独的大部头与著.大部分非与业人士会觉得难以理解.某名人评论:SVM是让应用数学家真正得到应用的一种算法 思路 简单情况,线性可分,把问题转化为一个