说实话,凡是涉及到要证明的东西.理论,便一般不是怎么好惹的东西。绝大部分时候,看懂一个东西不难,但证明一个东西则需要点数学功底,进一步,证明一个东西也不是特别难,难的是从零开始发明创造这个东西的时候,则显艰难(因为任何时代,大部分人的研究所得都不过是基于前人的研究成果,前人所做的是开创性工作,而这往往是最艰难最有价值的,他们被称为真正的先驱。牛顿也曾说过,他不过是站在巨人的肩上。你,我则更是如此)。

正如陈希孺院士在他的著作《数理统计学简史》的第4章、最小二乘法中所讲:在科研上诸多观念的革新和突破是有着很多的不易的,或许某个定理在某个时期由某个人点破了,现在的我们看来一切都是理所当然,但在一切没有发现之前,可能许许多多的顶级学者毕其功于一役,耗尽一生,努力了几十年最终也是无功而返。

话休絮烦,要证明一个东西先要弄清楚它的根基在哪,即构成它的基础是哪些理论。

1 线性学习器

1.1 感知机算法

这个感知机算法是1956年提出的,年代久远,依然影响着当今,当然,可以肯定的是,此算法亦非最优,后续会有更详尽阐述。不过,有一点,你必须清楚,这个算法是为了干嘛的:不断的训练试错以期寻找一个合适的超平面(是的,就这么简单)。
23 机器学习 - 证明SVM_机器学习
下面,举个例子。如下图所示,凭我们的直觉可以看出,图中的红线是最优超平面,蓝线则是根据感知机算法在不断的训练中,最终,若蓝线能通过不断的训练移动到红线位置上,则代表训练成功。
23 机器学习 - 证明SVM_机器学习_02
既然需要通过不断的训练以让蓝线最终成为最优分类超平面,那么,到底需要训练多少次呢?Novikoff定理告诉我们当间隔是正的时候感知机算法会在有限次数的迭代中收敛,也就是说Novikoff定理证明了感知机算法的收敛性,即能得到一个界,不至于无穷循环下去。
23 机器学习 - 证明SVM_机器学习_03
23 机器学习 - 证明SVM_# 机器学习_04
23 机器学习 - 证明SVM_机器学习_05
23 机器学习 - 证明SVM_# 机器学习_06

2 非线性学习器

2.1 Mercer定理

23 机器学习 - 证明SVM_机器学习_07

3 损失函数

在前面有这么一句话“支持向量机(SVM)是90年代中期发展起来的基于统计学习理论的一种机器学习方法,通过寻求结构化风险最小来提高学习机泛化能力,实现经验风险和置信范围的最小化,从而达到在统计样本量较少的情况下,亦能获得良好统计规律的目的。”但初次看到的读者可能并不了解什么是结构化风险,什么又是经验风险。要了解这两个所谓的“风险”,还得又从监督学习说起。

监督学习实际上就是一个经验风险或者结构风险函数的最优化问题。风险函数度量平均意义下模型预测的好坏,模型每一次预测的好坏用损失函数来度量。它从假设空间F中选择模型f作为决策函数,对于给定的输入X,由f(X)给出相应的输出Y,这个输出的预测值f(X)与真实值Y可能一致也可能不一致,用一个损失函数来度量预测错误的程度。损失函数记为L(Y, f(X))。

常用的损失函数有以下几种(基本引用自《统计学习方法》):
23 机器学习 - 证明SVM_# 机器学习_08
23 机器学习 - 证明SVM_# 机器学习_09
如此,SVM有第二种理解,即最优化+损失最小,或如@夏粉_百度所说“可从损失函数和优化算法角度看SVM,boosting,LR等算法,可能会有不同收获”。

OK,关于更多统计学习方法的问题,请参看此文。

关于损失函数,如下文读者评论中所述:可以看看张潼的这篇《Statistical behavior and consistency of classification methods based on convex risk minimization》。各种算法中常用的损失函数基本都具有fisher一致性,优化这些损失函数得到的分类器可以看作是后验概率的“代理”。此外,张潼还有另外一篇论文《Statistical analysis of some multi-category large margin classification methods》,在多分类情况下margin loss的分析,这两篇对Boosting和SVM使用的损失函数分析的很透彻。

4 最小二乘法

