机器学习(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.14525093.html中的阐述,使(公式三)中的 f(x) 的预测误差最小的问题转化成期望误差最小、经验风险最小,最后在统计学习理论中又转化为结构风险最小(Structural Risk Minimization, SRM)。而实现SRM的思路之一就是设计预测函数集的某种结构使每个子集中都能取得最小的经验风险(如使训练误差为0),然后只需选择适当的子集使置信范围最小,则这个子集中使经验风险最小的函数就是最优函数。SVM方法实际上就是这种思想的具体实现,它是对SRM的近似。说了半天,终于和上次的内容连接上了。但是,为了求解SRM这个最小化问题,还得将它转化成数学形式。
SVM方法是从线性可分情况下的最优分类面提出的,它是实现统计学习理论思想的方法。什么是最优分类面呢?这要从最优分类线说起。所谓最优分类线就是要求分类线不但能将两类无错误地分开,而且要使两类的分类间隔最大。前者是保证经验风险最小(如使训练误差为0),而使分类间隔最大实际上就是使推广性的界中的置信范围最小,从而使真实风险最小。推广到高维空间,最优分类线就成为最优分类面。
那么如何构造这个最优分类面呢?方法有 2 个:平分最近点法和最大间隔法。有趣的是,这两个方法殊途同归,它们求解得到的是同一个超平面(由三个定理联合起来证明了这个结论)。由这三个定理可知,这两个方法与一个最优化问题求解方法等价,这个方法就称为“线性可分支持向量分类机”。其实,这个分类机是将最大间隔法求解最优分类面的最优化问题转化为其对偶问题,从而通过求解相对简单的对偶问题来求解原分类问题的算法。随后引入松弛变量和惩罚因子来解决非线性分类问题,并且允许一定的分类错误(软间隔),最终得到非线性软间隔的标准的 C-支持向量机(C-SVC)。其中的巧妙之处就在于把一个复杂的最优化问题的求解简化为对原有样本数据的内积运算。我们要做的就是选择适当的核函数及其参数、惩罚因子就可以了。
概括地说,SVM就是首先通过用内积函数定义的非线性变换将输入空间变换到一个高维空间,然后再在这个空间中求(广义)最优分类面的分类方法。
那么,如何通过计算机来求解这个内积运算呢?且听下回分解!下次会介绍选块算法、分解算法,并重点介绍由分解算法改进得到的最经典的 SMO 算法。
目录
1.提出背景
2.算法思想
3.算法描述
a) Chunking算法
b) Qsuna算法
4.算法优越性讨论
a) 人工神经网络
b) 支持向量机
c) ANN的缺点
d) VM的优点
5.主要应用领域
1.提出背景
支持向量机SVM ( Support Vector Machines)是由Vanpik领导的AT&TBell实验室研究小组在1963年提出的一种新的非常有潜力的分类技术, SVM是一种基于统计学习理论的模式识别方法,主要应用于模式识别领域。由于当时这些研究尚不十分完善,在解决模式识别问题中往往趋于保守,且数学上比较艰涩,因此这些研究一直没有得到充的重视。直到90年代,一个较完善的理论体系—统计学习理论 ( StatisticalLearningTheory,简称SLT) 的实现和由于神经网络等较新兴的机器学习方法的研究遇到一些重要的困难,比如如何确定网络结构的问题、过学习与欠学习问题、局部极小点问题等,使得SVM 迅速发展和完善,在解决小样本、非线性及高维模式识别问题中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中,从此迅速的发展起来。
2.算法思想
支撑向量机主要采用了分解算法思想,它将QP问题分解为一系列规模较小的子问题,希望通过对子问题的迭代求解,得到QP问题的全局最优解。这样解决了存储空间受限的问题,另一方面,要使算法可行,还必须解决诸如分解策略,迭代算法的收敛性,收敛条件,优化时间,以及如何利用解的稀疏性来优化加快速度等问题。
SVM的关键在于核函数,这也是最喜人的地方。低维空间向量集通常难于划分,解决的方法是将它们映射到高维空间。但这个办法带来的困难就是计算复杂度的增加,而核函数正好巧妙地解决了这个问题。也就是说,只要选用适当的核函数,我们就可以得到高维空间的分类函数。在SVM理论中,采用不同的核函数将导致不同的SVM算法
3.算法描述
3.1 Chunking算法
Chunking算法是V.Va pnik等人提出的一种求解QP问题的算法。它可看成是一种不完全的分解算法。算法将原先的QP问题分解成一系列待优化的子问题。任何一个子问题都维护一个与其相关的变量的子集,在优化过程中保持其他的变量值不变。子问题维护所有上一步优化后得到的非零变量,及其它违反KKT条件最严重的M个变量。这样经过反复迭代优化,最终将得到QP问题的全局最优解。
算法描述
1.选择初始子问题,包括选择问题的规模nl,待优化的变量子集及每次添加进优化子集的违反KKT条件的变量数目M。
2.采 用一种QP优化器求解上述子问题,得到一个分类器。
3.用剩余训练样本测试上述分类器,采用KKT条件评价测试结果。如果所有变量都满足KKT条件,则结束训练;否则,选择违反KKT条件最剧烈的M个变量,并与上一步优化得到的非零值变量构成待优化子问题,重复第2步。
3.2 Osuna算法
199 7年 ,E dgarOs una[49.50]提出一个求解SVM中问题的分解算法,既是把一个大型QP问题分解成一个小型QP问题组成的序列,在上一步的QP子问题中至少加入一个违反KKT条件的点而构成下一步的QP子问题,每一步优化目标函数的值并始终保持满足约束条件,从而使这些QP子问题构成的序列收敛,直至最后所有的点都满足KKT条件,也即得到了原问题的解。
4.算法优越性讨论
本部分主要讨论了支持向量机与目前非常流行的人工神经网络相比,具有的优越性,仅供参考。
4.1 人工神经网络
神经网络是基于传统统计学的基础上的。传统统计学研究的内容是样本无穷大时的渐进理论,即当样本数据趋于无穷多时的统计性质,而实际问题中样本数据往往是有限的。因此,假设样本数据无穷多,并以此推导出的各种算法很难在样本数据有限时取得理想的应用效果。
4.2 支持向量机
支持向量机是基于统计学理论的基础上的,可以克服神经网络难以避免的问题。通过支持向量机在逼近能力方面与BP网络仿真结果的比较表明,支持向量机具有较强的逼近能力和泛化能力。
4.3 人工神经网络存在的一些缺陷
人工神经网络是目前研究较多的交叉学科,由于通过选择适当的隐单元数和网络层次,前馈网络能以任意精度逼近非线性函数(Funahashi,1989),因此神经网络技术被广泛应用到工业过程的建模与控制中,并取得了巨大成功。尽管如此,神经网络仍存在一些缺陷:
(1)网络结构需要事先指定或应用启发算法在训练过程中修正,这些启发算法难以保证网络结构的最优化;
(2)网络权系数的调整方法存在局限性;
(3)神经网络易陷入局部最优,有些甚至无法得到最优解;
(4)过分依赖学习样本,即模型性能的优劣过分依赖于模型训练过程中样本数据,而大多数情况下,样本数据是有限的。除次,许多实际问题中的输入空间是高维的,样本数据仅是输入空间中的稀疏分布,即使能得到高质量的训练数据,数据量必然很大。但是样本数要是很多的话,必然使训练时间大大增加;
(5)目前尚无一种理论能定量的分析神经网络的训练过程的收敛速度,及收敛速度的决定条件,并对其加以控制;
(6)神经网络的优化目标是基于经验的风险最小化,这就不能保证网络的泛化能力。尽管存在以上问题,神经网络仍然取得了很多成功应用,其原因在于,神经网络的设计与设计者有很大的关系。设计者若在网络设计过程中有效的利用了自己的经验知识和先验知识,可能会得到较理想的网络结构。因此,神经网络系统的优劣是因人而异的。
4.4 支持向量机的新特点
支持向量机是以统计学理论为基础的,因而具有严格的理论和数学基础,可以不象神经网络的结构设计需要依赖于设计者的经验知识和先验知识。支持向量机与神经网络的学习方法相比,支持向量机具有以下特点:
(1)支持向量机是基于结构风险最小化(SRM,structuralriskminimization)原则,保证学习机器具有良好的泛化能力;
(2)解决了算法复杂度与输入向量密切相关的问题;
(3)通过引用核函数,将输入空间中的非线性问题映射到高维特征空间中在高维空间中构造线性函数判别;
(4)支持向量机是以统计学理论为基础的,与传统统计学习理论不同。它主要是针对小样本情况,且最优解是基于有限的样本信息,而不是样本数趋于无穷大时的最优解;
(5)算法可最终转化为凸优化问题,因而可保证算法的全局最优性,避免了神经网络无法解决的局部最小问题;
(6)支持向量机有严格的理论和数学基础,避免了神经网络实现中的经验成分。
5.主要应用领域
现在已经在许多领域,如:生物信息 学,文本和手写识别等,都取得了成功的应用。
Solu兄要我写点什么,可实在知道的很少,只好写写自己看书看论文的经过。 所以这一切是从SVM开始的。我喜欢通过一些直观的东西理解,所以下面的讨论就集中在二类问题上(y=-1 or +1),并且样本数据是二维的(X=(x1,x2))。平面上的点的二分类问 题。我们的目标是从一堆训练数据(比如L个(xi,yi)对,这里还要做限制,就是这些数据是 来自一个潜在分布,并且相互之间是独立的,这些限制对于Vapnik证明的那些界是必要的 )中学到一些什么,我们把目标再定低一点,希望学到给定样本数据Xt,如何推出它的类别 Yt。 该如何处理这种问题呢?一种简单的方法就是我们假定这些数据(或其背后的分布)来 自于(或者足够接近)某个候选模型集,这样问题就进一步简化了,变成了一个搜索问题 (如何在某个候选集中选一个模型使得其能够较好地解释训练数据)。看来好像问题已经 简化得很厉害了,但这里还有两个问题,首先到底在一个什么样的模型集中搜索,其次什 么是“比较好的解释”,前者是模型复杂度的问题,也就是正则化的问题,后者则是损失 函数的问题。(当然这里还有很多很多的问题,如先验知识、数据中是否有噪声、样本数 据的各维中是否有冗余是否相关等等)。 我们先看看模型复杂度,无论是奥姆斯剃刀理论还是“杀鸡焉用宰牛刀”都告诉我们, 对于简单的问题不要用太复杂的方法。但标准是什么呢?如何分辨指甲刀和西瓜刀呢?通 常我们要看这把刀能干什么(并且是至多能做什么)。这里要解决的问题是分类,那么要 看的就是一个模型集的分类能力(给定某个样本数据x,给出其相应的类别,也就是说所谓“分类”可以看作对样本数据的解释)。VC维就是描述这种能力的一种度量。一个模型集 是由很多模型组成的,每个模型可以对样本数据做出一种解释(也就是给定任意样本数据 使用该模型可以给出一个确定的类别),一个模型集的VC维是一个正整数,表示使用这个 模型集可以“至多”“任意”解释的样本数据的个数。例如一个模型集的VC维是3,就表示 这个模型集可以“至多”“任意”解释3个样本数据,所谓“任意解释”,就是给定3个样 本数据(x1,x2,x3),我们可以在这个模型集中找到2^3=8个模型,每个模型分别 给出不同的类别给这3个样本数据(如,模型f1将x1,x2,x3,分类为-1-1-1,f2为-1-1+1,.. .,f8为+1+1+1),所谓“至多”就是我们只能“找到”(也就是说不要求任意3个样本数据 可以被任意解释)3个样本数据被任意解释而无法找到4个。 VC维的意义主要 是在概念上而非计算上,因为通常很多模型的VC维都是无法求得的。 但也有一些特殊的模型集的VC维是可以直接求得的,比如n维空间的所有“超平面”的 VC维就是n+1。我们回到上面的问题设定,我们考虑2维平面上所有的直线组成的模型集( 易见每条直线都可以将整个平面分为两部分,+1类,-1类,线上的部分可以随便 算到+1类或-1类),我们发现我们可以很容易找到3个点(样本数据),只要这3个点不共 线,我们便可以找到8条直线给出这3个点的所有的类别可能。但 4个点却无法找到,可以 证明n维空间的所有超平面的VC维就是n+1。 这样一来使用超平面就可以方便的控制模型的复杂度,但这里存在一个问题,那就是这 里的VC维是与样本数据的维数相关的,这为后面使用核方法就造成了困难。所以考虑另一 种相近的模型集,这个模型集里的模型是一个个“超平板”--带有确定厚度的 超平面,每个“超平板”将空间分为两部分,自己再占一部分,自己占的这部分不做解释 (拒绝分类)(由于VC维是能够“找到”若干个样本,所以尽管不是对整个样本空间进行 解释,但并不影响VC维的计算。那这样做影响了什么呢?这是个问题)。并且Vapnik 证明了这个板的厚度是这个模型集的VC维的上界,从而控制模型集的复杂度可以通过控制 板的厚度来实现。这是一个重要的进步,这个模型集的复杂度与样本数据的维数无关了, 也使得SVM使用kernel trick成为可能。 为什么厚的板的VC维就小呢?Learing with kernels里面有个很好的图。简单起见,我 们去掉超平面的那个常数项,考虑2维平面,也就是所有的超平板都过原点,假定样本数据 都分布在半径为R的以原点为圆心的圆内,可见随着板的厚度的增加,我们就没有办法再找 到3个点能够被任意解释了。也就是说尽管在一个很高维的空间我们仍旧可以通过控制板的 厚度,使得我们的模型集的复杂度不是很大。(但这里有对数据分布的限制,那个R,这会 造成什么问题呢? 这是个问题)。 这个板的厚度也就是通常提到的分类面的margin,对于这个margin还有很多其他的解释 ,如margin引入了robust啊等等,但我觉得对于SVM关键是维数无关。
前面提到一个分类器的训练包含两个问题损失函数以及正则化(很多监督学习算法的目 标函数也都是不同的损失函数与不同的正则化项的组合)。前者是衡量当前候选分类器在 训练数据上的性能(对应贝叶斯方法中的似然函数),后者则是衡量当前学习器所来自的 模型集的复杂度(对应贝叶斯方法中的先验概率)。Vapnik关于分类器的推广能力的界也 就是这两部分,也就是说如果我们能在一个非常简单的模型集中找到一个分类器,使得其 能非常好地解释训练数据(具有很小的损失),那么这个分类器将会以很大的概率在未来 的数据上表现很好。这也就引出了Vapnik的结构风险最小化,所谓结构风险最小化也就是 首先确定一组嵌套的模型集(F1包含于F2。。。FN),并且随着下标的增加模型集的VC维也 随之增加,也就是从模型集F1开始模型集变得越来越复杂。我们从每个模型集中选出一个 分类器(f1,f2,...,fN),使得每个分类器均在各自的模型集中使得损失函数最小。这样 我们就同时获得上面两个问题(模型复杂度以及候选分类器在训练集上的损失)的答案。 利用Vapnik的界在模型复杂度与训练集上的表现进行折中,我们就可以找到一个最佳的分 类器了。 这个指导原则其实也可以从“奥姆斯剃刀理论(如无必要勿增实体)”来解释。 但要找到能够实现结构风险最小化的算法是很困难的,Vapnik找了二十多年(我的估计 )。最后找到了SVM,并且SVM也成了最好的分类算法之一,但戏剧化的是:SVM为什么会有 如此优异的性能却并不是前面的margin theory以及结构风险最小化所能解释的。直到今天 这个问题似乎还不是很清楚,后面我还想稍微(我知道的非常有限)提一些这方面的工作 。 实现结构风险最小化存在两个困难,首先如前面提过的大多数的模型集的VC维是无法得 到的,其次便是这一组嵌套的模型集还应当足够的复杂(也就是有足够的能力去解释复杂 的数据)。前面的一个问题使用线性模型集可以得到其相应的VC维,并且通过使用margin ,我们还可以得到一个维数无关的对于模型集的VC维的估计。后面一个问题的答案则要由 核方法(kernel methods)来回答。 线性模型集无法处理线性不可分的情况,如当年的感知器无法处理异或问题,从而使得 神经网络沉寂多年。所谓异或问题,假设4个样本点,+1类为点(1,1)和点(-1,-1),-1类为 点点(-1,1) 和点(1,-1),可见从所有2维平面上的直线中寻找,我们也无法找到一条直 线能够解决到这样的问题(使得两类样本分别在直线的两侧)。 为了能够处理线性不可分的情况,我们把样本数据映射到更高维的空间去(x->ph(x), 简单起见,我们假设x在d维欧氏空间,ph(x)在D维欧氏空间,D>d,ph(x)所在的空间常被 称之为“特征空间”),这时有个Cover's Theorem,这个定理保证在维度越高数据越可能 是线性可分。也就是我们将在这个高维空间寻找超平面,希望这个超平面能够分类训练数 据(使得两类样本分别在直线的两侧)。但空间的维数越高,所使用的超平面集的VC维就 越大。但这时上面的margin theory就可以发挥作用了,我们不使用超平面,而使用超平板 集,只要这些板的厚度足够,我们依旧可以控制模型集的VC维(复杂度)。 那么直接使用某个函数ph(.)进行映射,之后在ph(.)的空间中寻找最厚的并且能正确分 类训练数据的超平板,不就可以了吗?困难之处在于,由于往往我们需要将训练数据映射 到相当高维的空间(比如手写数字识别中使用5阶多项式就相当于将数据映射到了一个10^ 10的高维空间),从而使得计算具体的ph(x)变得非常困难。 无论“奥姆斯剃刀理论”或者“没有免费的午餐(凡事都要付出代价)”,都告诉我们 别做多余的事,仔细研究我们面临的问题(将数据映射到高维空间,寻找具有最大厚度的 超平面,使用这个超平面对将来的数据进行分类),我们其实不需要高维空间数据具体的 值(即我们不需要确切的ph(x)),我们只需要知道的是任意两个输入空间的数据Xi与Xj映 射到高维空间后他们之间的内积(也就是 < ph(Xi), ph(Xj)>,内积是一个标量,可以看 作是两个向量,ph(Xi)与 ph(Xj),之间的相似程度)。并且我们发现数学中有一类双变元 函数就具有这样的特性(k(Xi, Xj)= < ph(Xi), ph(Xj)>),这样一来我们就不需要去考虑 具体映射(ph(x))的形式了,我们只需要知道通过使用核函数(前面的那个双变元函数) 就可以得到数据被映射到高维空间后的内积。 这样一来,只要一个学习算法只需要知道数据间的内积,那么他就可以通过使用核函数 从而被核化,从而就有了核PCA,核LDA等等一大批kernel methods,也成就了Scholkopf, Smola等人。 仍旧是“没有免费的午餐”,我们不去求具体的映射(ph(x)),那么我们付出的代价 是什么呢?不知道具体的映射,仅知道任意向量间的内积,使得我们无法知道向量与原点 的关系,但这一点对于我们寻找超平面划分数据是没有影响的。 至此SVM产生所面临的困难全被扫除了。有趣的是关于核函数的文章是1990发的,92年 Vapnik提出了SVM,不知kernel trick是不是老瓦的最后障碍。 放假在家手边资料很少,所以很多都是信口开河,大家要有所警惕啊