SVM学习笔记
SVM(support vector machines)支持向量机
主要思想(目的):求解一个分类面(或称为分类函数),能够正确划分训练数据集且几何间隔达到最大
这里的几何间隔是指:离分类面最近的两个异类样本与分类面之间的距离之和,如下图所示的 γ
1、优化问题推导
1.1 优化问题提出
设有训练数据集(x为特征向量,y为标注类别)
假设训练数据集线性可分,则设分类面方程为:
根据点到线的距离公式:
可以得到,任一样本距离分类面的距离γi 的计算公式:
考虑到训练样本的标注类别y取值为(+1,-1),所以可以将上式中的绝对值去掉得到:
几何间隔 γ 可以取为:
需要最大化 γ ,得到优化问题:
(s.t. 表示subject to ,即约束条件)
1.2 优化问题改进
在已经得到的优化问题的基础上可以进一步形式上的简化。
对约束条件两侧同时除以 γ ,得到:
(分母都是标量)为了方便起见,令:
同时根据上式的变量替换可以将优化目标转变为下式:
(1/2是为了后面的求导等运更方便)
最终优化问题的形式为:
2、优化问题求解
2.1 拉格朗日乘子法->对偶问题
在1.2节中最后得到的优化问题的基础上,可以得到其对应的拉格朗日函数为(拉格朗日乘子法可参考这篇文章):
并且可以进一步得到优化问题的对偶问题,拉格朗日函数对ω,b求偏导并使导数等于0,得到式①,式②:
将上式带入拉格朗日函数中,就可以消掉ω和b, 转而变为求最优的拉格朗日乘子α 使得拉格朗日函数取极值,即原优化问题的对偶问题:
2.2 求解
需要使用SMO算法对2.1中得到的对偶问题进行求解(SMO算法后续再填坑),求解得到一系列的拉格朗日乘子α1,α2 … αn
2.2.1 计算ω
根据2.1节中的式①,就可以直接计算出 ω
2.2.2 计算b
1.2节中最后得到的优化问题中的约束条件为:
我们设定支持向量是距离分类面最近的样本点,所以可以推出对于任意一个支持向量(xj,yj), 都满足:
因此b可以通过任选的一个支持向量(xj,yj)来计算得到,计算公式为:
然后就得到了分类面方程:
但是!这里存在一个问题,如何知道哪些样本点是支持向量呢?不然(xj,yj)是无法得到的。
在2.2节中推导得到对偶问题的过程中,是需要满足KKT条件(Karush-Kuhn-Tucker)的,(KKT条件可参考这篇文章),即需要满足以下条件:
根据上述条件可以推出:
若 αi>0,则 yi *(ω * xi+b) = 1,即对应的样本点(xi,yi)为支持向量。
即所有不等于0的拉格朗日乘子αi 所对应的样本就是支持向量
3、线性不可分情况
1、2两节都是在假设样本是线性可分的情况下进行的,而大多数情况是线性不可分的
3.1 核函数
当样本在初始的特征空间中线性不可分时,我们可以将其映射到高维空间中使得其在高维空间中线性可分,进而在新的空间可以计算分类面。
但是映射到高维空间后计算将变得复杂,甚至有可能无法计算,因此我们需要找到一种方法,使得在低维空间中的计算结果达到在高维空间计算的效果,以此简化计算,这就是核函数。
(先挖坑,具体的公式以及说明改天再补充)
3.2 软间隔
因为数据有噪声干扰,并不会是理想的线性可分,映射到高维空间中计算又有点小题大作,成本太大,因此可以允许分类有一定的误差,即软间隔。
如图中红色的样本即不满足约束的样本,此时也是允许其存在的。
(同样的,先挖坑,具体细节改天再填)
参考资料:
《机器学习》周志华 (西瓜书)
https://blog.csdn.net/v_JULY_v/article/details/7624837