支持向量机SVM
来源:互联网 发布:不用交钱的网络兼职 编辑:程序博客网 时间:2024/06/05 06:00
支持向量机SVM
这篇文章是对http://www.cnblogs.com/pinard/p/6097604.html系列文章的理解和补充
感知机模型
感知机可以说是最古老的分类方法之一了,在1957年就已经推出。它的泛化能力不强,但是却是SVM,神经网络和深度学习的基础。
感知机的思想很简单,就是尝试找到一条直线,将平面上属于不同类别的点分开。如果找不到这样一条直线,说明数据是线性不可分的。使用感知机最大的一个前提是数据线性可分,这严重限制了感知机的使用场景,即使XOR数据使用感知机也会分类失败。另外即使数据线性可分,利用感知机找到的分类直线也不是唯一的,这和训练过程中的参数设置有关。SVM就从以上两点改进,通过最大化几何间隔改进第二个问题,通过引入核函数改进第一个问题。另外神经网络可以通过核函数和增加隐层使数据非线性可分。
感知机模型
假设有n个样本,每个样本对应有m维特征和一个二元类别输出,如下:
为了方便,这里二元类别不再是
感知机模型可以定义为:
感知机的损失函数
根据感知机的模型,将
如何求一个点到超平面的距离?如图所示,以二维平面为例。设点x到直线的距离为r,x在直线上的投影为
所以点x到直线的距离为
对于错误分类的样本点,其到超平面的距离为
我们发现,超平面由参数
我们假设所有错误分类的点的集合为M,则损失函数为
这里为了简化目标函数,将距离中的分母设置为1,在SVM中,通常将分子设置为1,这主要和优化算法有关。
损失函数的优化方法
知道了感知机的损失函数,就可以优化了。损失函数是一个凸函数,可以使用梯度下降。但是损失函数中的样本不是样本总体,而是那些错误分类的样本,所以不能使用整体的梯度下降算法,只能使用随机梯度下降或小批量梯度下降。
这里选择使用的是随机梯度下降,每次只利用一个错分样本更新参数。
损失函数基于
梯度下降的迭代公式为
由于采用随机梯度下降,每次只利用一个样本更新参数,所以参数的迭代公式为:
优化算法的执行步骤如下:
- 给定n个m维的训练样本和标签,定义所有样本的
x0 为1,选择初始的参数w∈Rm+1 和步长α 。需要注意的是,由于感知机的解不唯一,初始值的设定会影响最终的迭代效果。 - 根据参数
w ,选择一个误分类的点 - 对参数进行一次随机梯度下降迭代
- 检查样本中是否有误分类的点,如果没有,算法结束,如果有,转到2.
损失函数优化算法的对偶形式
上一节的感知机模型的算法形式我们一般称为感知机模型算法的原始形式。对偶形式是对算法执行速度的优化。具体是怎么优化的呢?
通过感知机算法的原始形式
其中
由于
根据上式,判断第i个样本是否误分的公式变为
注意,上面判断误差的形式里面,计算的是
计算所有样本的内积的矩阵称为Gram矩阵,是一个对称矩阵,形式如下:
判断第j个样本是否错误分类时,需要用到矩阵G中的第j列。根据矩阵计算可以一次性判断所有样本是否误分类。设
利用对偶形式的算法步骤如下:
- 给定n个m维的训练样本和标签,定义所有样本的
x0 为1,选择初始的参数β∈Rn 为0和步长α 。需要注意的是,由于感知机的解不唯一,步长初始值的设定会影响最终的迭代效果。 - 计算所有样本的Gram矩阵
- 计算
F=y(βT∘yT)G ,判断F中是否有小于等于0的元素,如果有,对应的样本被误分。选择一个被误分的样本x(i) - 对
β 中的第i个分量更新:βi:=βi+α - 重新计算
F=y(βT∘yT)G ,中第i个元素的值,判断F中是否有小于0的元素,如果没有,算法结束,如果有,转到3
为什么感知机的对偶算法要比原始算法的计算速度快?因为在原始算法中,每更新一次参数
感知机小结
感知机算法简单易懂,但是泛化能力不强,不能处理线性不可分的数据,并且解不唯一。但是他是很多算法的鼻祖,比如SVM,神经网络和深度学习。感知机算法中距离的计算,目标函数的简化以及对偶优化算法,在SVM中还会再涉及。
线性SVM
上文讲到的感知机模型有几个缺点:1、解不唯一,对于线性可分的数据,可以找到不止一个超平面可以将数据分开,但是哪个超平面的泛化能力最强呢? 2、感知机模型对于线性不可分的数据分类失败。SVM可以说是感知机的一个改进,首先通过引进支持向量使得解唯一,然后通过引进软间隔支持极少数的异常点的线性数据,以及核函数支持非线性分类。
本节由感知机到SVM,讲解线性SVM的原理和推导过程。
首先感知机中的目标函数是使得所有误分点到超平面的距离和最小。也就是所,离超平面远的点是正确分类的,反而是离超平面比较近的点容易错误分类。如果我们让离超平面比较近的点尽可能远,那么我们的分类效果就会好一点。SVM的思想源于此。
SVM是让所有点离超平面的距离尽可能的大,我们假设大于一定的距离,我们要求一个超平面,使得离超平面最近的点尽可能的远。上面一再提到样本离超平面的距离,所以首先要解决的是如何求距离。然后是目标函数的设置和优化算法。
函数间隔和几何间隔
当分离超平面设置为
可以看出,它就是感知机中点到超平面的距离中的分子。训练集中n个样本点对应n个函数间隔,最小的一个是整个训练集的函数间隔。
函数间隔并不能反映点到超平面的距离,在感知机中我们也提到,当
同样,训练集中n个样本对应n个几何间隔,最小的一个是整个集合的几何间隔。
在感知机中提到,当
将式(1)中
所以几何间隔在固定了参数
支持向量
SVM的思想就是确定一个超平面,使得所有样本中离超平面最近的点尽量远。离超平面最近的这些点就称为支持向量。如下图所示,两条虚线上的点离超平面最近,称为支持向量。和这两条虚线平行并位于最中间的直线就是分类超平面。由图中还可以看出,如果分类超平面是
线性SVM的目标函数
还是那句话,SVM使得所有样本中距离超平面最近的点离超平面最远。也就是说要使得整个样本的几何间隔最大。用数学式子表达就是:
(2)和(3)中的w和b同时除以
将最大化转为最小化可得
上式就是线性SVM的目标函数,加上系数是为了计算方便。这是一个约束优化问题,而且有n个约束条件,和之前介绍的logistic和感知机的目标函数是无约束优化问题不一样。可以用约束优化的方式解决。
由于目标函数
(原问题:
对偶问题:
如果
)
根据上面的对偶问题的理论,可以将SVM约束优化问题转化为无约束优化问题:
由于引进了拉格朗日乘子,目标为
由于优化条件满足KKT,可以转化为等价的对偶问题来求解,即
我们可以先求优化函数对W,b的极小值,然后再求关于拉格朗日乘子
首先求解关于
将上面两个等式带入(4)中:
最后对上式求极大化,转化为求极小化,得到
以上就是SVM的目标函数,只要求出
根据对偶理论,假设得到了原问题和对偶问题的最优解
假设已经求得最优的
线性可分SVM算法过程
这里对线性可分SVM的算法做一个总结。
输入是线性可分的n个样本
输出是分离超平面的参数
算法过程如下:
构造约束优化问题
minα∑i=1n∑j=1nαiαjyiyj<xi,xj>−∑i=1nαi s.t.∑i=1nαiyi=0andαi≥0,i=1,2,...,n 用SMO算法求解上述问题对应的最有解
α∗ 找出所有S个支持向量,即满足
αi>0 的样本计算
w∗=∑i=1Sα∗iyixi ,计算W时只需利用支持向量相应的数据即可,因为非支持向量的αi=0 ,在计算中不起作用。对所有S个支持向量,通过
yi(wTxi+b)=1 ,(等式两边同乘yi ,得到wTxi+b=yi ,所以b=yi−wTxi ,将(4)中计算得到的w带入)计算出每个支持向量对应的bj=yj−∑Si=1αiyi<xi,xj> ,求平均值为最终的b∗ 最后超平面为
w∗x+b∗=0 ,最终的分类决策函数为f(x)=sign(w∗x+b∗)
这样就得到最终的分类超平面:
线性可分SVM对于非线性数据是没有办法使用的,不可分的原因有两个。一是线性数据集中有少量异常点,由于这些异常点线性不可分,利用SVM的软间隔模型可以解决此类问题;二是数据本身是非线性的,需要引进核函数。
线性SVM软间隔最大化模型
有时候数据本身是线性可分的,也就是说可以用线性SVM来分类,但是却因为存在一些异常点,导致线性不可分。比如下图,本来数据可以按照下图的实线做超平面分离的,可是有一个橙色和一个蓝色的异常点导致分类失败。
另一种情况是数据仍然线性可分,但是会影响到泛化效果。如下图,如果不考虑异常点,SVM超平面应该是下图中红线所示,但是由于一个蓝色的异常点,导致我们学习到的超平面是下图中黑色虚线,这会严重影响到模型的泛化效果。
如何解决上述两个问题呢?SVM引入软间隔最大化的方法来解决。
线性分类SVM软间隔最大化模型
所谓软间隔,是相对硬间隔而言的。我们认为上节介绍的SVM模型是硬间隔最大化,即所有样本点到分离超平面的距离都大于等于1。而软间隔的条件可以放宽,只要求样本点到分离超平面的距离加上一个松弛变量后大于等于1,同时这些松弛变量也要作为惩罚加入目标函数。
硬间隔最大化:
软间隔最大化:
对比硬间隔最大化,软间隔最大化在两个地方做了改进。首先是约束条件:对每一个样本到分离超平面的距离加上了一个松弛变量,使得样本到超平面的距离的约束有所放松。另外加上这些松弛变量也要有代价,所以在目标函数上加上了对松弛变量的约束。这里
也就是所,我们希望目标函数最小化,一方面要求支持向量离超平面尽量远,另一方面要求松弛变量尽量小。
软间隔最大化的目标函数和上一节介绍的硬间隔最大化模型的目标函数形式一样,都可以用对偶理论解决。
线性SVM软间隔最大化的目标函数
首先用拉格朗日函数将约束优化问题转化为无约束优化问题:
其中
首先求
然后利用上面三个式子消除w和b
进过计算,第4行的式子和硬间隔最大化的函数一样,之后的计算过程也完全一样,最后得到的结果也一样,不过对拉格朗日系数的约束不一样。
之前对拉格朗日系数的约束只有两个,现在有4个,分别是
对第2,3,4三个式子,可以消去
综上,软间隔最大化的目标函数为
软间隔最大化的目标函数和硬间隔最大化的目标函数只有一点不一样,就是对
软间隔最大化的支持向量
硬间隔最大化的支持向量很好计算,求出最优的
下面左图是硬间隔最大化的分类情况,样本点的位置只有两种情况,在虚线的外侧和在虚线上,分别为正确分类的点和支持向量。右图是软间隔最大化的分类情况,样本点的位置有5中情况,分别为:
- 在虚线外且被正确分类,对模型的建设没有贡献
- 在虚线上且被正确分类,真正的支持向量
- 被正确分类但是在实线和虚线中间,如点1,2,4,这些也是支持向量
- 在实线上,这些点可以拒绝判断,也可以认为分类正确
- 被分类错误的点,在超平面的另一端且在虚线外,如点5
那么如何根据
现在基于
- 当
αi=0 时,根据第三条,μi=C ,再根据第七条,得ξi=0 ,然后再根据第四第五条得到yi(wTxi+b)>1 ,即样本点离超平面的距离大于支持向量,在虚线之外; - 当
0<αi<C 时,根据第三条,0<μi<C ,在根据第七条,得ξi=0 ,因为第四条,得到yi(w∗Txi+b∗)−1+ξ∗i=0 ,所以yi(wTxi+b)=1 ,即样本在虚线上; - 当
αi=C 时,因为第四条,得到yi(w∗Txi+b∗)−1+ξ∗i=0 ,因为第三条,得到μi=0 ,由于第七条,得到ξi>0 ,说明此点异常,ξi 还可以细分:αi=C,0<ξi<1 ,根据yi(w∗Txi+b∗)=1−ξ∗i ,得到0<yi(w∗Txi+b∗)<1 ,样本在虚线和实之间实线αi=C,ξi=1 ,根据yi(w∗Txi+b∗)=1−ξ∗i ,得到yi(w∗Txi+b∗)=0 ,样本在实线之上;αi=C,ξi>1 ,根据yi(w∗Txi+b∗)=1−ξ∗i ,得到yi(w∗Txi+b∗)<0 ,样本在实线的另一侧,别错误分类;
综上,可以得到以下结论,设
支持向量对应的点满足
在知道了各个样本对应的
软间隔最大化线性可分SVM的算法过程
输入是线性可分的m个样本
输出是分离超平面的参数w和b和分类决策函数。
算法过程如下:
选择一个惩罚系数
C>0 , 构造约束优化问题:minα∑i=1,j=1nαiαjyiyj<xi,xj>−∑i=1nαi s.t.{∑ni=1αiyi=00≤αi≤C 用SMO算法求出上式对应的最优解
α 计算
w∗=∑i=1mα∗iyixi 找出所有S个支持向量,即满足
0<αi<C 的样本,通过yig(xi)=1 ,计算出每个支持向量对应的bj=yj−∑Si=1αiyi<xi,xj> ,求平均值为最终的b∗ 最后超平面为
w∗x+b∗=0 ,最终的分类决策函数为f(x)=sign(w∗x+b∗)
合页损失函数
线性SVM软间隔最大化模型还有另一种表达形式,如下:
其中
此目标函数和软间隔最大化模型的目标函数等价(参考《统计学习方法》P114)
ξi=[1−yi(wTxi+b)]+ ,表示松弛变量,也是经验损失函数,称为合页损失函数。当yi(wTxi+b)>1 时,损失函数为0,表示分类正确。但是当0<yi(wTxi+b)<1 ,仍然分类正确,损失函数却不为0,增加了分类的置信度。||w||2 在(1)中表示的是正则项,在(2)代表的是支持向量和分类超平面的距离。越大,间隔越小。λ=12C ,λ 和C 在两个目标函数中表示的都是正则化参数,不过正好成反比。λ 越大,C越小,表示对松弛变量的约束越小,但是对距离的约束变大,间隔越大;相反λ 越小,C越大,对松弛变量的约束变大,更少的点误分类,但是间隔变小,泛化能力下降。
下图为各种模型损失和函数间隔的关系。对于0-1损失函数,如果正确分类,损失是0,误分类损失1, 如下图黑线,可见0-1损失函数是不可导的。对于感知机模型,感知机的损失函数是
非线性SVM
在上面两节中我们讲到了线性可分SVM和软间隔线性可分SVM,对于线性可分的数据或有个别异常点的数据可以很好的处理,但是遇到完全非线性可分的数据,就没有办法了。这一节介绍如何引进核函数处理非线性可分的数据。
我们知道,在低维空间中线性不可分的数据映射到高维空间的话线性可分。比如2维映射到5维,5为映射到10维。但是随着原始数据维数的增加,将其映射到的高维空间的维数呈爆炸式的增加。这是一个问题。
另外在线性SVM的目标函数中,样本数据是通过内积的形式存在的,如下是软间隔线性SVM的目标函数:
那么有没有办法,在低维空间中就可以计算映射后高维空间的内积,而不需要明确表示映射函数的办法呢?核函数就有这样的效果。
假设
那么我们就称
从核函数的定义中可知,
但是核函数又应该怎样计算呢?给出几个经常应用的,也是sklearn中默认可选的几个
线性核函数(Linear Kernel):线性核函数起始就是线性可分的SVM,表达式为:
K(xi,xj)=<xi,xj> 将其应用到SVM中,还是线性SVM。所以线性和非线性SVM可以归为一类,区别在于核函数的选择。
多项式核函数(Polynomial Kernel):是常用的核函数之一,表达式为:
K(xi,xj)=(γ<xi,xj>+r)d 其中
γ,r,d 需要调参定义。高斯核函数(Gaussian Kernel):也称为径向基核函数(RBF),是最主流的核函数。表达式为:
K(xi,xj)=exp(−γ||xi−xj||2) 其中
γ>0 ,需要调参定义。sigmoid核函数(Sigmoid Kernel):也是常用的核函数之一,表达式为:
K(xi,xj)=tanh(γ<xi+xj>+r) 其中,
γ,r 需要调参定义。
有了核函数,可以很自然的从线性SVM过渡到非线性SVM。
下面给出SVM算法的流程,不再区分线性和非线性,利用的是软间隔分类模型:
选取合适的核函数
K(xi,xj) 和惩罚系数C,构造目标函数:minα∑i=1,j=1nαiαjyiyjK(xi,xj)−∑i=1nαi s.t.{∑ni=1αiyi=00≤αi≤C 利用SMO算法求出最优解
α 计算
w=∑ni=1αiyiϕ(xi) ,这一步在实现中可以省略,因为不需要显式计算w 找出所有S个支持向量,即满足
0<αi<C 对应的样本(xs,ys) ,计算出对应的bs=ys−∑Si=1αiyiK(xi,xs) ,所有支出向量对应的bs 的平均为最终计算的b 最终的超平面为
wTϕ(x)+b=∑ni=1αiyiK(xi,x)+b=0 ,给定一个训练样本xt ,决策函数为f(xt)=sign(∑ni=1αiyiK(xi,xt)+b)
至此,SVM分类器的所有情况介绍完毕,唯一遗漏的是SMO算法,这关系到如何根据目标函数求出最优解。
SMO算法
在前面几节中,介绍了SVM的目标函数和决策函数,遗漏的是目标函数的求解,即得到一个最优的
SMO算法的工作原理是:每次循环中选择两个
SMO算法目标函数的优化
SMO算法每次从n个变量中选择两个作为变量,其余固定作为常量。假设选择的两个变量是
其中省略了一项常数项。
其中
上述问题是一个单变量二次约束优化问题,目标函数是一条抛物线,约束条件是一个正方形区域。可以通过求导得到区域内的最优解。
对目标函数求倒数得到
整理上式有:
即
其中
上面得到的
根据约束条件
直线可以表示为
假设我们上一轮迭代得到的解是
由于
而对于L和H,我们也有限制条件。如果是上面左图中的情况,则
如果是上面右图中的情况,我们有:
综上,SMO两个变量的优化的步骤为:首先根据
最后根据
到此,对两个变量的跟新完成。
SMO算法两个变量的选择
在上一部分中介绍了选定两个分量作为变量时目标函数的优化。但是如何选取这两个分量呢?主要采用的是启发式的方法。
- 第一个变量的选择:第一个变量的选择称为外循环。其选择会在两种方式之间交替进行:一种方式是遍历所有数据集,另一种方式是在非边界
α(0<α<C) 中进行单边扫描,并选择违反KKT条件的样本。非边界样本满足的KKT条件是0<αi<C⇒yig(xi)=1 - 第二个变量的选择:第二个变量的选择称为内循环。第二个变量的选择使得
|E1−E2| 有最大的变化。通常将Ei 保存在一个列表中进行比较。
选择完两个变量之后要进行优化,在优化之前需要先判断这两个样本是否需要进行优化。首先计算H和L,如果H==L,重新选择第二个变量;如果
计算b
在每次更新
当
- 支持向量机SVM
- SVM支持向量机
- svm支持向量机
- SVM支持向量机
- [SVM]支持向量机
- SVM 支持向量机
- 支持向量机SVM
- SVM 支持向量机
- svm支持向量机
- 支持向量机SVM
- svm支持向量机
- SVM (支持向量机)
- SVM支持向量机
- SVM支持向量机
- 支持向量机SVM
- 支持向量机(SVM)
- 支持向量机-SVM
- 支持向量机SVM
- 广度优先搜索求最短路径问题
- Android 探秘——q友交流群
- STM32F207核心版的LwIP例程的心得
- Python中的基本list操作
- Android Snackbar
- 支持向量机SVM
- [情感分析的新方法]
- English story 7
- 1031. Hello World for U (20)
- Android中Canvas绘图基础详解(附源码下载)
- 【二分解方程】hdu 2199 Can you solve this equation?
- myeclipse中更新jsp代码,网页并不更新问题的解决
- Linux查看服务命令与端口使用介绍
- spfa