曾经觉得支持向量机很难,那是因为在推导的时候自己不理解的地方就跳过去了,一步一步去理解,会发现SVM也不难。记录博客之前,推荐一个博客,大神写的太好了。
https://blog.csdn.net/macyang/article/details/38782399
通常我们接触一个东西都是从表面上去理解,也就是通俗理解,后面就会涉及到数学推导,我写的在第二层数学推导居多,上诉大牛从三个层面去展示,可读性强。
SVM处理3种数据:(1)线性可分(2)近似线性可分(3)线性不可分
应对的策略:(1)最优硬间隔(2)最优软间隔(3)高斯核映射为高纬线性
所以SVM基础是线性可分的模型,通过线性可分还能推导出高斯核,与(3)完美遥相呼应,软间隔推导和硬间隔很像,所以会了(1),软间隔也会。以下介绍思路按着三个部分来。(3)对于初学者有个疑惑,为什么高纬一定是线性的?解决了这个困惑就比较好理解。所以重点是(1)部分,这里包括拉格朗日、KKT、对偶优化等重点。
1 线性可分SVM
问题引入:按照机器学习三个基本要素是:模型、策略和计算方法。而SVM的前提就是线性可分,所以我们能够找到一个分类超平面去分割数据(超平面:因为平面一般是指二维,但很多时候是多维的,所以取名叫超平面),超平面可表示为:
这个超平面不唯一。为了让模型的泛化能力强,我们需要找最佳的超平面。这里选择的标准就是间隔最大化的超平面,此时的超平面唯一。那如何优化这个间隔最大问题呢?优化之前需要知道这个间隔如何定义。
间隔,一般理解是点到超平面的距离,但为了优化,引入函数间隔与几何间隔(几何间隔和间隔公式上前者分母是参数的L2范数,后者是L1范数)。函数间隔为:
函数间隔有个问题:如果将w和b等比例缩放,超平面没变,但是函数间隔也会成比例缩放。为了解决这个问题,增加一个约束,如规范化,让w 的L2范数为1,使得间隔不变。这时函数间隔就是几何间隔:
定义几何间隔的最小值为:
要让SVM模型更好,那就希望越大越好,于是这个问题可以表述为下面的约束最优化问题:
根据几何间隔和函数间隔的关系,这个问题也可以写成:
由于不影响最优化问题的解,所以可取为1(也很好理解,就不赘述了)。
又因为等价于
优化问题可重新写成:
嗯... ....这是个凸二次规划问题,那什么是凸优化问题呢?凸优化指约束最优化,带约束的,一般形式为:
如没有约束,求最小值就求导导数为0,但有约束,不能求导,怎么求解这种带约束的优化问题?此时我们引入拉格朗日函数,它的作用就是把约束条件和优化问题整合成一个式子方便求最优解。定义优化问题的拉格朗日函数:
,称为拉格朗日乘子。
将约束添加进等式中,优化问题就变成如下问题(为什么会是极小极大,因为等价于,具体证明就不写了,可以看李航的《统计学习》附录C):
这个是拉格朗日优化。根据拉格朗日对偶性,这个极小极大问题的对偶问题是极大极小问题(极小极大为什么没有极大极小解起来容易?):
(这么理解,假设100个人根据分数分班,前50名在好班,后50名在差班。前者相当于好班的倒数第一,后者就是差班第一 )
嗯,那什么时候相等呢?满足KKT7个条件,李航老师的附录里面描述的很详细,还是写一下吧~,带“*”表示这个是原始约束问题的最优解,当满足以下(SVM没有等式约束,不用考虑β,以下是含等式约束的格式);
(1)
(2)
(3)
(4)
(5)
(6)
(7)
而在SVM中是满足的((1-3)是我们要求的这个目标,我们求极值就是求它导数为0的时候的极值,(5)和(7)原始问题自带的约束,(6)拉格朗日的定义,(4)如果不满足,则L为正无穷,那就不等价与原始问题了)
所以,原始问题的优化等价于它的拉格朗日表达式的优化,也等价于它的拉格朗日的对偶优化。求解对偶优化:
step1:先求极小值,对w和b求导,然后带进公式消除w和b,只留变量α。求导容易,带入有点复杂,但不要跳过。
求导结果:
带入消除w和b:
这里需要说明一点,w是矩阵,xi也是矩阵,α和y是数,w*xi正规写法是,w的L2范数是内积,即
数的转置还是自己,所以上述写为:
别忘了约束条件:
step2:现在式子是关于α的函数,如何求极大值?用的是最小序列优化SMO,SMO下文补充,求的极大值下的,再反过来求解w*和b*
(负样本距离最近的点和正样本距离最近的点,二者之间的距离之和,也可通过公式求解,但这样解泛化性能更好)
2 线性支持SVM和软间隔最大化
就是大体是能线性可分的,就是会有一些异常点分不了。针对这种情况,引入软间隔,也就是允许部分数据分类错误。我们假设每一个数据都给定一个松弛变量:
松弛变量允许数据不是严格大于等于1的,但同时希望这样的数据越少越好,于是优化问题变为:
C>0,称为惩罚参数,C越大对误分类的惩罚加大。
跟原来一样的求解,发现对偶问题的优化呢,就只改变了α的约束条件,其它不变:
3 非线性SVM和核函数
为什么投影到高纬就能是线性的呢?什么是线性?就是最高次幂是1。非线性呢?表达式中最高次幂不是1。这样啊,那我能不能把你这个最高次幂不是1的变量用新的变量代替呢?比如我用
假设非线性吧?那我变为不就变成线性了吗?只不过特征空间变了,由{x1,x2}变成{X1,X2,X3},但没关系,我们知道他们的映射关系。
所以呢,对于非线性,要想用SVM思路就是:
先把原始低维空间转换成高纬空间——>在高纬线性可分空间,就是我们说的第一种情况:寻找最优间隔,对偶优化等步骤
可以!但有个问题,对偶优化的解有一个x的内积操作。低纬的话,一般这个输入特征纬度就比较大,上千是很经常的,把这个1000个变量变成高纬,那用多少个变量表示呢?大概是1000^2,这就很受限制了,有的时候高维特征是无穷维的。
我们假设低纬-->高维映射关系是φ(x):X-->H
会经历,因为有可能是无穷维的,所以不好解,那如果存在某个函数K使得:
即,我在低纬空间求内积,在经过K映射,结果就等价于低纬映射到高维空间,在高维空间求内积呢?
答案是存在的。则
可写成:
也就是说,在核函数K(x,z)给定的条件下,我们可以利用解线性分类问题的方法求解非线性分类问题。学习是隐式地在特征空间进行,不需要显示的定义特征空间和映射函数,这样的技巧称为核技巧。
常用核函数:
1多项式核函数
2 高斯核函数
3 字符串核函数
4 番外SMO最小序列优化(后补)
求解最优解α时,因为变量很多,不太可能多每个αi求偏导,SMO的思路就是拿出2个αi和αj,其它的固定,然后优化这2个变量,然后再优化其它两个α。
思路就是把原问题不断分解为子问题并对子问题求解。具体看看实现过程:
挑选α1和α2: