学习July博文总结——支持向量机(SVM)的深入理解(下)
来源:互联网 发布:云计算的概念? 编辑:程序博客网 时间:2024/06/05 22:34
接上篇博文《学习July博文总结——支持向量机(SVM)的深入理解(上) 》;
三、证明SVM
凡是涉及到要证明的内容和理论,一般都不是怎么好惹的东西。绝大部分时候,看懂一个东西不难,但证明一个东西则需要点数学功底;进一步,证明一个东西也不是特别难,难的是从零开始发明创造这个东西的时候,则显艰难。因为任何时代,大部分人的研究所得都不过是基于前人的研究成果,前人所做的是开创性工作,而这往往是最艰难最有价值的,他们被称为真正的先驱。牛顿也曾说过,他不过是站在巨人的肩上。你,我则更是如此。正如陈希孺院士在他的著作《数理统计学简史》的第4章、最小二乘法中所讲:在科研上诸多观念的革新和突破是有着很多的不易的,或许某个定理在某个时期由某个人点破了,现在的我们看来一切都是理所当然,但在一切没有发现之前,可能许许多多的顶级学者毕其功于一役,耗尽一生,努力了几十年最终也是无功而返。
话休絮烦,要证明一个东西先要弄清楚它的根基在哪,就是明白构成它的基础是哪些理论。以下内容基本是上文中未讲到的一些定理的证明,包括其背后的逻辑、来源背景等内容。
1. 线性学习器
感知机算法
感知机算法是1956年提出的,年代久远,依然影响着当今,当然,可以肯定的是,此算法亦非最优,后续会有更详尽阐述。
不过有一点必须清楚,这个算法的作用很简单:不断的训练试错,以期寻找一个合适的超平面。
感知机算法的伪代码如下所示:
给定线性可分的数据集
S 和学习率η∈R+ ;
w0←0;b0←0;k←0
R←maxi≤i≤l∥xi∥
重复:
for i=1 to l
if yi[(wk⋅xi)+bk]≤0then
wk+1←wk+ηyixi
bk+1←bk+ηyiR2
k←k+1
end if
end for
直到在for循环中没有错误发生
返回(wk,bk) ,这里k是错误次数
下面举个例子:
图3.1 感知机算法示例
如上图3.1所示,凭我们的直觉可以看出,图中的红线是最优超平面,蓝线则是根据感知机算法在不断的训练中,最终,若蓝线能通过不断的训练移动到红线位置上,则代表训练成功。
既然需要通过不断的训练以让蓝线最终成为最优分类超平面,那么,到底需要训练多少次呢?这个问题可以用Novikoff定理解释。
Novikoff定理:如果分类超平面存在, 仅需在序列
S 上迭代几次,在界为(2Rγ)2 的错误次数下就可以找到分类超平面,算法停止。
-R=max1≤i≤l∥xi∥
-γ :扩充间隔(即前文第一章中提到的最大分类间隔;根据误分次数公式可知,迭代次数与对应于扩充(包括偏置)权重的训练集的间隔有关)
Novikoff定理告诉我们当间隔是正的时候感知机算法会在有限次数的迭代中收敛,也就是说Novikoff定理证明了感知机算法的收敛性,即能得到一个界,不至于无穷循环下去。
后续怎么推导出最大分类间隔请回到本文第一、二章,此处不重复。
同时有一点得注意:感知机算法虽然可以通过简单迭代对线性可分数据生成正确分类的超平面,但不是最优效果,那怎样才能得到最优效果呢,就是上文中第一部分所讲的寻找最大分类间隔超平面。此外,Novikoff定理的证明请见这里。
2. 非线性学习器
Mercer定理
Mercer定理:如果函数K是
那么如果K是一个有效核函数(也称为Mercer核函数),那么当且仅当对于训练样例
关于正定与半正定矩阵,内容基本上是大学矩阵论中的内容,可以重新复习一下。下面给出一些正定矩阵和半正定矩阵的简单介绍。
正定矩阵:设
M 是n 阶方阵,如果对任何非零向量z ,都有zTMz>0 ,其中zT 表示z 的转置,就称M 正定矩阵。正定矩阵的判定定理:
定理1:对称阵A 为正定的充分必要条件是:A 的特征值全为正。
定理2:对称阵A 为正定的充分必要条件是:A 的各阶顺序主子式都为正。
定理3:任意阵A 为正定的充分必要条件是:A 合同于单位阵。
正定矩阵的性质:
性质1:正定矩阵的任一主子矩阵也是正定矩阵。
性质2:若A 为n 阶对称正定矩阵,则存在唯一的主对角线元素都是正数的下三角阵L ,使得A=LLT ,此分解式称为 正定矩阵的楚列斯基(Cholesky)分解。
性质3:若A 为n 阶正定矩阵,则A 为n 阶可逆矩阵。
半正定矩阵的概念与正定矩阵比较相似:
半正定矩阵:一个
n×n 的埃尔米特矩阵M 是正定的,当且仅当对于每个非零的复向量z ,都有zTMz>0 ,则称M 为正定矩阵,其中zT 表示z 的转置矩阵。当zTMz>0 弱化为zTM≥0 时,称M 是半正定矩阵;半正定矩阵的判定:若矩阵
A 的特征值大于等于0,则半正定。否则矩阵A 为非正定。
Mercer定理的证明在下面的网址中可以查询:
http://ftp136343.host106.web522.com/a/biancheng/matlab/2013/0120/648.html
3. 损失函数
支持向量机(SVM)是90年代中期发展起来的基于统计学习理论的一种机器学习方法,通过寻求结构化风险最小来提高学习机泛化能力,实现经验风险和置信范围的最小化,从而达到在统计样本量较少的情况下,亦能获得良好统计规律的目的。
可能很多人并不了解结构化风险、经验风险是什么,要了解这两种风险,还得从监督学习说起。
监督学习实际上就是一个经验风险或者结构风险函数的最优化问题。风险函数度量平均意义下模型预测的好坏,模型每一次预测的好坏用损失函数来度量。
监督学习从假设空间
X :输入的数据;f(X) :输入数据后,根据模型输出的预测值;Y :实际的输出数据;
预测值
(1) 常用损失函数
- 0-1损失函数
L(Y,f(X))={1,Y≠f(X)0,y=f(X)
- 平方损失函数
L(Y,f(X))=(Y−f(X))2
- 绝对损失函数
L(Y,f(X))=|Y−f(X)|
- 对数损失函数
L(Y,P(Y|X))=−logP(Y|X)
(2) 经验风险与结构风险
如果给定一个训练数据集如下:
模型
关于如何选择模型,监督学习有两种策略:经验风险最小化、结构风险最小化。
经验风险最小化的策略认为:经验风险最小的模型就是最优模型,即按照经验风险最小化的标准求取最优模型,就是求解如下最优化问题:
然而当样本容量很小时,经验风险最小化的策略容易产生过拟合现象。
结构风险最小化可以防止过拟合。结构风险实在经验风险的基础上,加上表示模型复杂度的惩罚项,结构风险的定义如下:
式(3.3.4)中参数说明如下:
J(f) :模型的复杂度- 模型
f 越复杂,J(f) 越大;模型越简单,J(f) 越小; - 也就是说,
J(f) 是对复杂模型的惩罚;
- 模型
λ≥0 :权衡经验风险和模型复杂度的系数
结构风险最小化的策略认为结构风险最小的模型就是最优模型,所以求最优模型就是求解如下所示的最优化问题:
这样监督学习问题就变成了经验风险或结构风险函数的最优化问题,如式(3.3.4)与(3.3.5)。
于是,SVM也有了第二种理解,即最优化+损失最小。如果从损失函数和优化算法角度看SVM, boosting, LR等算法,可能会有不同收获。
4. 最小二乘法
(1) 最小二乘法的说明
下面引用《正态分布的前世今生》里的内容稍微简单阐述一下最小二乘法。
我们口头中经常说:一般来说,平均来说。如平均来说,不吸烟的健康优于吸烟者,之所以要加“平均”二字,是因为凡事皆有例外,总存在某个特别的人他吸烟但由于经常锻炼所以他的健康状况可能会优于他身边不吸烟的朋友。而最小二乘法的一个最简单的例子便是算术平均。
最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。用函数表示为下式:
误差可以被定义为预测值与实际真实值的差量,所以最小二乘法就是使误差平方和达到最小,以寻求估计值的方法。用最小二乘法得到的估计,就叫做最小二乘估计。当然,取平方和作为目标函数只是众多可取的方法之一。
最小二乘法的一般形式,可以表示成下式:
有效的最小二乘法,基本思想就是认为测量中有误差,所以所有方程的累计误差为:
我们求解出导致累计误差最小的参数即可:
最小二乘法的优点如下:
- 最小二乘使得误差平方和最小,并在各个方程的误差之间建立了一种平衡,从而防止某一个极端误差取得支配地位;
- 计算中只要求偏导后求解线性方程组,计算过程明确便捷;
- 最小二乘可以导出算术平均值作为估计值;
对于上面的最后一点,从统计学角度来看,是很重要的一个性质。推理如下:
假设真值为
求解
由于算术平均是一个历经考验的方法,而以上的推理说明,算术平均是最小二乘的一个特例,所以从另一个角度说明了最小二乘方法的优良性,使我们对最小二乘法更加有信心。
最小二乘法发表之后很快得到了大家的认可接受,并迅速的在数据分析实践中被广泛使用。不过历史上又有人把最小二乘法的发明归功于高斯,这又是怎么一回事呢。高斯在1809年也发表了最小二乘法,并且声称自己已经使用这个方法多年。高斯发明了小行星定位的数学方法,并在数据分析中使用最小二乘方法进行计算,准确的预测了谷神星的位置。
说了这么多,貌似跟本文主题SVM没有关系。后文会将最小二乘法与SVM联系在一起。本质上说,最小二乘法即是一种参数估计方法,说到参数估计,咱们得从一元线性模型说起。
(2) 最小二乘法的解法
什么是一元线性模型呢? 这里引用一元线性模型的一篇博客,来梳理下几个基本概念:
参考地址:《一元线性回归模型与最小二乘法及其C++实现 》
- 监督学习中,如果预测的变量是离散的,我们称其为分类(如决策树,支持向量机等);如果预测的变量是连续的,我们称其为回归;
- 回归分析中,如果只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析;
- 如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析。
- 对于二维空间线性是一条直线;对于三维空间线性是一个平面,对于多维空间线性是一个超平面;
对于一元线性回归模型,假设从总体中获取了n组观察值
选择最佳拟合曲线的标准可以确定为:使总的拟合误差(即总残差)达到最小。有以下三个标准可以选择:
- 用“残差和最小”确定直线位置是一个途径。但很快发现计算“残差和”存在相互抵消的问题;
- 用“残差绝对值和最小”确定直线位置也是一个途径,但绝对值的计算比较麻烦;
- 最小二乘法的原则是以“残差平方和最小”确定直线位置,用最小二乘法除了计算比较方便外,得到的估计量还具有优良特性。这种方法对异常值非常敏感。
最常用的是普通最小二乘法(Ordinary Least Square, OLS):所选择的回归模型应该使所有观察值的残差平方和达到最小,即采用平方损失函数。
我们定义样本回归模型为:
Y_i = \hat{\beta_0} + \hat{\beta_1}X_i + e_i
转换上式为:
其中,
接着,我们定义平方损失函数Q:
则我们通过
令
解得:
这就是最小二乘法的解法,求得平方损失函数的极值点。
自此,你看到求解最小二乘法与求解SVM问题何等相似,尤其是定义损失函数,而后通过偏导求得极值。
5. SMO算法
上文中,我们提到了求解对偶问题的序列最小最优化算法SMO算法,但并未提到其具体解法。
首先回到之前没有解决的问题,即式(2.3.5):
实际上,上式最终等价于求解:
下面介绍上式(3.5.1)的推导过程。
(1) SMO算法的推导
推导SMO算法之前,我们首先定义特征到结果的输出函数如下:
注:其实上式(3.5.2)中的
接着我们回顾一下在第一章第4节,最大间隔分类器部分设定的原始优化问题。由于函数间隔
按照第二章第1节的方法,对上式(3.5.3)的目标函数求拉格朗日函数,并令拉格朗日函数对
将上式(3.5.4)代入到(3.5.2)中,得到:
回顾前文第二章第2节第(2)小节中的讲解,拉格朗日函数的目标函数可以转化成式(2.2.12),即:
上式也可以从
按照前文第二章第3节,加入松弛变量后,模型修改成式(2.3.3):
从而,我们的问题最终变为下式:
下面,我们要解决的问题是在
为了求解这些乘子,每次从中任意抽取两个乘子
上式(3.5.7)中的
上式(3.5.8)的参数含义如下所示:
Kij=K(xi→,xj→) vi→=∑nj=3yjα∗jKij=ui+b∗−y1α∗1K1i−y2α∗2K2i s=y1⋅y2 - 即
s 的值为-1或1,具体由y1,y2 共同决定。
- 即
为了解决这个子问题,首要问题便是每次如何选取
实际上,选取的两个乘子
首先选取第一个乘子,即违反KKT条件最严重的乘子。
根据KKT条件,可以得出目标函数中
注:上式(3.5.9)中的
对于上式(3.5.9)的解释如下:
- 第一种情况,表明
αi 是正常分类,在间隔边界内部(前面第一章中我们讲过正确分类的点有yi⋅f(xi)≥0 ); - 第二种情况,表明
αi 是支持向量,在间隔边界之上; - 第三种情况,表明
αi 在两条间隔边界之间;
而我们求的最优解需要满足KKT条件,也就是说上述三个条件全都要满足。
反过来看,以下几种情况出现时,KKT条件将不能满足:
yiui≤1(原本等价于αi=C) ,然而实际上αi<C ;yiui≥1(原本等价于αi=0) ,然而实际上αi>0 ;yiui=1(原本等价于0<αi<C) ,然而实际上αi=0 或αi=C ;
上述三种情况,都不满足KKT条件。对于这些不满足KKT条件的
另外更新的同时还需要第二个约束条件,即
根据
上式(3.5.10)中,
上面两个因子不容易同时求解,所以我们可以先求第二个乘子
假设
接下来,我们就可以综合
当
如下图3.2所示:
图3.2
当
如下图3.3所示:
图3.3
如此总结,根据
回顾前面第二个约束条件
上式(3.5.15)的参数说明如下:
w=−y1∑ni=3yiα∗i s=y1⋅y2 - 即
s 的值为-1或1,具体由y1,y2 共同决定。
- 即
所以通过上式,我们可以用
从而把子问题的目标函数转换为只含
上式(3.5.16)对
化简上式得到:
然后,将:
代入上式(3.5.17),可得到:
注:其中
令
关于
求出
说到这里,那么具体应该如何选择乘子
- 第一个乘子
α1 ,可以通过刚刚说的那三种不满足KKT条件来找; - 第二个乘子
α2 ,可以寻找满足条件max|Ei−Ej| 的乘子。
而
更新的
且每次更新完两个乘子的优化后,都需要再重新计算
最后更新所有的
(2) SMO算法的步骤
综上,总结SMO的主要步骤:
- 选取一对
αi,αj ,选取方法使用启发式方法; - 固定除
αi,αj 之外的其他参数,确定W极值条件下的αi ,αi 由αj 表示。
假设某一次迭代中,需要更新
那么每次迭代中,应该如何更新乘子?具体步骤如下:
- 计算上下界
H,L :L=max(0,αold2−αold1),H=min(C,C+αold2−αold1),y1≠y2 L=max(0,αold2+αold1−C),H=min(C,αold2+αold1),y1=y2
- 计算
Ls 的二阶导数η=2ϕ(x1)Tϕ(x2)−ϕ(x1)Tϕ(x1)−ϕ(x2)Tϕ(x2)
- 更新
Ls αnew2=αold2−y2(e1−e2)η ei=gold(xi)−yi
- 计算变量
α2 - 如式(3.5.20)
- 更新
α1 αnew1=αold1+y1y2(αold2−αnew2)
知道了如何更新乘子,那么选取哪些乘子进行更新呢?具体选择方法有以下两个步骤:
- 第一个乘子
α1 ,可以通过刚刚说的那三种不满足KKT条件来找; - 第二个乘子
α2 ,可以寻找满足条件max|Ei−Ej| 的乘子。
最后,每次更新完两个乘子的优化后,都需要再重新计算
四、后记
终于把SVM的理论用Markdown写了下来,敲了28000+个字,还要在July大神的内容基础上加入自己的简介,简直费心费力…… 但是总算是把SVM的理论第二遍的顺了下来。
July大神说,SVM的理论至少要看好几遍,才能对整套理论有一个系统的理解。现在虽然笔者第二遍顺了下来,其实离实际运用还有很远,还有待提升。
本文把July大神的文章重头编辑了一遍,一方面加深了笔者自己的理论理解,另一方面,有些地方可能July大神也没有讲的很清楚,笔者对其进行了一定的进一步讲解,也希望自己的见解可以和读者们分享(如果真有人读到这里的话),并对读者们起到一定的作用。
- 学习July博文总结——支持向量机(SVM)的深入理解(下)
- 学习July博文总结——支持向量机(SVM)的深入理解(上)
- 支持向量机 SVM 理解 转自JULY
- 转 支持向量机通俗导论(理解SVM的三层境界)——机器学习第一步SVM
- 深入理解支持向量机-SVM
- SVM-支持向量机算法的深入理解
- 学习笔记——支持向量机svm(1)最简单的支持向量机
- SVM支持向量机的深入理解与完整的推导(1)
- SVM支持向量机的深入理解与推导完结(2)
- SVM(支持向量机)---学习和理解
- 机器学习——svm支持向量机的原理
- 支持向量机(SVM)——斯坦福CS229机器学习个人总结(三)
- 【机器学习】支持向量机SVM总结
- 机器学习——支持向量机(SVM)
- 机器学习——支持向量机(SVM)
- 机器学习——支持向量机SVM(Support Vector Machine)(下)
- [转] 支持向量机SVM的理解
- SVM(支持向量机)的三层理解
- Git fetch和git pull的区别
- 谨慎使用显式接口方法实现
- strtok函数的用法
- 数据库集群+好处+原理图
- Centos7安装MySQL
- 学习July博文总结——支持向量机(SVM)的深入理解(下)
- 每天一个Linux命令(44):top命令
- Git之使用GitHub搭建远程仓库
- cast强制类型转换
- 每天一个Linux命令(45):free命令
- 实现PC端与手机端的UDP通信
- OPNET14.5 + win7 + VS2008安装详解(内附所需安装包)
- C++标准库笔记:13.12.3 以辅助函数完成I/O
- linux编译出现undefined reference to symbol 'pthread_create错误解决方案