机器学习实战【5】(SVM-支持向量机)

本博客记录《机器学习实战》(MachineLearningInAction)的学习过程,包括算法介绍和python实现。

SVM(支持向量机)

SVM是一种分类算法,通过对训练集数据的分析找到最好的分隔平面,然后用该平面对新数据进行分类。本篇文章介绍SVM的总体思路,通过一些数学推导把初始问题不断简化,最后转化为一个比较简单的二次优化问题。

线性二分类器

设想二维平面上的一组数据点,分为两个类别:

机器学习实战【5】(SVM-支持向量机)_第1张图片

用平面上的直线 wx+b=0 (w和x是向量)来对数据进行分类,而SVM的目的就是找到最好的一条直线。这条直线需要满足两个条件,一是把两类数据完全分开,即同一类的数据落在直线的一边,二是两类数据中最靠近直线的那些点(称为支持向量)离直线的距离必须尽可能的大。在图中直观的体现就是直线两边的空白间隔区尽可能地大。

几何间隔

点到直线的距离(推广到高阶就是点到超平面的距离)称为几何间隔(Geometrical margin),计算公式如下,其中的分子 y(wx+b) 称为函数间隔:

g=y(wx+b)||w||

上式中的y表示数据点的类别,在直线上方的点类别为1,下方为-1,这使得有错误分类点的那些直线会得到负的几何间隔,从而被筛选掉。
现在我们可以通过几何间隔来描述最优直线的条件,设 g 是数据集中离直线最近的点到直线的几何间隔, gi 表示某个数据点到直线的几何间隔,则问题描述为:
maxg,s.t.,gig

即最大化数据集中最小的几何间隔。
接着继续对问题进行简化,函数间隔的大小可以通过成倍地改变w来改变,直线本身却不会变化,这意味可以取合适的值使得这些支持向量与直线的函数间隔为1,这样,问题就变成:
max1||w||,s.t.,yi(wxi+b)1

进一步分析,该式又等价于:
min12||w||2,s.t.,yi(wxi+b)1

这是一个带约束的二次优化问题,可以通过 拉格朗日对偶的方法来解决。

拉格朗日对偶

通过引入拉格朗日乘子把条件统一到式子中进行优化,构造拉格朗日函数,其中 α>0

L(w,b,α)=12||w||2i=1nαi(yi(wxi+b)1)

α 作为自变量求取该式的最大值,可以得到:
maxα:αi>0L(w,b,α)={12||w||2,,

这样,问题:
min12||w||2,s.t.,yi(wxi+b)1

就等价于问题:
minw,bmaxα:αi0L(w,b,α)

即先以 α 为变量最大化拉格朗日函数,再以 w,b 为变量将其最小化。
交换求最值的顺序,得到原问题的对偶问题:
maxα:αi0minw,bL(w,b,α)

这个对偶问题更易求解,并且在满足 kkt条件的情况下,两者的解相同,于是问题又转化为求对偶问题的解。
首先固定 α 求解函数值最小化时的参数 w,b 。分别另函数对 w b 的导数为0,分别得到:
w=i=1naiyixi

i=1naiyi=0

把这两个式子带回原式经过一番化简,消去 w,b 得到:
L(w,b,α)=i=1nαi12i,j=1nαiαjyiyjxTixj

现在,问题转化为:
maxαi=1nαi12i,j=1nαiαjyiyjxTixjs.t.,αi0,i=1,...,ni=1naiyi=0

这是一个二次优化问题,可以用高效的SMO算法解决,具体实现将在以后的文章中介绍。

总结

总的来说,SVM的思路是找到一个最优的分隔平面来进行分类,最优的判断标准是最靠近分类平面的数据点(也就是支持向量)到分类平面的几何间隔最大,这是一个带条件的优化问题。通过拉格朗日对偶,把最初的问题转化为一个更简单的优化问题,其中的变量是拉格朗日乘子 α ,实现SVM便是要找到这些 α 。以后会介绍一种最流行的求解方法(SMO算法)来解决这个问题,并构造SVM分类器。
限于篇幅,本文中对原理推导只给出了大致的步骤,对于拉格朗日对偶及kkt条件的数学原理未做解释(因为我也不是很懂),要了解其中细节,这部分内容还需要单独学习一波。

你可能感兴趣的:(机器学习)