机器学习笔记(五) 支持向量机SVM
来源:互联网 发布:origin 矩阵 编辑:程序博客网 时间:2024/05/21 17:19
支持向量机(Support Vector Machine)在解决小样本、非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中。
小样本,不是指样本的绝对数量少(对任何算法来说,更多的样本几乎总是能带来更好的效果),而是说与问题的复杂度比起来,SVM算法要求的样本数是相对比较少的。
非线性,是指SVM擅长应付样本数据线性不可分的情况,主要通过松弛变量和核函数技术来实现,这一部分是SVM的精髓。
高维模式识别,是指样本维数很高,例如文本的向量表示,如果没有经过降维处理,出现几万维的情况很正常,而SVM 产生的分类器很简洁,用到的样本信息很少(仅仅用到那些“支持向量”的样本),使得即使样本维数很高,也不会给存储和计算带来大麻烦。
1. 模型原理
如图所示,现有一个二维平面,平面上有两种不同的数据,分别用o和×表示。这些数据是线性可分的,可以用一条直线将这两类数据分开,这条直线就相当于一个超平面,将这两类数据分开。
实际上,这个超平面就是感知机,而对于感知机而言,分类超平面是不唯一的。
支持向量机SVM的思想则是以充分大的确信度将两类数据分开,即是这条分离超平面离两边的数据的间隔最大。所以,要寻找有着几何间隔最大的超平面。
1.1 函数间隔和几何间隔
对超平面 可以表示点x到距离超平面的远近,而如果分类正确,类标号y=1,否则为-1。所以可以用的正负性来表示分类的正确性.
函数间隔定义为:
对于训练数据集来说,所有样本点(xi,yi)中的函数间隔最小值便为超平面(w, b)关于训练数据集T的函数间隔:
几何间隔定义为:
同样的,所有样本点(xi,yi)中的几何间隔最小值便为超平面(w, b)关于训练数据集T的几何间隔:
1.2 间隔最大化
所谓的最大间隔分类器,对应的目标函数为 即几何间隔最大,同时需要满足 ,也就是说所有样本点中最小的函数间隔都要比优化结果 大。
即是:
考虑到 ,而且可以使函数间隔,那么优化目标就可以变成:
更进一步,优化目标可以变换为:
如下图所示,中间的实线便是寻找到的最优超平面,其到两条虚线边界的距离相等,这个距离便是几何间隔,两条虚线间隔边界之间的距离等于2,而虚线间隔边界上的点则是支持向量。这些支持向量刚好在虚线间隔边界上,满足,而对于所有不是支持向量的点,显然有。
2. 学习策略
2.1 对偶算法
目前的优化的目标函数是二次的,约束条件是线性的,是一个凸二次规划问题。
对以上目标函数的求解可以通过拉格朗日对偶性变换到对偶变量的优化问题,即通过求解与原问题等价的对偶问题得到原始问题的最优解,这就是线性可分条件下支持向量机的对偶算法。引进对偶算法的优点在于:一对偶问题往往更容易求解;二可以自然的引入核函数,进而推广到非线性分类问题。
通过给每一个约束条件加上一个拉格朗日乘子α,定义拉格朗日函数为:
原始的优化问题要求在约束条件得到最小化的,实际上等价于直接最小化,也就是说原始的优化问题可以表示为:。其中表示其最优解。
那么它的对偶问题可以表示为:
已知 ,所以可以通过求解来近似的求解 。
总结下来,求解这个对偶学习问题,分为3个步骤:首先要让关于 w 和 b 最小化,然后求对α 的极大化,最后利用SMO算法求解对偶问题中的拉格朗日乘子。
2.2 对偶问题的求解
求解,首先固定α 来求,对w和b求偏导数,可得
带入可得
此时的拉格朗日函数只包含了变量α 。
接着,需要求对α的极大化,此时的优化目标为:
这里,只要求出了,即可通过公式得到w和b,
从而得到分离超平面。
注意到,当对新点 x进行预测时,只需要计算它与训练数据点的内积即可,这一点是之后使用 Kernel 进行非线性推广的基本前提。此外,所有非Supporting Vector 所对应的系数α都是等于零的,因此对于新点的内积计算实际上只要针对少量的“支持向量”而不是所有的训练数据即可。
求解拉格朗日乘子α 可以使用SMO算法。
2.3 软间隔最大化
对线性可分问题,当训练数据是线性不可分(噪声或例外)时,要修改硬间隔最大化的条件,使其成为软间隔最大化。
此时,对每一个样本点(xi,yi)引进一个松弛变量,这时约束条件变成。 为每一个松弛变量支付一个代价 ,目标函数为。
这里目标函数的意义是一方面让分类间隔尽可能大,另一方面使误分类点的个数尽量小。
线性不可分的线性支持向量机的学习问题即为:
原始优化问题的拉格朗日函数为:
分别求极小:
得到:
带入拉格朗日函数中即得到。
对 α 求极大就得到了对偶问题:
等价为:
2.4 SVM的损失函数
线性支持向量机学习还有一种解释,即是最小化下面的目标函数:
目标函数的第一项是经验损失或者经验风险,是线性支持向量机的损失函数,称为合页损失函数,目标函数的第二项是正则化项。
二分类问题真正的损失函数是0-1损失函数,但是它不是连续可导的,直接优化由其构成的目标函数比较困难,合页损失函数是0-1损失函数的上界。
3.1 核函数
对非线性分类问题也即是通过利用非线性模型才能很好地进行分类的问题,SVM的处理方法是选择一个核函数K(x, z),通过将数据映射到高维空间,来解决在原始空间中线性不可分的问题。
在线性不可分的情况下,支持向量机首先在低维空间中完成计算,然后通过核函数将输入空间映射到高维特征空间,最终在高维特征空间中构造出最优分离超平面,从而把平面上本身不好分的非线性数据分开。http://blog.csdn.net/v_july_v/article/details/7624837博客上的例子所示,原始数据在二维空间无法划分,但映射到三维空间里则可以被划分开:
核函数的本质-- 实际中,经常会遇到线性不可分的样例,此时,常用做法是把样例特征映射到高维空间中去,映射到高维空间后,相关特征便被分开了,也就达到了分类的目的。但是如果遇到线性不可分的样例,一律映射到高维空间,那么这个维度大小是会高到可怕的。这时就可以使用核函数,它虽然也是将特征进行从低维到高维的转换,但它事先在低维上进行计算,而将实质上的分类效果表现在了高维上,避免了直接在高维空间中的复杂计算。
3.2 非线性支持向量机
从非线性分类训练集,通过核函数和软间隔最大化,学习到的分类决策函数为:
其中,K(x, z) 为正定核函数。
4. 序列最小最优化算法
当求解对偶问题:
若是训练样本容量很大时,这样求取全局最优解非常低效。序列最小最优化SMO算法就是用来快速实现支持向量机学习。
SMO算法是一种启发式算法,基本思路是:如果所有变量的解都满足此最优化问题的KKT条件,那么这个最优化问题的解就得到了。求解过程可以选择两个变量,固定其他变量,针对这两个变量构建一个二次规划问题,通过解析求解子问题来提高整个算法的速度。
KKT条件即为:
SMO算法在选取两个变量进行优化时,选取第一个变量的过程为外层循环,是在训练样本中选取违反KKT条件最严重的样本点。首先遍历所有满足条件的样本点,即在间隔边界上的支持向量点,检验它们是否满足KKT条件,再遍历整个训练集。
选取第二个变量的过程是内层循环。假设在外层循环中已经找到第一个变量,第二个变量的选择标准是希望能使第二个变量有足够大的变化,即使目标函数有足够大的下降。
参 考
李航《统计学习方法》
http://blog.csdn.net/passball/article/details/7661887/
http://blog.csdn.net/v_july_v/article/details/7624837
- 机器学习笔记(五) 支持向量机SVM
- 机器学习笔记(五)之详解SVM支持向量机
- 机器学习算法(五):支持向量机(SVM)
- 机器学习(五):SVM支持向量机_Python
- 机器学习笔记08:支持向量机(一)(SVM)
- 机器学习---支持向量机(SVM)
- 机器学习:支持向量机(SVM)
- 机器学习-支持向量机(SVM)
- 机器学习(支持向量机-SVM)
- 机器学习-支持向量机SVM学习笔记一
- 机器学习-支持向量机SVM学习笔记二
- 林轩田--机器学习技法--SVM笔记2--对偶支持向量机(dual+SVM)
- SVM(支持向量机)学习笔记
- 支持向量机(SVM)学习笔记
- [机器学习笔记]Note10--支持向量机(SVM)
- 王小草【机器学习】笔记--支持向量机SVM
- 机器学习算法笔记之5:支持向量机SVM
- 机器学习笔记2:支持向量机SVM基础入门
- python跨目录调用
- caffe cpu环境搭建&训练模型方法
- (Python学习笔记)Python代码转换为.exe可执行程序过程及注意事项
- HDU 6047 Maximum Sequence (贪心)
- Android向服务器提交数据
- 机器学习笔记(五) 支持向量机SVM
- 【python】猜拳游戏
- Python万能库——LFD
- 常用Linux指令之vi指令
- 操作系统之进程与线程1——进程概述
- telnet 命令使用方法详解,telnet命令怎么用?
- Arnoldi方法求特征值:matlab中eigs函数的一个使用示例
- 传统图像处理的一些特征
- 操作系统中的内存管理