机器学习(七)--支持向量机SVM
支持向量机(support vector machines)是一种二分类模型,它的目的是寻找一个超平面来对样本进行分割,分割的原则是间隔最大化(如下图B1边缘大于B2边缘),最终转化为一个凸二次规划问题来求解。
基本概念
1.间隔最大化和支持向量
如果一个线性函数能够将样本分开,称这些数据样本是线性可分的。那么什么是线性函数呢?其实很简单,在二维空间中就是一条直线,在三维空间中就是一个平面,以此类推,如果不考虑空间维数,这样的线性函数统称为超平面。我们看一个简单的二维空间的例子,O代表正类,X代表负类,样本是线性可分的,但是很显然不只有这一条直线可以将样本分开,而是有无数条,我们所说的线性可分支持向量机就对应着能将数据正确划分并且间隔最大的直线。
下面我们开始计算间隔,其实间隔就等于两个异类支持向量的差在 w 上的投影,即:
至此,我们求得了间隔,SVM的思想是使得间隔最大化,也就是:
因为求长度会有根号,所以加平方简化计算
2.对偶问题
公式(7)本身是一个凸二次规划问题,可以使用现有的优化计算包来计算,但我们选择更为高效的方法。对公式(7)使用拉格朗日乘子法得到其对偶问题,该问题的拉格朗日函数可以写为:
由于变量太多,所以把以下式子代回拉格朗日函数中
所以问题转变为
3.SMO算法(求解拉格朗日乘子,就是下图框框这个)
简单来说,就是每次只更新两个乘子,基于启发式选择方法,一般不会去选择更新拉格朗日乘子为0或者C(线性不可分时候,惩罚函数的系数,下面会有介绍)的,去选择介于它们之间的一些值,一直循环计算乘子,直到随机提取两个计算时候误差在我们承受的范围内
支持向量机模型分类
- 当训练样本线性可分时,通过硬间隔最大化,学习一个线性可分支持向量机;
线性可分的情况比较好求解(其实就是线性不可分里面的情况)
首先把问题转换为对偶问题,之后利用SMO算法求解出拉格朗日乘子,之后再算出w和b就可以求出我们想要的超平面
- 当训练样本线性不可分时,通过软间隔最大化,学习一个线性支持向量机;
线性不可分我们首先来学习一下什么是惩罚函数和松弛变量
其中
为惩罚函数,为松弛因子
其对应的线性不可分对偶问题为
如何求解呢?(和线性可分差不多),C是我们指定的
首先把问题转换为对偶问题,之后利用SMO算法求解出拉格朗日乘子,之后再算出w和b就可以求出我们想要的超平面
- 当训练样本非线性时,通过核技巧和软间隔最大化,学习一个非线性支持向量机;
对于非线性问题,线性可分支持向量机并不能有效解决,要使用非线性模型才能很好地分类。先看一个例子,如下图,很显然使用直线并不能将两类样本分开,但是可以使用一条椭圆曲线(非线性模型)将它们分开。非线性问题往往不好求解,所以希望能用解线性分类问题的方法求解,因此可以采用非线性变换,将非线性问题变换成线性问题。
于是有最小化函数:
- 常用核函数
- 维度灾难
- Mercer定理(如何判断该核函数是否合理)
核函数矩阵
非线性如何求解呢?
同理使用SMO算法求出拉格朗日乘子之后,求出w和b即可,但是预测时候怎么计算呢?