机器学习实战——SVM(1/3)

SVM(支持向量机)是典型的二分类判别式模型,这种方法以Rosenblatt于1957年提出的感知机模型的基础上,都是通过训练一个分类超平面之后,作为分类的决策函数,然后对未知的样本进行预测。通过对输入特征使用法向量和截距w=(w1,w2,...wn)、b进行线性组合,得到超平面,最终的决策函数也和感知机一样,为符号函数f(x)=sign(w? ?x? +b),符号函数大于0则为正类(w? 指向的一侧)否则为负类(w? 指向的对侧)。但SVM与感知机不同的是,SVM训练模型的策略是分类平面的间隔最大化。感知机利用误分类最小的策略求得超平面,此时当数据线性可分时是无穷多个的;SVM使用的间隔最大化求得分类超平面,因此得到的解是唯一的。

根据训练数据的特性,从模型的简单到复杂一共有三类不同的SVM模型,分别是:

1. 训练数据线性可分时,使用硬间隔最大化,得到线性可分SVM

2. 训练数据近似线性可分,使用软间隔最大化,得到软间隔线性SVM

3. 当训练数据线性不可分时,使用核方法将训练数据映射到高维可分的情况,并使用软间隔最大化,得到非线性SVM

间隔的定义

首先,回顾二维平面解析几何上,对于给定的直线w1x+w2y+b=0,平面上任意一点(xi,yi)到该直线的距离d如下图所示:

设过(xi,yi)做直线的垂线相交于(x′,y′)点,这条直线与直线的法向量平行以及(x′,y′)位于直线上,可以得到如下方程:

?????x′?xiw1=y′?yiw2w1x′+w2y′+b=0

联立求解上述方程得到交点(x′,y′),从而可以计算距离d=(x′?xi)2+(y′?yi)2??????????????????√,结果如下:

x′=w22xi?w1w2yi?bw1w21+w22y′=w21yi?w1w2xi?bw2w21+w22d=(w1xi+w2yi+b)2w21+w22????????????????√=|w1xi+w2yi+b|w21+w22???????√

从中可以看出,给定点(xi,yi)离直线的距离的就是将改点带入直线方程得到结果后除以直线法向量的模长。这是在二维平面下的情形,当维度扩展到n维时,上述结论依然成立。

下面回到作为分类的超平面问题上来,对给定特征空间上的训练数据集

T={(x1,y1),(x2,y2),...,(xN,yN)}

其中xi∈Rn,yi∈{?1,+1},i=1,2,3...N。对于任意一个超平面,数据集中某个点离超平面(w,b)的远近可以表示分类超平面的优劣。

函数间隔

样本集合T中一个特定的数据点(xi,yi)到超平面的函数间隔γ^i为

γ^i=yi(w?xi+b)

由于yi∈{?1,+1},因此上述定义就是前面推导的点到直线距离的公式中的分子部分,这里使用两个部分的乘积永远为正数的技巧就可以去掉绝对值。

对于T中所有点离超平面的函数间隔的最小值,定义为样本集合T到超平面(w,b)的函数间隔γ^

γ^=min1≤i≤Nγ^i

函数间隔表征了分类预测的正确性和确定度,但是对于给定的样板点,分类超平面(w,b),也就是w?x+b=0,如果成比例改变w,b之后,当然相应的函数间隔也成比例发生变化。但这只是从代数上进行的变换,从几何意义上来说,成比例改变后分类超平面并没有发生变化,而样本点也没有变化,因此理论上度量的距离也应该不发生变化才行,因此函数间隔这个度量的鲁棒性不够好,需要进行规范化度量表示。这样和前面的点到直线的距离公式符合,因为没有除以分子那一部分。这样就很自然得到了下面的几何间隔的定义。

几何间隔

对于样本集合中的某一点(xi,yi)到超平面(w,b)的几何间隔定义为

γi=yi(w?xi+b)||w||2

这也就是高维空间中的某店(xi,yi)到超平面的实际距离,在维度为二维平面时就对应前面的点到直线的距离公式。

定义样本集合到超平面的几何间隔为所有样本点到超平面的几何间隔最小的距离

γ=min1≤i≤Nγi

从上述定义可以看出只有当||w||2=1时,函数间隔与几何间隔相等。

线性可分SVM

支持向量机学习的基本策略就是间隔最大化,首先需要定义好间隔才能进行下一步工作。对于线性可分的数据集,通过上述定义的几何间隔最大化求解即可,可以归结为求解一个凸二次规划问题,这个问题可以表述为如下的数学描述

