一、SVM概念
支持向量机(Support Vector Machine, SVM)本身是一个__二元分类算法__,是对感知器算法模型的一种扩展,现在的SVM算法支持__线性分类__和__非线性分类__的分类应用,并且也能够直接将SVM应用于__回归应用__中,同时通过OvR或者OvO的方式我们也可以将SVM应用在__多元分类__领域中。在不考虑集成学习算法,不考虑特定的数据集的时候,在分类算法中SVM可以说是特别优秀的。
在感知器模型中,算法是在数据中找出一个划分超平面,让尽可能多的数据分布在这个平面的两侧,从而达到分类的效果,但是在实际数据中这个符合我们要求的超平面是可能存在多个的。
在感知器模型中,我们可以找到多个可以分类的超平面将数据分开,并且优化时希望所有的点都离超平面尽可能的远,但是实际上离超平面足够远的点基本上都是被正确分类的,所以这个是没有意义的;反而比较关心那些离超平面很近的点,这些点比较容易分错。所以说我们只要__让离超平面比较近的点尽可能的远离这个超平面__,那么我们的模型分类效果应该就会比较不错。SVM其实就是这个思想。
__SVM核心思想:__找到离分割超平面较近的点(预测错误可能会高),然后想办法让它们离超平面的距离远。
PS: SVM在若干年前,当数据量还比较少的时候,SVM是最好的分类模型。但是现在随着数据量的不断增大,SVM模型运算速度较慢的缺点开始暴露。而且随着这些年集成学习的不算成熟,现在SVM普遍用于集成学习中基模型的构建。
几个重要的概念:
__线性可分(Linearly Separable):__在数据集中,如果可以找出一个超平面,将两组数据分开,那么这个数据集叫做线性可分数据。
__线性不可分(Linear Inseparable):__在数据集中,没法找出一个超平面,能够将两组数据分开,那么这个数据集就叫做线性不可分数据。
__分割超平面(Separating Hyperplane):__将数据集分割开来的直线/平面叫做分割超平面。
__间隔(Margin):__数据点到分割超平面的距离称为间隔。
__支持向量(Support Vector):__离分割超平面最近的那些点叫做支持向量。
二、线性可分SVM
回顾: 支持向量到超平面的距离为:
PS:在SVM中支持向量到超平面的函数距离一般设置为1;
SVM模型 是让所有的分类点在各自类别的支持向量的两边,同时要求支持向量尽可能的远离这个超平面,用__数学公式__表示如下:
;
这里的(xs,ys)即__支持向量__,根据KKT条件中的对偶互补条件(松弛条件约束),支持向量必须满足以下公式: