1、概念
支持向量机的基本模型是定义在特征空间上的间隔最大的线性分类器。间隔最大使它有别于感知机;支持向量机还包括核技巧,这使它成为实质上的非线性分类器。
(1)数据线性可分:硬间隔最大化——线性分类器(线性可分支持向量机);
(2)数据近似线性可分:软间隔最大化——线性分类器(线性支持向量机);
(3)数据非线性可分:和技巧+软间隔最大化——非线性支持向量机;
当输入空间为欧式空间或离散集合、特征空间为希尔伯特空间时,核函数表示将输入从输入空间映射到特征空间得到的特征向量之间的内积。非线性支持向量机等价于隐式地在高维特征向量中学习线性支持向量机。
2、线性可分支持向量机与硬间隔最大化
给定线性可分训练数据集,通过间隔最大化或等价地求解相应的凸二次规划问题学习得到的分离超平面为:
以及相应的分类决策函数
称为线性可分支持向量机
在二分类问题中,假设一条平面分隔一组数据,有ABC三个点分在平面正类一侧,如果A距离平面最远,若预测该点为正类,就比较确信预测是正确的。如果C距离平面最近,那么预测该点是正类的确信度就小。
①超平面关于(xi,yi)的函数间隔 ri=yi(w·xi+b),感知机里提到过
②超平面关于数据集T的函数间隔为r=min(ri)
③因为如果我们同时将w,b扩大或者缩小两倍,会导致平面没变,函数间隔却变了,所以我们引入几何间隔r’=r/|w|
其实就是点到直线的距离。
对间隔最大化的直观解释为:不仅将正负实例点分开,而且对最难分的实例点也有足够大的确信度将他们分开。可以画图理解一下,就是调整平面似的距离平面最小的点和平面的距离拉开。
那么如何使间隔最大化呢?
我们可以表示为下面的约束最优化问题:
s.t.
就是在后面这个式子的约束条件只下,求最大的r
这是函数间隔,函数间隔的r并不影响优化求解的问题。所以我们可以让r=1,然后修改以下式子改成几何间隔:
在如下约束下
使得||w||最小。
可以证得,最大间隔分离超平面的存在是唯一的。
支持向量:对yi=+1的正例点,支持向量在超平面H1:w·x+b=1上;对yi对yi=-1的负例点,支持向量在超平面H1:w·x+b=1上。在H1,H2上的点就是支持向量。

经过一系列复杂的推导可以得到构造并求解最优化问题:

一旦确定了上面提到的a={a1,a2,a3…},平面就确定下来了。SVM的主要工作就是求解这些alpha。
3、线性支持向量机
线性不可分意味着某些样本点(xi,yi)不能满足函数间隔大于等于1的约束条件。为了解决这个问题,引进一个松弛变量ξ>=0,使得函数间隔加上松弛变量>=1。这样约束条件为:
约束条件
目标函数:
与线性可分支持向量机算法不同的地方在于:
选择惩罚参数C
①第一步中(1)0<=ai<=c
②第二步中(2)0<aj*<C
4、核函数
我们可以把核函数想象成一个包装器或者接口,他能把数据从某个很难处理的形式转化成另一个比较容易处理的形式。核函数将数据从低维数据映射到高维空间,经过空间转换之后,我们可以在高维空间中解决线性问题,相当于在低维空间中解决非线性问题。
核函数的定义
对所有的x,z(x,z∈输入空间),都有
K(x,z)=f(x)·f(z)
其中f为输入空间到特征空间的映射
则称K(x,z)为核函数,f(x)为映射函数。
在前面提到的算法中,我们可以用核函数来替代目标函数中两个数的内积,还有分类决策函数中的内积。
我们通常所说的核函数就是正定核函数。
5、SMO算法
序列最小最优算法(SMO)算法的工作原理是:每次循环中选择两个alpha进行优化处理。一旦找到一对合适的alpha,就增大其中一个的同时减小另一个。这里的合适就是alpha符合一定的条件:这两个alpha要在间隔边界之外,且没有进行过区简化处理或者不在边界上。
我们有约束条件:对aiyi求和总是等于0,所以一定要同时改变两个alpha。
6、代码
sklearn实例:
from sklearn.svm import SVC
clf = SVC()
clf.fit(X_train, y_train)
clf.score(X_test, y_test)
#output:0.96