4.1 什么是最小二乘法?

既然本节开始之前提到了最小二乘法,那么下面引用《正态分布的前世今生》里的内容稍微简单阐述下。

我们口头中经常说:一般来说,平均来说。如平均来说,不吸烟的健康优于吸烟者,之所以要加“平均”二字,是因为凡事皆有例外,总存在某个特别的人他吸烟但由于经常锻炼所以他的健康状况可能会优于他身边不吸烟的朋友。而最小二乘法的一个最简单的例子便是算术平均。

最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。用函数表示为:
23 机器学习 - 证明SVM_# 机器学习_10

使误差「所谓误差,当然是观察值与实际真实值的差量」平方和达到最小以寻求估计值的方法,就叫做最小二乘法,用最小二乘法得到的估计,叫做最小二乘估计。当然,取平方和作为目标函数只是众多可取的方法之一。

最小二乘法的一般形式可表示为:
23 机器学习 - 证明SVM_机器学习_11
有效的最小二乘法是勒让德在 1805 年发表的,基本思想就是认为测量中有误差,所以所有方程的累积误差为:
23 机器学习 - 证明SVM_机器学习_12
我们求解出导致累积误差最小的参数即可:
23 机器学习 - 证明SVM_机器学习_13
勒让德在论文中对最小二乘法的优良性做了几点说明:

  • 最小二乘使得误差平方和最小,并在各个方程的误差之间建立了一种平衡,从而防止某一个极端误差取得支配地位
  • 计算中只要求偏导后求解线性方程组,计算过程明确便捷
  • 最小二乘可以导出算术平均值作为估计值

对于最后一点,从统计学的角度来看是很重要的一个性质。推理如下:假设真值为 θ, x1,⋯,xn为n次测量值, 每次测量的误差为ei=xi−θ,按最小二乘法,误差累积为:
23 机器学习 - 证明SVM_机器学习_14
23 机器学习 - 证明SVM_# 机器学习_15
由于算术平均是一个历经考验的方法,而以上的推理说明,算术平均是最小二乘的一个特例,所以从另一个角度说明了最小二乘方法的优良性,使我们对最小二乘法更加有信心。

最小二乘法发表之后很快得到了大家的认可接受,并迅速的在数据分析实践中被广泛使用。不过历史上又有人把最小二乘法的发明归功于高斯,这又是怎么一回事呢。高斯在1809年也发表了最小二乘法,并且声称自己已经使用这个方法多年。高斯发明了小行星定位的数学方法,并在数据分析中使用最小二乘方法进行计算,准确的预测了谷神星的位置。

说了这么多,貌似跟本文的主题SVM没啥关系呀,别急,请让我继续阐述。本质上说,最小二乘法即是一种参数估计方法,说到参数估计,咱们得从一元线性模型说起。

4.2 最小二乘法的解法

什么是一元线性模型呢? 请允许我引用这里的内容,先来梳理下几个基本概念:

  • 监督学习中,如果预测的变量是离散的,我们称其为分类(如决策树,支持向量机等),如果预测的变量是连续的,我们称其为回归。
  • 回归分析中,如果只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。
  • 如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析。
  • 对于二维空间线性是一条直线;对于三维空间线性是一个平面,对于多维空间线性是一个超平面…

对于一元线性回归模型, 假设从总体中获取了n组观察值(X1,Y1),(X2,Y2), …,(Xn,Yn)。对于平面中的这n个点,可以使用无数条曲线来拟合。要求样本回归函数尽可能好地拟合这组值。综合起来看,这条直线处于样本数据的中心位置最合理。

选择最佳拟合曲线的标准可以确定为:使总的拟合误差(即总残差)达到最小。有以下三个标准可以选择:

  1. 用“残差和最小”确定直线位置是一个途径。但很快发现计算“残差和”存在相互抵消的问题。
  2. 用“残差绝对值和最小”确定直线位置也是一个途径。但绝对值的计算比较麻烦。
    最小二乘法的原则是以“残差平方和最小”确定直线位置。用最小二乘法除了计算比较方便外,得到的估计量还具有优良特性。这种方法对异常值非常敏感。

最常用的是普通最小二乘法( Ordinary Least Square,OLS):所选择的回归模型应该使所有观察值的残差平方和达到最小,即采用平方损失函数。

