本博客记录《机器学习实战》(MachineLearningInAction)的学习过程,包括算法介绍和python实现。
SVM(支持向量机)
SVM是一种分类算法,通过对训练集数据的分析找到最好的分隔平面,然后用该平面对新数据进行分类。本篇文章介绍SVM的总体思路,通过一些数学推导把初始问题不断简化,最后转化为一个比较简单的二次优化问题。
线性二分类器
设想二维平面上的一组数据点,分为两个类别:
用平面上的直线 wx+b=0 (w和x是向量)来对数据进行分类,而SVM的目的就是找到最好的一条直线。这条直线需要满足两个条件,一是把两类数据完全分开,即同一类的数据落在直线的一边,二是两类数据中最靠近直线的那些点(称为支持向量)离直线的距离必须尽可能的大。在图中直观的体现就是直线两边的空白间隔区尽可能地大。
几何间隔
点到直线的距离(推广到高阶就是点到超平面的距离)称为几何间隔(Geometrical margin),计算公式如下,其中的分子 y(wx+b) 称为函数间隔:
g=y(wx+b)||w||
上式中的y表示数据点的类别,在直线上方的点类别为1,下方为-1,这使得有错误分类点的那些直线会得到负的几何间隔,从而被筛选掉。
现在我们可以通过几何间隔来描述最优直线的条件,设 g 是数据集中离直线最近的点到直线的几何间隔,
maxg,s.t.,gi≥g
即最大化数据集中最小的几何间隔。
接着继续对问题进行简化,函数间隔的大小可以通过成倍地改变w来改变,直线本身却不会变化,这意味可以取合适的值使得这些支持向量与直线的函数间隔为1,这样,问题就变成:
max1||w||,s.t.,yi(wxi+b)≥1
进一步分析,该式又等价于:
min12||w|