最近一段时间在详细的看SVM的相关推导和python代码实现,参考了李航统计学方法和机器学习实战这两本书。将自己学习到的关于SVM的内容记录下来。
本人认为SVM分为三个部分内容:硬最大间隔SVM、软最大间隔SVM、核技巧(kernel trick)的使用。
在正式讲解原理推导之前,先来介绍两个概念:函数间隔和几何间隔
函数间隔:对于给定的超平面 和训练的数据集T,定义超平面 关于样本点 的函数间隔为:
其中:,是样本点各维特征组成的向量;,是样本点的类标签; 为 的模。
由上面的分析可以,SVM算法其实就是在寻找具有最大“间隔”的超平面,并且需要保证每个样本点不被错分。因此这是一个关于参数w和b的优化问题,即:
(6)
其中(6)中的第一个式子的含义为:关于(w,b)寻找最大的 ,称为目标函数;第二个式子称为约束条件。
再将(5)式带入(6)式可得:
(7)
由于在超平面 不变的情况下,即(w和b同时放大(或者缩小) 倍),此时函数间隔 也是放大(或者缩小) 倍,但(7)式的目标函数和约束条件在放大前(或者缩小前)与放大后(或者缩小后)是等价的。因此说明函数间隔 的取值不会影响上述优化问题的解。因此,为了方便我们取 =1,将其带入到(7)式中得:
(8)
由因为求目标函数的最大值与求目标函数倒数最小值是等价的,所以(8)式等价于:
(9)
说明:为什么这里不选 做为目标函数,因为这样选在后面使用拉格朗日算法进行求解的时候导数不容易求,而选择上式做为等价的目标函数在后面的求解中比较好求,其中目标函数的系数0.5也是为了后面的求解方便。
对于(9)式的不等式约束问题,可以使用拉格朗日算法来求解其最优值,即(9)式的优化问题等价于:
(10)
说明:具体为什么等价于(10)式,请自行查看拉格朗日算法怎么求解不等式优化问题,这里不过多介绍。
参考书籍:李航统计学方法