支持向量机 support vector machine
SVM(support Vector machine)
(1) SVM(Support Vector Machine)是从瓦普尼克(Vapnik)的统计学习理论发展而来的,主要针对小样本数据进行学习、分类和预测(有时也叫回归)的一种方法,能解决神经网络不能解决的过学习问题。作者以为,类似的根据样本进行学习的方法还有基于案例的推理(Case-Based Reasoning),决策树归纳算法C4.5等,以后将详细阐述这两种方法。
(2)过学习问题:训练误差过小导致推广能力下降,即真实风险的增加。
(3)推广能力:generalization ability,也可以说是泛化能力,就是对未知样本进行预测时的精确度。
原文:A practical guide to support vector classification.
libsvm中的样本预处理的原则有2个:
1 非数值属性(Categorical Feature)
由于SVM要求被处理的数据都是实数,因此对于属性值为类别的属性要进行转换。例如{red, green, blue},可以转换成3个属性
red (1, 0, 0)
green (0, 1, 0)
blue (0, 0, 1)
来表示。经验表明当这样的非数值属性的取值不是太多(这个具体数字不明确)的时候,这种编码比用一个数字来表示属性的类别要稳定的多,比如用1, 2, 3来分别表示red, green, blue就不太合适了。目前,这个过程没有实现自动处理,需要使用者根据属性取值的多少自己动手去修改。
2 缩放(scaling)
进行缩放的原因和使用神经网络时的考虑是一样的,由于RBF网络中采用样本数据的欧式距离来计算。主要优点就是避免数值范围较大的属性控制数值范围较小的属性。另一个优点就是避免计算时的numerical difficulties. 因为核值通常依赖特征向量的内积(inner product),而较大的属性值可能导致numerical问题。因此推荐把每个属性缩放到[-1, 1]或者[0, 1]之间,而且前一个范围要比后一个好,即对列向量进行规范化,其详细解释和计算公式见http://www.faqs.org/faqs/ai-faq/neural-nets/part2/中的“Should I standardize the input variables (column vectors)?”。libsvm中没有考虑属性的类型(效益、成本、固定、偏离、区间、偏离区间 6 种不同的属性类型的规范化计算公式是不一样的,详见:徐泽水,《不确定多属性决策方法及应用》,清华大学出版社,2004。)而采用了统一的线性缩放,作者以为此处可以改进一下。
需要注意的是,在进行测试之前,要对测试数据进行同样的缩放操作。其实在libsvm中有程序(svmscale.exe)来进行缩放操作,也可以不用手工缩放,只要用easy.py来对(经过非数值的归一化处理之后的)原始数据直接操作即可。
上面这两种方法基本上可以完成所有的样本的预处理了。其实只有原则 1 是需要自己手工改动的,其他工作在libsvm中的tool文件夹下都由现成的python程序处理。
“推广能力”是分类问题(classification,也称为模式识别问题,在概率统计中则称为判别分析问题)的一个指标。所谓推广就是在求得决策函数f(x)后,对一个新的输入x,按照y=f(x)推断出x相应的输出y。“推广能力”就是描述推广优劣的一种度量。
那么,决策函数f(x)是怎么回事?这要从分类问题的(数学语言描述的)定义说起,参见(邓乃扬等人的《数据挖掘中的新方法——支持向量机》,科学出版社,2005)。通俗的讲。就是一个表示x,y之间关系的函数,而x,y就是样本中的一对数据。其中x代表输入,y代表类别。分类问题就是找到这个决策函数f(x),而对于新的输入x,能够判断其所属类别y则是个预测(回归)问题。
统计学习理论(Vapnik V N, 许建华 张学工译, 电子工业出版社, 2004)是SVM的坚实的理论基础,其作者指出,在可以只用几个变量描述的简单世界中,传统的科学哲学的目标是“发现普遍的自然规律”。但是,这一目标在需要用很多变量描述的复杂世界中不一定可行。因此,在一个复杂世界中,我们需要放弃寻找一般规律的目标,而考虑其他目标。
在Vapnik的The nature of statistical learning theory(1995年)一书中,作者对复杂世界的推理提出了如下法则:“在解决一个感兴趣的问题时,不要把解决一个更一般的问题作为一个中间步骤。要试图得到所需要的答案,而不是更一般的答案。很可能你拥有足够的信息来很好地解决一个感兴趣的特定问题,但却没有足够的信息来解决一个一般性的问题。”
东亚人就是这种理论的坚决执行者http://www.as69.com/,“他们注重在其所处环境中的对象,很少关心类别和普适规则,基于在特定时刻施加于对象个体上的各种作用来解释其行为。没有太多地采用形式逻辑,而常常采用各种辩证推理规则,包括综合、超越和归一。”而西方人则注重对象及其特性(即一般性规律),并且用这种假定的基于分类的规则来预测和解释对象的行为(这样经常是错误的)。形式逻辑就是西方人的“法宝”,在推理、分类和规则验证中发挥了作用。
from :http://axywestwind.bokee.com/tb.b?diaryId= 3
机器学习(Machine Learning, ML)的目的是根据给定的训练样本求对某系统输入输出之间依赖关系的估计,使它(这种关系)能够对未知输出做出尽可能准确地预测。机器学习至今没有一个精确的公认的定义。作为人工智能(Artificial Intelligence, AI)的一个重要研究领域,ML的研究工作主要围绕学习机理、学习方法和面向任务这三个基本方面进行研究。模式识别、函数逼近和概率密度估计是三类基本的ML问题。
从数学的角度来考虑,机器学习问题就是已知n个独立同分布的观测样本,在同一组预测函数中求一个最优的函数对依赖关系进行估计,使期望风险R[f]最小。损失函数是评价预测准确程度的一种度量,它与预测函数f(x)密切相关。而f(x)的期望风险依赖于概率分布和损失函数,前者是客观存在的,后者是根据具体问题选定的,带有(主观的)人为的或偏好色彩。期望风险的大小直观上可以理解为,当我们用f(x)进行预测时,“平均”的损失程度,或“平均”犯错误的程度。
但是,只有样本却无法计算期望风险,因此,传统的学习方法用样本定义经验风险Remp[f]作为对期望风险的估计,并设计学习算法使之最小化。即所谓的经验风险最小化(Empirical Risk Minimization, ERM)归纳原则。经验风险是用损失函数来计算的。对于模式识别问题的损失函数来说,经验风险就是训练样本错误率;对于函数逼近问题的损失函数来说,就是平方训练误差;而对于概率密度估计问题的损失函数来说,ERM准则就等价于最大似然法。事实上,用ERM准则代替期望风险最小化并没有经过充分的理论论证,只是直观上合理的想当然做法。也就是说,经验风险最小不一定意味着期望风险最小。其实,只有样本数目趋近于无穷大时,经验风险才有可能趋近于期望风险。但是很多问题中样本数目离无穷大很远,那么在有限样本下ERM准则就不一定能使真实风险较小啦。ERM准则不成功的一个例子就是神经网络的过学习问题(某些情况下,训练误差过小反而导致推广能力下降,或者说是训练误差过小导致了预测错误率的增加,即真实风险的增加)。
统计学习理论(Statistical Learning Theory, SLT)和支持向量机(Support Vector Machine, SVM)建立了一套较好的有限训练样本下机器学习的理论框架和通用方法,既有严格的理论基础,又能较好地解决小样本、非线性、高维数和局部极小点等实际问题,其核心思想就是学习机器(又叫预测函数,或学习函数,或学习模型)F要与有限的训练样本相适应。在学习算法中需要选择恰当的F,这里的关键因素是F的大小,或者F的丰富程度,或者说F的“表达能力”,VC维(Vapnik-Chervonenkis Dimension)就是对这种“表达能力”的一种描述。
VC维的定义如下:对于一个指示函数集,如果存在h个样本能够被函数集中的函数按所有可能的2的h次幂种形式分开,则称函数集能够把h个样本都打散,h的最大值就是函数集的VC维。VC维是SLT中的一个重要概念,它是函数集学习性能的重要指标。目前尚没有通用的关于任意函数集VC维计算的理论,只知道一些特殊的函数集的VC维。比如,在n维空间中线性分类器和线性实函数的VC维是 n+1,而 f(x,a) = sin(ax) 的VC维则为无穷大。对于给定的学习函数集,如何(用理论或实验的方法)计算其VC维是当前统计学习理论中有待研究的一个问题。
由上文可知,在有限样本情况下,仅仅用ERM来近似期望风险是行不通的。统计学习理论给出了期望风险 R[f] 与经验风险 Remp[f] 之间关系:R[f] <= ( Remp[f] + e )。其中 e = g(h/n) 为置信区间,e 是VC维 h 的增函数,也是样本数n的减函数。右端称为结构风险,它是期望风险 R[f] 的一个上界。经验风险的最小依赖较大的 F (样本数较多的函数集)中某个 f 的选择,但是 F 较大,则VC维较大,就导致置信区间 e 变大,所以要想使期望风险 R[f] 最小,必须选择合适的 h 和 n 来使不等式右边的结构风险最小,这就是结构风险最小化(Structural Risk Minimization, SRM)归纳原则。实现SRM的思路之一就是设计函数集的某种结构使每个子集中都能取得最小的经验风险(如使训练误差为0),然后只需选择适当的子集使置信范围最小,则这个子集中使经验风险最小的函数就是最优函数。SVM方法实际上就是这种思想的具体实现。
SVM是一种基于统计的学习方法,它是对SRM的近似。概括地说,SVM就是首先通过用内积函数定义的非线性变换将输入空间变换到一个高维空间,然后再在这个空间中求(广义)最优分类面的分类方法。
============================
名词解释1——支持向量机:“机(machine,机器)”实际上是一个算法。在机器学习领域,常把一些算法看作是一个机器(又叫学习机器,或预测函数,或学习函数)。“支持向量”则是指训练集中的某些训练点的输入 xi 。它是一种有监督(有导师)学习方法,即已知训练点的类别,求训练点和类别之间的对应关系,以便将训练集按照类别分开,或者是预测新的训练点所对应的类别。
名词解释2——符号函数:sgn(a) = 1, a >= 0;sgn(a) = -1, a < 0.
一般地,考虑 n 维空间上的分类问题,它包含 n 个指标和 l 个样本点。记这 l 个样本点的集合为 T = {(x1,y1),...,(xl,yl)},其中 xi 是输入指标向量,或称输入,或称模式,其分量称为特征,或属性,或输入指标;yi 是输出指标向量,或称输出,i = 1,...,l。这 l 个样本点组成的集合称为训练集,所以我们也称样本点位训练点。
对于训练集来说,有线性可分、近似线性可分和线性不可分等三种情况,这就是分类问题的三种类型。其实,无论是哪类问题,都有对应的分类机,这将在以下的内容中进行详细阐述。那么,有人可能会问,什么叫线性可分?通俗地讲,就是可以用一条或几条直线把属于不同类别的样本点分开。实际上,求解分类问题,就是要求出这条或这几条直线!那么,问题是:怎么求?这里先以二维两类线性可分的分类问题为例,做个详细的说明,然后再过渡到多类分类问题。
首先,回忆一下平面(二维)坐标系中某条直线的方程。还记得直线的一般方程
Ax + By + C = 0 (公式一)
吧,我们引入向量的概念,则该方程可以写成{x,y}与{A,B}的内积加上C等于0,即
{A,B}·{x,y} + C = 0
你还记得法向量和方向向量的概念吗?其实{A,B}就是法向量,而{B,-A}就是方向向量了。那么我们可以把直线的一般方程简化成为
w·x + b = 0 (公式二)
的形式(因为这个式子是大家最常用的嘛)。注意:(公式二)中的 x 和(公式一)中的 x 不同,前者一个二维向量,后者是一个实数。
对于两类问题,如果将某一直线两侧的样本点分为正类和负类,则用符号函数的方式推断点 x 所对应的类别 y 的决策函数如下:
y = f(x) = sgn((w·x) + b) (公式三)
根据符号函数的定义,很明显 y 的取值要么是 1 ,要么是 -1,也就是说样本点的类别只有 1 和 -1 两类。此时的分类问题是:对于任意给定的一个新的模式 x ,根据训练集推断它所对应的输出 y 是 1 还是 -1。这就是线性可分的分类问题,也是一个模式识别问题,我们要做的工作就是要求出 w 和 b 。
直接求这两个参数基本上不太可能,除了训练集我们又没有别的信息可以利用,这可如何是好?前辈们给出了一个绝妙的方法——就是所求得的预测函数 f(x) 对原有样本的分类错误率最小。那么,问题又出来了,这个错误率咋算?损失函数就是专门用来评价预测准确程度的一种度量,而且模式识别问题使用的正是“0-1损失函数”。根据我的上一篇学习体会——《从机器学习到支持向量机》http://axywestwind.bokee.com/viewdiary..ht ml中的阐述,使(公式三)中的 f(x) 的预测误差最小的问题转化成期望误差最小、经验风险最小,最后在统计学习理论中又转化为结构风险最小(Structural Risk Minimization, SRM)。而实现SRM的思路之一就是设计预测函数集的某种结构使每个子集中都能取得最小的经验风险(如使训练误差为0),然后只需选择适当的子集使置信范围最小,则这个子集中使经验风险最小的函数就是最优函数。SVM方法实际上就是这种思想的具体实现,它是对SRM的近似。说了半天,终于和上次的内容连接上了。但是,为了求解SRM这个最小化问题,还得将它转化成数学形式。
SVM方法是从线性可分情况下的最优分类面提出的,它是实现统计学习理论思想的方法。什么是最优分类面呢?这要从最优分类线说起。所谓最优分类线就是要求分类线不但能将两类无错误地分开,而且要使两类的分类间隔最大。前者是保证经验风险最小(如使训练误差为0),而使分类间隔最大实际上就是使推广性的界中的置信范围最小,从而使真实风险最小。推广到高维空间,最优分类线就成为最优分类面。
那么如何构造这个最优分类面呢?方法有 2 个:平分最近点法和最大间隔法。有趣的是,这两个方法殊途同归,它们求解得到的是同一个超平面(由三个定理联合起来证明了这个结论)。由这三个定理可知,这两个方法与一个最优化问题求解方法等价,这个方法就称为“线性可分支持向量分类机”。其实,这个分类机是将最大间隔法求解最优分类面的最优化问题转化为其对偶问题,从而通过求解相对简单的对偶问题来求解原分类问题的算法。随后引入松弛变量和惩罚因子来解决非线性分类问题,并且允许一定的分类错误(软间隔),最终得到非线性软间隔的标准的 C-支持向量机(C-SVC)。其中的巧妙之处就在于把一个复杂的最优化问题的求解简化为对原有样本数据的内积运算。我们要做的就是选择适当的核函数及其参数、惩罚因子就可以了。
概括地说,SVM就是首先通过用内积函数定义的非线性变换将输入空间变换到一个高维空间,然后再在这个空间中求(广义)最优分类面的分类方法。
那么,如何通过计算机来求解这个内积运算呢?且听下回分解!下次会介绍选块算法、分解算法,并重点介绍由分解算法改进得到的最经典的 SMO 算法。
========================
(一)SVM的八股简介
支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本、非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中[10]。
支持向量机方法是建立在统计学习理论的VC 维理论和结构风险最小原理基础上的,根据有限的样本信息在模型的复杂性(即对特定训练样本的学习精度,Accuracy)和学习能力(即无错误地识别任意样本的能力)之间寻求最佳折衷,以期获得最好的推广能力[14](或称泛化能力)。
以上是经常被有关SVM 的学术文献引用的介绍,有点八股,我来逐一分解并解释一下。
Vapnik是统计机器学习的大牛,这想必都不用说,他出版的《Statistical Learning Theory》是一本完整阐述统计机器学习思想的名著。在该书中详细的论证了统计机器学习之所以区别于传统机器学习的本质,就在于统计机器学习能够精确的给出学习效果,能够解答需要的样本数等等一系列问题。与统计机器学习的精密思维相比,传统的机器学习基本上属于摸着石头过河,用传统的机器学习方法构造分类系统完全成了一种技巧,一个人做的结果可能很好,另一个人差不多的方法做出来却很差,缺乏指导和原则。
所谓VC维是对函数类的一种度量,可以简单的理解为问题的复杂程度,VC维越高,一个问题就越复杂。正是因为SVM关注的是VC维,后面我们可以看到,SVM解决问题的时候,和样本的维数是无关的(甚至样本是上万维的都可以,这使得SVM很适合用来解决文本分类的问题,当然,有这样的能力也因为引入了核函数)。
结构风险最小听上去文绉绉,其实说的也无非是下面这回事。
机器学习本质上就是一种对问题真实模型的逼近(我们选择一个我们认为比较好的近似模型,这个近似模型就叫做一个假设),但毫无疑问,真实模型一定是不知道的(如果知道了,我们干吗还要机器学习?直接用真实模型解决问题不就可以了?对吧,哈哈)既然真实模型不知道,那么我们选择的假设与问题真实解之间究竟有多大差距,我们就没法得知。比如说我们认为宇宙诞生于150亿年前的一场大爆炸,这个假设能够描述很多我们观察到的现象,但它与真实的宇宙模型之间还相差多少?谁也说不清,因为我们压根就不知道真实的宇宙模型到底是什么。
这个与问题真实解之间的误差,就叫做风险(更严格的说,误差的累积叫做风险)。我们选择了一个假设之后(更直观点说,我们得到了一个分类器以后),真实误差无从得知,但我们可以用某些可以掌握的量来逼近它。最直观的想法就是使用分类器在样本数据上的分类的结果与真实结果(因为样本是已经标注过的数据,是准确的数据)之间的差值来表示。这个差值叫做经验风险Remp(w)。以前的机器学习方法都把经验风险最小化作为努力的目标,但后来发现很多分类函数能够在样本集上轻易达到100%的正确率,在真实分类时却一塌糊涂(即所谓的推广能力差,或泛化能力差)。此时的情况便是选择了一个足够复杂的分类函数(它的VC维很高),能够精确的记住每一个样本,但对样本之外的数据一律分类错误。回头看看经验风险最小化原则我们就会发现,此原则适用的大前提是经验风险要确实能够逼近真实风险才行(行话叫一致),但实际上能逼近么?答案是不能,因为样本数相对于现实世界要分类的文本数来说简直九牛一毛,经验风险最小化原则只在这占很小比例的样本上做到没有误差,当然不能保证在更大比例的真实文本上也没有误差。
统计学习因此而引入了泛化误差界的概念,就是指真实风险应该由两部分内容刻画,一是经验风险,代表了分类器在给定样本上的误差;二是置信风险,代表了我们在多大程度上可以信任分类器在未知文本上分类的结果。很显然,第二部分是没有办法精确计算的,因此只能给出一个估计的区间,也使得整个误差只能计算上界,而无法计算准确的值(所以叫做泛化误差界,而不叫泛化误差)。
置信风险与两个量有关,一是样本数量,显然给定的样本数量越大,我们的学习结果越有可能正确,此时置信风险越小;二是分类函数的VC维,显然VC维越大,推广能力越差,置信风险会变大。
泛化误差界的公式为:
R(w)≤Remp(w)+Ф(n/h)
公式中R(w)就是真实风险,Remp(w)就是经验风险,Ф(n/h)就是置信风险。统计学习的目标从经验风险最小化变为了寻求经验风险与置信风险的和最小,即结构风险最小。
SVM正是这样一种努力最小化结构风险的算法。
SVM其他的特点就比较容易理解了。 小样本,台湾信号王并不是说样本的绝对数量少(实际上,对任何算法来说,更多的样本几乎总是能带来更好的效果),而是说与问题的复杂度比起来,SVM算法要求的样本数是相对比较少的。
非线性,是指SVM擅长应付样本数据线性不可分的情况,主要通过松弛变量(也有人叫惩罚变量)和核函数技术来实现,这一部分是SVM的精髓,以后会详细讨论。多说一句,关于文本分类这个问题究竟是不是线性可分的,尚没有定论,因此不能简单的认为它是线性可分的而作简化处理,在水落石出之前,只好先当它是线性不可分的(反正线性可分也不过是线性不可分的一种特例而已,我们向来不怕方法过于通用)。
高维模式识别是指样本维数很高,例如文本的向量表示,如果没有经过另一系列文章(《文本分类入门》)中提到过的降维处理,出现几万维的情况很正常,其他算法基本就没有能力应付了,SVM却可以,主要是因为SVM 产生的分类器很简洁,用到的样本信息很少(仅仅用到那些称之为“支持向量”的样本,此为后话),使得即使样本维数很高,也不会给存储和计算带来大麻烦(相对照而言,kNN算法在分类时就要用到所有样本,样本数巨大,每个样本维数再一高,这日子就没法过了……)。
下一节开始正式讨论SVM。别嫌我说得太详细哦。
SVM入门(二)线性分类器Part 1
线性分类器(一定意义上,也可以叫做感知机) 是最简单也很有效的分类器形式.在一个线性分类器中,可以看到SVM形成的思路,并接触很多SVM的核心概念.
用一个二维空间里仅有两类样本的分类问题来举个小例子。如图所示
-C1和C2是要区分的两个类别,在二维平面中它们的样本如上图所示。中间的直线就是一个分类函数,它可以将两类样本完全分开。一般的,如果一个线性函数能够将样本完全正确的分开,就称这些数据是线性可分的,否则称为非线性可分的。
什么叫线性函数呢?在一维空间里就是一个点,在二维空间里就是一条直线,三维空间里就是一个平面,可以如此想象下去,如果不关注空间的维数,这种线性函数还有一个统一的名称——超平面(Hyper Plane)!
实际上,一个线性函数是一个实值函数(即函数的值是连续的实数),而我们的分类问题(例如这里的二元分类问题——回答一个样本属于还是不属于一个类别的问题)需要离散的输出值,例如用1表示某个样本属于类别C1,而用0表示不属于(不属于C1也就意味着属于C2),这时候只需要简单的在实值函数的基础上附加一个阈值即可,通过分类函数执行时得到的值大于还是小于这个阈值来确定类别归属。 例如我们有一个线性函数
g(x)=wx+b
我们可以取阈值为0,这样当有一个样本xi需要判别的时候,我们就看g(xi)的值。若g(xi)>0,就判别为类别C1,若g(xi)<0,则判别为类别C2(等于的时候我们就拒绝判断,呵呵)。此时也等价于给函数g(x)附加一个符号函数sgn(),即f(x)=sgn [g(x)]是我们真正的判别函数。
关于g(x)=wx+b这个表达式要注意三点:一,式中的x不是二维坐标系中的横轴,而是样本的向量表示,例如一个样本点的坐标是(3,8),则xT=(3,8) ,而不是x=3(一般说向量都是说列向量,因此以行向量形式来表示时,就加上转置)。二,这个形式并不局限于二维的情况,在n维空间中仍然可以使用这个表达式,只是式中的w成为了n维向量(在二维的这个例子中,w是二维向量,为了表示起来方便简洁,以下均不区别列向量和它的转置,聪明的读者一看便知);三,g(x)不是中间那条直线的表达式,中间那条直线的表达式是g(x)=0,即wx+b=0,我们也把这个函数叫做分类面。
实际上很容易看出来,中间那条分界线并不是唯一的,我们把它稍微旋转一下,只要不把两类数据分错,仍然可以达到上面说的效果,稍微平移一下,也可以。此时就牵涉到一个问题,对同一个问题存在多个分类函数的时候,哪一个函数更好呢?显然必须要先找一个指标来量化“好”的程度,通常使用的都是叫做“分类间隔”的指标。下一节我们就仔细说说分类间隔,也补一补相关的数学知识。
SVM入门(三)线性分类器Part 2
上回说到对于文本分类这样的不适定问题(有一个以上解的问题称为不适定问题),需要有一个指标来衡量解决方案(即我们通过训练建立的分类模型)的好坏,而分类间隔是一个比较好的指标。
在进行文本分类的时候,我们可以让计算机这样来看待我们提供给它的训练样本,每一个样本由一个向量(就是那些文本特征所组成的向量)和一个标记(标示出这个样本属于哪个类别)组成。如下:
Di=(xi,yi)
xi就是文本向量(维数很高),yi就是分类标记。
在二元的线性分类中,这个表示分类的标记只有两个值,1和-1(用来表示属于还是不属于这个类)。有了这种表示法,我们就可以定义一个样本点到某个超平面的间隔:
δi=yi(wxi+b)
这个公式乍一看没什么神秘的,也说不出什么道理,只是个定义而已,但我们做做变换,就能看出一些有意思的东西。
首先注意到如果某个样本属于该类别的话,那么wxi+b>0(记得么?这是因为我们所选的g(x)=wx+b就通过大于0还是小于0来判断分类),而yi也大于0;若不属于该类别的话,那么wxi+b<0,而yi也小于0,这意味着yi(wxi+b)总是大于0的,而且它的值就等于|wxi+b|!(也就是|g(xi)|)
现在把w和b进行一下归一化,即用w/||w||和b/||w||分别代替原来的w和b,那么间隔就可以写成
这个公式是不是看上去有点眼熟?没错,这不就是解析几何中点xi到直线g(x)=0的距离公式嘛!(推广一下,是到超平面g(x)=0的距离, g(x)=0就是上节中提到的分类超平面)
小Tips:||w||是什么符号?||w||叫做向量w的范数,范数是对向量长度的一种度量。我们常说的向量长度其实指的是它的2-范数,范数最一般的表示形式为p-范数,可以写成如下表达式
向量w=(w1, w2, w3,…… wn)
它的p-范数为
看看把p换成2的时候,不就是传统的向量长度么?当我们不指明p的时候,就像||w||这样使用时,就意味着我们不关心p的值,用几范数都可以;或者上文已经提到了p的值,为了叙述方便不再重复指明。
当用归一化的w和b代替原值之后的间隔有一个专门的名称,叫做几何间隔,几何间隔所表示的正是点到超平面的欧氏距离,我们下面就简称几何间隔为“距离”。以上是单个点到某个超平面的距离(就是间隔,后面不再区别这两个词)定义,同样可以定义一个点的集合(就是一组样本)到某个超平面的距离为此集合中离超平面最近的点的距离。下面这张图更加直观的展示出了几何间隔的现实含义:
H是分类面,而H1和H2是平行于H,且过离H最近的两类样本的直线,H1与H,H2与H之间的距离就是几何间隔。
之所以如此关心几何间隔这个东西,是因为几何间隔与样本的误分次数间存在关系:
其中的δ是样本集合到分类面的间隔,R=max ||xi|| i=1,...,n,即R是所有样本中(xi是以向量表示的第i个样本)向量长度最长的值(也就是说代表样本的分布有多么广)。先不必追究误分次数的具体定义和推导过程,只要记得这个误分次数一定程度上代表分类器的误差。而从上式可以看出,误分次数的上界由几何间隔决定!(当然,是样本已知的时候)
至此我们就明白为何要选择几何间隔来作为评价一个解优劣的指标了,原来几何间隔越大的解,它的误差上界越小。因此最大化几何间隔成了我们训练阶段的目标,而且,与二把刀作者所写的不同,最大化分类间隔并不是SVM的专利,而是早在线性分类时期就已有的思想。
cited from:http://blog.sciencenet.cn/blog-553254-731062.html
支持向量机 support vector machine的更多相关文章
- 支持向量机(Support Vector Machine)-----SVM之SMO算法(转)
此文转自两篇博文 有修改 序列最小优化算法(英语:Sequential minimal optimization, SMO)是一种用于解决支持向量机训练过程中所产生优化问题的算法.SMO由微软研究院的 ...
- 第八篇:支持向量机 (Support Vector Machine)
前言 本文讲解如何使用R语言中e1071包中的SVM函数进行分类操作,并以一个关于鸢尾花分类的实例演示具体分类步骤. 分析总体流程 1. 载入并了解数据集:2. 对数据集进行训练并生成模型:3. 在此 ...
- 支持向量机(Support Vector Machine,SVM)
SVM: 1. 线性与非线性 核函数: 2. 与神经网络关系 置信区间结构: 3. 训练方法: 4.SVM light,LS-SVM: 5. VC维 u-SVC 与 c-SVC 区别? 除参数不同外, ...
- 支持向量机SVM(Support Vector Machine)
支持向量机(Support Vector Machine)是一种监督式的机器学习方法(supervised machine learning),一般用于二类问题(binary classificati ...
- 6. support vector machine
1. 了解SVM 1. Logistic regression 与SVM超平面 给定一些数据点,它们分别属于两个不同的类,现在要找到一个线性分类器把这些数据分成两类.如果用x表示数据点,用y表示类别( ...
- 斯坦福第十二课:支持向量机(Support Vector Machines)
12.1 优化目标 12.2 大边界的直观理解 12.3 数学背后的大边界分类(可选) 12.4 核函数 1 12.5 核函数 2 12.6 使用支持向量机 12.1 优化目标 到目前为 ...
- 机器学习课程-第7周-支持向量机(Support Vector Machines)
1. 优化目标 在监督学习中,许多学习算法的性能都非常类似,因此,重要的不是你该选择使用学习算法A还是学习算法B,而更重要的是,应用这些算法时,所创建的大量数据在应用这些算法时,表现情况通常依赖于你的 ...
- 5. support vector machine
1. 了解SVM 1. Logistic regression回顾 Logistic regression目的是从特征中学习出一个0/1二分类模型,而这个模型是将特性的线性组合作为自变量,由于自变量的 ...
- [C7] 支持向量机(Support Vector Machines) (待整理)
支持向量机(Support Vector Machines) 优化目标(Optimization Objective) 到目前为止,你已经见过一系列不同的学习算法.在监督学习中,许多学习算法的性能都非 ...
随机推荐
- 0c-42-ARC模式下如何兼容非ARC的类
1.ARC模式下如何兼容非ARC的类 让程序兼容ARC和非ARC部分.转变为非ARC -fno-objc-arc 2.将MRC转换为ARC ARC也需要考虑循环引用问题:一端用strong,一端用we ...
- 查看Linux系统架构类型的5条常用命令
导读 很多时候我们都需要查看当前 Linux 系统是 32 位还是 64 位系统架构类型,本文中我将向大家推荐 5 条常用命令.无论你使用的是桌面版或是只装了文本界面的 Linux 环境,以下命令几乎 ...
- LeetCode39 Combination Sum
题目: Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C ...
- EntityFramework优缺点(转)
Entity Framework 是微软推荐出.NET平台ORM开发组件, 现在已放源代码. 以下我们来讨论一下优缺点和一些问题, 以下简称EF. 有兴趣可查询官网的Entity Framewo ...
- solr中竞价排名实现
转载:http://mxsfengg.iteye.com/blog/308335 通常,lucene只返回与用户查询相关的文档,搜索的结果,跟lucene对文档评分有关.而在现实的查询中,我们有些时候 ...
- onInterceptTouchEvent和onTouchEvent举例分析
首先自定义三个组件,其关系是:MyLayout在最上面,MySubLayout在MyLayout下面,MyView在MySubLayout下面. 一个点击事件进来,首先是DOWN动作,先是MyLayo ...
- 判断某个对象是不是DOM对象
在写js代码时有时需要判断某个对象是不是DOM对象,然后再进行后续的操作,这里我给出一种兼容各大浏览器,同时又算是比较稳妥的一种方法. 要判断一个对象是否DOM对象,首先想到的无非就是它是否具有DOM ...
- Stream Collector
// Accumulate names into a List List<String> list = people.stream().map(Person::getName).colle ...
- 房间声学原理与Schroeder混响算法实现
一.混响时间的计算与预测 所谓混响就是声音的直达声与反射声很紧凑的重合在一起时人耳所听到的声音,这个效果在语音的后期处理时特别有用.能产生混响最常见的场景就是房间内,尤其是空旷的房间中. 混响有直达声 ...
- codeforces 680B B. Bear and Finding Criminals(水题)
题目链接: B. Bear and Finding Criminals //#include <bits/stdc++.h> #include <vector> #includ ...