本文包括:
- 支持向量机简介
- 线性可分支持向量机模型的形式
- 函数间隔和几何间隔
- 间隔最大化问题(最大间隔法)
- 对偶算法
- 利用KKT求最优w和b
- 其它有关数据分析,机器学习的文章及社群
1.支持向量机简介:
支持向量机是一种二分类模型,与感知机类比,其相同之处在于它也是需要找到一个超平面对数据集进行分割,区别在于,感知机模型得到的超平面空间中可以有无穷个超平面,但支持向量机仅含有一个,这一个超平面与样本点的间隔是最大化的。
支持向量机学习方法包含三种模型,其一为线性可分支持向量机,要求训练集线性可分,通过硬间隔最大化得到超平面。
其二是线性支持向量机,要求训练集近似线性可分,通过软间隔最大化获得超平面。
最后一个是非线性支持向量机,训练集线性不可分,可通过使用核函数将线性不可分的训练集转换为线性可分的数据集,并通过软间隔最大化获得超平面。
三种模型依次由简单至复杂,简单模型是复杂模型的特殊情况。
2.线性可分支持向量机模型的形式:
对于线性可分的数据集,学习的目标是在特征空间中找到一个分离超平面,能将实例分到不同的类。分离超平面将特征空间划分为两部分,一部分是正类,一部分是负类。分离超平面的法向量指向的一侧为正类,另一侧为负类。
并且要求这个分离超平面距离最近的两个点的距离之和最大,这个分离超平面被称为间隔最大分离超平面。
线性可分支持向量机的数学模型为:
其中 就是间隔最大分离超平面。
我们所需要求得的模型就是这个间隔最大的分离超平面。
3.函数间隔和几何间隔:
在正式开始之前,先看两个概念:函数间隔和几何间隔。
在之前的感知机模型解读(感知机模型(Perceptron)详细解读 | 统计学习方法学习笔记 | 数据分析 | 机器学习 - 知乎)的文章中曾经提到过函数间隔和几何间隔,但仅仅给出了简单的定义,这里对这两个概念进行详细的解读。
函数间隔:
一般来说,一个点距离分离超平面的远近可以表示分类预测的确信程度。在超平面w·x+b=0确定的情况下,|w·x+b|能够相对地表示点x距离超平面的远近。而w·x+b的符号与类标记y的符号是否一致能够表示分类是否正确。因为在二分类问题中,y要么为1,要么为-1,所以可用y(w·x+b)来表示分类的正确性及确信度,这就是函数间隔的概念。
定义超平面关于样本点(xi,yi)的函数间隔为:
现在数据集T中的每个点与超平面之间的函数间隔可以通过计算得到了,于是可以定义超平面(w,b)关于训练数据集T的函数间隔,也就是超平面(w,b)关于T中所有样本点(xi,yi)的函数
间隔的最小值:
但是我们按一定的比例改变w和b,此时超平面的位置不会改变,但是函数间隔却改变了。
比如一个超平面为x1+x2-1=0,现在将w和b变为原来的两倍:2(x1)+2(x2)-2=0。这两个超平面实际上是同一个超平面,但是对于一个点,比如(1,1),函数间隔分别为|1+1-1|=1和|2+2-2|=2。
从以上例子可以看出,虽然超平面没有变,但是函数间隔却变了,我们需要定义一种间隔,使其在超平面的w和b按一定比例改变的情况下,也不会发生变化。
于是就引入了几何间隔的概念。
几何间隔:
由于上述的函数间隔的问题,我们需要想办法来规避它,方法就是对法向量w施加约束,比如使||w||=1,这样函数间隔就成为几何间隔。
定义超平面关于样本点(xi,yi)的几何间隔为:
定义超平面(w,b)关于训练数据集T的几何间隔为超平面(w,b)关于T中所有样本点(xi,yi)的几何间隔的最小值:
几何间隔与函数间隔的关系:
现在我们有了对间隔的定义,支持向量机需要使间隔最大化,接下来研究这一点。
4.间隔最大化问题(最大间隔法):
求一个最大间隔分离超平面,可以用约束最优化问题的形式来表示:
我们可以通过几何间隔和函数间隔的关系将上面的问题改写为:
因为函数间隔对w和b按比例改变,函数间隔也按此比例改变的特性,w和b的改变并不会影响上式中的目标函数的优化和约束条件,因此,我们可以对函数间隔随意取值,为了方便,我们取
另外,我们可以将最大化问题转换为最小化问题,即将
转换为 ,这样得到的问题为:
可以使用拉格朗日乘数法求解。
同时为了之后的计算方便,我们可以将问题转变为:
因为||w||≥0,因此平方后再乘以一个系数不会对最小化问题产生影响。
上述的问题是一个凸二次规划问题,详情可自行查询凸优化相关资料。
现在,我们只需解答上述问题,得到最优特征向量w*和最优偏置b*,就可以得到最大间隔分离超平面和决策函数。问题在于如何求解该问题。
5.对偶算法:
在我的一篇关于最大熵模型算法解析(https://www.zhihu.com/people/yizhi-tu-lang-26)的文章中也曾使用过拉格朗日乘数法和对偶法解决约束条件下的最优化问题。读者可以参阅最大熵模型的文章与该篇文章一起对拉格朗日乘数法和对偶法进行更深入的了解。
这里的步骤和最大熵模型使用的拉格朗日乘子法的不同在于,最大熵模型中的约束条件是等式约束条件,而这里是不等式约束条件,对于这样的情况,可以应用KKT条件去求得最优值(下文详解)。
现在,对上一节得到的问题构建拉格朗日函数:
其中α=(α1,α2,…,αN)为拉格朗日乘子向量。
原始问题为:
其对偶问题为:
现在求对偶问题的内部最小化。
我们对w和b分别求偏导,并令偏导数等于0
得到:
将上面的结论代入到拉格朗日函数之中:
接下来求对偶问题中的外部极大化问题:
我们可以通过在右侧乘以一个-1,将最大化问题转换为求最小化的问题:
通过约束条件我们可以得到α的各个分量之间的关系,代入原式后,对αi求偏导,并使偏导数为0,求得α向量。
当然,因为这种有些暴力的解法需要大量的时间和算力,因此又提出了一种更方便的解法,称之为序列最小最优化算法(SMO),可以查看下面的这篇文章学习:
舟晓南:统计学习方法 - 序列最小最优化算法(SMO)解析 | 数据分析,机器学习,学习历程全记录
在这篇文章中,假定已通过SMO算法得到了α向量的最优解,接下来我们可以利用KKT条件求得最优w和b,并得到最大距离分离超平面和决策函数。
6.利用KKT求最优w和b:
还记得我们之前将极小极大问题转换成了它的对偶问题,即极大极小问题,实际上我们可以证明线性可分支持向量机中的原问题和对偶问题互相之间是强对偶关系,而KKT是强对偶关系的充要条件。这在数学上可以证明,这里先按下不表,我们仅使用结论。
回到问题,因为原始问题和对偶问题是强对偶关系,所以一定满足KKT条件:
在上面的五个KKT条件中,上标星号表示为最优解。等式(1)和等式(2)是我们之前在内部极小化拉格朗日函数的时候求得的,剩下的三个式子是KKT条件需要满足的。
那么根据等式(1),我们可以很容易的得到:
主要来看b,主要关注于式(3),(4)和(5)。
当 时,
,此时
还记得我们之前令 吗?
的意思是在训练集T中超平面与样本点的函数距离的最小值。而函数距离就是通过|w·x+b|来得到。
也就是说当 时,我们找到了距离超平面的函数距离最小的样本点,这样的样本点我们称之为支持向量。
而当 时,
可以是大于等于0,即这些样本点与超平面的函数距离大于支持向量,同时因为
,说明这些样本点在我们的模型中并未被考虑进去,也就是说它们对最大距离分离超平面的确定没有关系。
于是,存在一个样本点(xj,yj)使 ,根据
,可以得到:
现在我们得到了最优w*和b*,同时αi*也在上一节通过求偏导或者SMO方法得到,于是也就得到了最大距离分离超平面和决策函数:
可以在《统计学习方法》中查看具体案例。
同名公众号和知乎:舟晓南
对机器学习,深度学习,python感兴趣,欢迎关注专栏,学习笔记已原创70+篇,持续更新中~ ^_^
学习笔记:数据分析,机器学习,深度学习https://www.zhihu.com/column/c_1274454587772915712
专栏文章举例:
【机器学习】关于逻辑斯蒂回归,看这一篇就够了!解答绝大部分关于逻辑斯蒂回归的常见问题,以及代码实现 - 知乎 (zhihu.com)
关于 python 二三事https://www.zhihu.com/column/c_1484952401395941377
专栏文章举例:
记录一下工作中用到的少有人知的pandas骚操作,提升工作效率 - 知乎 (zhihu.com)
关于切片时不考虑最后一个元素以及为什么从0开始计数的问题 - 知乎 (zhihu.com)
关于转行:
舟晓南:如何转行和学习数据分析 | 工科生三个月成功转行数据分析心得浅谈
舟晓南:求职数据分析师岗位,简历应该如何写?|工科生三个月成功转行数据分析心得浅谈
我建了个数据分析,机器学习,深度学习的群~ 需要学习资料,想要加入社群均可私信~
在群里我会不定期分享各种数据分析相关资源,技能学习技巧和经验等等~
详情私信,一起进步吧!