maxw,bγs.t.yi(w?xi+b)||w||2≥γ,i=1,2,...N

上述问题可以更加函数间隔与几何间隔的关系导出如下等价的数学描述

maxw,bγ^||w||2s.t.yi(w?xi+b)≥γ^,i=1,2,...N

由于函数间隔的改变对优化问题的解没有影响,因此可以去γ^=1,则可以等价变换为如下的标准优化问题形式:

minw,b12||w||2s.t.yi(w?xi+b)?1≥0,i=1,2,...N

使用了系数12是为了求导的方便,并不影响优化的解。这样使用优化算法求得的解(w?,b?)就是得到了分类超平面。

支持向量与间隔边界

在线性可分的情况下,训练数据集合中的样本点离分类超平面最近的样本点就是支持向量,这就是支持向量机的名称的由来。过这些支持向量并与分类超平面平行的超平面就是间隔边界。支持向量是湿的上述求解的优化问题的约束条件的等号成立的点,也就是这些点决定了最终的分类超平面。支持向量示意图如下所示(红色为分类超平面,两侧分别有两个间隔界面,位于间隔界面上的点就是支持向量)

学习算法

对于上述的约束优化问题,需要使用经典的Language函数的方法进行求解,对于每个约束条件引入一个乘子λi≥0(i=1,2...N),得到如下Language函数:

L(w,b,λ)=12||w||2?∑i=1Nλi(yi(wxi+b)?1)

由对偶性可知,原始问题的对偶问题是极大极小化问题

maxλminw,bL(w,b,λ)

先对w,b求L(w,b,λ)的最小值,然后对λ求最大值即可。

1. 求minw,bL(w,b,λ)

分别对w,b求导,此时将λ看做常数,则与感知机进行学习时求导的结果相同

?wL=w?∑i=1Nλiyixi=0?bL=?∑i=1Nλiyi=0

上述可以求得wi=∑Ni=1λiyixi以及一个新的约束条件∑Ni=1λiyi=0。

2. 求maxλL(λ)

将上述的求导结果带入原问题,得到外层的优化问题

maxλL(λ)=12∑i=1N∑j=1Nλiλjyiyj(xi?xj)?∑i=1Nλiyi(xi∑j=1Nλjyjxj+b)+∑i=1Nλi=?12∑i=1N∑j=1Nλiλjyiyj(xi?xj)+∑i=1Nλi=minλ12∑i=1N∑j=1Nλiλjyiyj(xi?xj)?∑i=1Nλis.t.∑i=1Nλiyi=0,λi≥0,i=1,2...N

对于上述问题,设求得的最优解为λ?,则得到原始问题的最优解w?为

w?=∑i=1Nλ?iyixi

对于其中的一个大于0的λi可以得到对于的样本点(xi,yi)是位于约束直线上,也就是原始问题约束取等号的直线上:

yi(w?xi+?b)?1=0

由于y2i=1,因此对上述等式两边同时乘以yi,就得到

y2i(w?xi+b?)?yi=0b?=yi?w?xi=yi?∑j=1Nλ?jyj(xj?xi)

根据上述推导,就可以得到最终的分类决策超平面

w?x+b?=0

对于线性可分的问题,上述寻找最大间隔超平面的方法是完美的,使用的是硬间隔最大化,但是这是在数据理想的情况下,现实情形中并不满足上述条件,而是存在多种噪声,因此需要有更一般的算法才能进行实用。

上述所有问题都归结为对偶问题的最优化求解λ?,关于这个的具体求解见后续实战给出。

时间: 2024-10-10 19:59:13

机器学习实战——SVM(1/3)的相关文章

机器学习实战——SVM(3/3)

前面两篇总结了线性支持向量机模型,总体来说,就是在样本输入空间下对每个维度进行线性组合之后使用符号函数判别最终的类别.第一个是理想情况下的线性可分SVM,这是第二个的近似线性可分SVM的基础.而且也是一种递进关系,是为了从数学抽象化的理想模型到现实情形的一种推广,但它们终究是一种线性模型,对于更复杂的现实情形有时候依然会难以描述,需要使用非线性模型去描述. 非线性SVM 由于现实问题的复杂性,导致训练的样本数据无法使用在输入空间χ=Rn(或其子集或其离散集合)下使用一个线性超平面进行分隔,对于给

机器学习实战——SVM(2/3)