我们定义样本回归模型为:
23 机器学习 - 证明SVM_# 机器学习_16
其中ei为样本(Xi, Yi)的误差。

接着,定义平方损失函数Q:
23 机器学习 - 证明SVM_机器学习_17
23 机器学习 - 证明SVM_机器学习_18
23 机器学习 - 证明SVM_机器学习_19
根据数学知识我们知道,函数的极值点为偏导为0的点。

解得:
23 机器学习 - 证明SVM_# 机器学习_20
这就是最小二乘法的解法,就是求得平方损失函数的极值点。自此,你看到求解最小二乘法与求解SVM问题何等相似,尤其是定义损失函数,而后通过偏导求得极值。

OK,更多请参看陈希孺院士的《数理统计学简史》的第4章、最小二乘法。

5 SMO算法

在上文中,我们提到了求解对偶问题的序列最小最优化SMO算法,但并未提到其具体解法。首先看下最后悬而未决的问题:
23 机器学习 - 证明SVM_机器学习_21
等价于求解:
23 机器学习 - 证明SVM_机器学习_22
1998年,Microsoft Research的John C. Platt在论文《Sequential Minimal Optimization:A Fast Algorithm for Training Support Vector Machines》中提出针对上述问题的解法:SMO算法,它很快便成为最快的二次规划优化算法,特别是在针对线性SVM和数据稀疏时性能更优。

接下来,咱们便参考John C. Platt的这篇文章来看看SMO的解法是怎样的。

5.1 SMO算法的推导

23 机器学习 - 证明SVM_# 机器学习_23
23 机器学习 - 证明SVM_机器学习_24
23 机器学习 - 证明SVM_机器学习_25
23 机器学习 - 证明SVM_机器学习_26
23 机器学习 - 证明SVM_# 机器学习_27
23 机器学习 - 证明SVM_机器学习_28
23 机器学习 - 证明SVM_# 机器学习_29
23 机器学习 - 证明SVM_机器学习_30
23 机器学习 - 证明SVM_机器学习_31
23 机器学习 - 证明SVM_机器学习_32

5.2 SMO算法的步骤

23 机器学习 - 证明SVM_# 机器学习_33
那么在每次迭代中,如何更新乘子呢?引用这里的两张PPT说明下:
23 机器学习 - 证明SVM_机器学习_34
23 机器学习 - 证明SVM_# 机器学习_35
23 机器学习 - 证明SVM_机器学习_36

5.3 SMO算法的实现

行文至此,我相信,SVM理解到了一定程度后,是的确能在脑海里从头至尾推导出相关公式的,最初分类函数,最大化分类间隔,max1/||w||,min1/2||w||^2,凸二次规划,拉格朗日函数,转化为对偶问题,SMO算法,都为寻找一个最优解,一个最优分类平面。一步步梳理下来,为什么这样那样,太多东西可以追究,最后实现。如下图所示:
23 机器学习 - 证明SVM_机器学习_37
至于下文中将阐述的核函数则为是为了更好的处理非线性可分的情况,而松弛变量则是为了纠正或约束少量“不安分”或脱离集体不好归类的因子。

台湾的林智仁教授写了一个封装SVM算法的libsvm库,大家可以看看,此外这里还有一份libsvm的注释文档。

除了在这篇论文《fast training of support vector machines using sequential minimal optimization》中platt给出了SMO算法的逻辑代码之外,这里也有一份SMO的实现代码,大家可以看下。

6 SVM的应用

或许我们已经听到过,SVM在很多诸如文本分类,图像分类,生物序列分析和生物数据挖掘,手写字符识别等领域有很多的应用,但或许你并没强烈的意识到,SVM可以成功应用的领域远远超出现在已经在开发应用了的领域。

6.1 文本分类

一个文本分类系统不仅是一个自然语言处理系统,也是一个典型的模式识别系统,系统的输入是需要进行分类处理的文本,系统的输出则是与文本关联的类别。由于篇幅所限,其它更具体内容本文将不再详述。

OK,本节虽取标题为证明SVM,但聪明的读者们想必早已看出,其实本部分并无多少证明部分(特此致歉),怎么办呢?可以参阅《支持向量机导论》一书,此书精简而有趣。本节完。