上一篇总结了对于训练数据集线性可分的理想情况下,使用硬间隔最大化训练得到分类超平面的SVM方法,这种方法在实际应用中并不实用,因为实际的训练数据总是会存在人为或不可控的因素干扰产生各种噪声,因此是无法在特征空间下找到线性可分的超平面的,但是噪声总是有限的,可以对硬间隔这个限制进行放松,引入一个松弛变量来控制分类超平面的训练,从而可以对近似可以线性可分的实际应用数据进行学习和预测.从这里也可以很明显的看出虽然前文所述的硬间隔最大化SVM太过理想,实际应用不理想,但是正是这种理想化的抽象,才能引出本

机器学习实战笔记6(SVM)

鉴于July大哥的SVM三层境界(http://blog.csdn.net/v_july_v/article/details/7624837)已经写得非常好了,这里我就不详细描述,只是阐述简单的几个概念.如果看SVM三层境界有困惑,我也愿意与大家交流,共同进步. 简单概念描述: (1)      支持向量机(SVM, support vectormachine)就是通过最大化支持向量到分类超平面之间的分类间隔.分类超平面就是我们想要得到的决策曲面:支持向量就是离分类超平面最近的点,而间隔即为支持

《机器学习实战》学习笔记:支持向量机

该节的内容是支持向量机(SVM, support vectormachine). 这里首先要推荐一下July的SVM三层境界(http://blog.csdn.net/v_july_v/article/details/7624837)由于<机器学习实战>关于SVM一章的内容很多,本节先简单归纳一下关于支持向量机的基础. 一.概念描述 支持向量机,就是通过最大化支持向量到分类超平面之间的分类间隔.分类超平面就是我们想要得到的决策曲面:支持向量就是离分类超平面最近的点,而间隔即为支持向量到分类超平

机器学习实战笔记7(Adaboost)

1:简单概念描述 Adaboost是一种弱学习算法到强学习算法,这里的弱和强学习算法,指的当然都是分类器,首先我们需要简单介绍几个概念. 1:弱学习器:在二分情况下弱分类器的错误率会高于50%.其实任意的分类器都可以做为弱分类器,比如之前介绍的KNN.决策树.Na?ve Bayes.logiostic回归和SVM都可以.这里我们采用的弱分类器是单层决策树,它是一个单节点的决策树.它是adaboost中最流行的弱分类器,当然并非唯一可用的弱分类器.即从特征中选择一个特征来进行分类,该特征能是错误率

机器学习day12 机器学习实战adaboost集成方法与重新进行疝马病的预测

今天终于完成了分类器的学习,SVM基本不怎么会,很是头疼,先放一下吧,有机会问问大神讲解一下.接下来的几天进行监督学习回归部分的学习,先看看adaboost的理解. 我们再决定一个重要的事情时,往往不是听取一个人的意见,听取大家的意见,然后投票表决最终结果.这一个特点也可以应用于机器学习的算法中来,每一个人都是弱的分类器,若是指一个人的力量很小,很多人汇集在一起就构成了强分类器.好比政府的投票系统. 有一个有趣的现象,若每个人都有51%的几率选择正确,则汇集很多人的投票信息之后选择正确的人比选择

《机器学习实战》AdaBoost算法的分析与实现

===================================================================== <机器学习实战>系列博客是博主阅读<机器学习实战>这本书的笔记也包含一些其他python实现的机器学习算法 github 源码同步:https://github.com/Thinkgamer/Machine-Learning-With-Python 算法实现均采用Python              如需转载请注明出处,谢谢 ========

机器学习实战 [Machine learning in action]

内容简介 机器学习是人工智能研究领域中一个极其重要的研究方向,在现今的大数据时代背景下,捕获数据并从中萃取有价值的信息或模式,成为各行业求生存.谋发展的决定性手段,这使得这一过去为分析师和数学家所专属的研究领域越来越为人们所瞩目. <机器学习实战>主要介绍机器学习基础,以及如何利用算法进行分类,并逐步介绍了多种经典的监督学习算法,如k近邻算法.朴素贝叶斯算法.Logistic回归算法.支持向量机.AdaBoost集成方法.基于树的回归算法和分类回归树(CART)算法等.第三部分则重点介绍无监督

【机器学习实战】Machine Learning in Action 代码 视频 项目案例

MachineLearning 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远 Machine Learning in Action (机器学习实战) | ApacheCN(apache中文网) 视频每周更新:如果你觉得有价值,请帮忙点 Star[后续组织学习活动:sklearn + tensorflow] ApacheCN - 学习机器学习群[629470233] 第一部分 分类 1.) 机器学习基础 2.) k-近邻算法 3.) 决策树 4.) 基于概率论的分类方法:朴素