1.1SVM模型
和感知机模型一样,SVM(支持向量机模型)也是旨在求出n维空间的最优超平面将正负类分开。这里的达到的最优是指在两类样本点距离超平面的最近距离达到最大,间隔最大使得它区别于感知机学习,SVM中还有核技巧,这样SVM就是实际上的非线性分类器函数。
1.2线性可分支持向量机
跟前面定义的问题一样,假设给定一个特征空间上的训练数据集
xi∈X=Rn,yi∈Y={+1,−1},i=1,2,3,⋯,N,表示N个样本实例,xi为第i个特征向量(实例),yi为xi的类标记。
目标是找到一个分离超平面,将正负类分别分到平面的两侧。分离超平面对应方程 w⋅x+b=0 ,当数据集是线性可分的时候,这样的超平面存在无数个,感知机利用误分类的点来求解,有无数个解。SVM利用间隔最大化求得最优超平面,解唯一。设分类决策函数为
1.2.1函数间隔和几何间隔
上图中有A,B,C三个点,其中A点离超平面较远,将其决策为正类的确信度比较高,C点预测为正类的置信度就不是很高,相同的,B位于A,C之间,所以将其预测为正类的置信度也在点A和点C之间。一般来说,一个点距离超平面的远近决定了其分类结果的置信度,所以最优的平面即为离超平面最近的样本点到其的距离最大的时候。
给定样本点(
xi,yi
),超平面(w,b),超平面关于该样本点的函数间隔即为
yi(w⋅xi+b)
,定义超平面关于整个数据集T的超平面的函数间隔为为超平面关于所有样本点的函数间隔最小值。函数间隔能有效表示分类预测的正确性及确信度。
但是,对于一个超平面(w,x)来说,通过缩放变换(成倍的放大缩小w,b),超平面并没有改变,但是函数间隔却改变了。所以可以通过对超平面的法向量w加以约束,如规范化令||w||=1,这样间隔就是确定的,这时候的函数间隔即为几何间隔,即为点(
xi,yi
)到超平面(w,b)的距离
因为y只取+1,-1,只影响符号,不影响数值。 但是几何间隔一般是指带符号的距离(李航老师书)上图中两条虚线之间的距离即为间隔
所以当||w||=1时,函数间隔和几何间隔相等,当w和b成倍放大缩小的时候,函数间隔也会按照比例改变,几何间隔是不变的。
总结一下:函数间隔即为即为 yi(w⋅xi+b) ,但是在w,b成倍缩放情况下,超平面不变,函数间隔不稳定,加个约束,几何上的点到直线的距离 w⋅xi+b||w|| 加上符号以后: yi(w⋅xi+b)||w|| 为几何间隔,为了便于求得最优解,我们通常通过缩放变换使得函数间隔为1。所以SVM求解的目标函数为函数间隔为1情况下的几何间隔。
1.2.2 SVM学习算法
支持向量机的目的在于求得最优的即几何间隔最大的超平面,在样本数据是线性可分的时候,这里的间隔最大化又叫硬间隔最大化(训练数据近似可分的话就叫软间隔)
支持向量机的学习算法可以表示为下面的约束最优化问题:
前面有提到,可以通过缩放变换(w,b)改变函数间隔的大小,但是超平面不改变,这里我们可以使函数间隔为1,这样问题变为
很多书的分子是2, 训练集样本点中距离超平面最近的样本称为支持向量,因为存在正负类的支持向量,所以double一下,这里对求得最后最优解并不影响。 值得指出的是,决定分离超平面的时候只有支持向量起作用,因为他们决定了函数间隔和几何间隔,其他点不起作用。
求解 maxw,b1||w|| ,既是求
这就是支持向量机的目标函数,这是一个 凸二次规划问题,所以支持向量机的学习算法又叫 最大间隔法。那么该如何求得在约束条件下最优的超平面的参数(w,b)呢?
1.2.3 SVM对偶算法
SVM通过对其对偶问题的求解求得最优的超平面参数(w,b),对于目标函数(12),目标函数是二次的,约束条件是线性的,是一个标准的QP问题,但是可以通过拉格朗日对偶性求得对偶问题的最优解,一者,这样更高效,二者还可以自然引入核函数,推广到非线性的分类问题。
首先构建拉格朗日函数,对每一个约束条件引进拉格朗日乘子
αi≥0,i=1,2,3,⋯,N
,定义拉格朗日函数:
其中的 α=α1,α2,⋯,αn 为拉格朗日乘子向量。我们令:
对于式子(4)来说,要是存在某个样本不满足条件 yi(w⋅x+b)≥1 ,那么 θ=∞ ,(只要令 αi=∞ 就可以),若是所有条件都满足,则有 θ(w,b)=12||w2|| ,即令后面减掉的数为零即可获得最大值。保证减号后面的数字为0,当 1−yi(w⋅xi+b)=0 ,即为点为支持向量(最靠近超平面的点)时, /alphai 可以为任意值,当 1−yi(w⋅xi+b)>0 时,非支持向量时, /alphai=0 ,这里可以解释为什么SVM只跟支持向量有关。这样我们的目标函数变成了:
p∗ 表示要求的最优解,和我们最初要求的问题是等价的。交换一下最大最小的位置:
交换之后的解 d∗ 不等价于原问题,和 p∗ 是对偶问题,并且有 d∗≤p∗ ,直观解释就是最大值中最小的总比最小值中的最大值要大,在满足某些条件的时候,两者相等,这里的条件即为 KKT条件。
将公式(4)后面括号展开,就得到
对w,b分别求导,
并令其等于0:
带入公式5,得:
这样,所求目标函数变为:
对于上式,可以看出,求出 α 便求出了超平面w,b:
求解公式7中的 α ,可以用著名的 SMO算法。
2.核函数
上文提到,在求解出
w=∑Ni=1αiyixi
后,对于一个新的点x,带入超平面方程,得
这样每预测一个新的点x时,只需要计算它与训练样本中的点的内积,这是引入核函数的重要前提。这里与之求内积的就是支持向量,非支持向量的 α 系数为0。
2.1.非线性分类问题
上图所示,在左边低维度上,只能靠一个非线性平面(椭圆)将正负类分开,映射到高维(右图),可以看到在高维度下可以找到这样一个超平面。这就是非线性可分的。也就意味着,在我们遇到核函数之前,面对这类问题,需要完成两步:1.首先使用一个非线性映射将数据变换到一个特征空间F,2. 然后在特征空间使用线性学习器分类。分类决策函数如下:
其中, Φ(x) 就是将样本映射到高维空间的映射函数。
2.2.核函数
在上文我提到过对偶形式,而这个对偶形式就是线性学习器的一个重要性质,这意味着假设超平面可以表达为训练点的线性组合,因此决策规则可以用测试点和训练点的内积来表示:
其中 <Φ(xi),Φ(x)> <script type="math/tex" id="MathJax-Element-337"><\Phi (x_i),\Phi (x)></script>表示两个向量的内积,即上文中的点乘符号。如果存在一种计算方式,能够在当前低维的特种空间直接计算 <Φ(xi),Φ(x)> <script type="math/tex" id="MathJax-Element-338"><\Phi (x_i),\Phi (x)></script>,那么上述的计算非线性可分问题的两个步骤就能合成一步建立一个非线性的分类器。这个就是核函数:
李航老师的《机器学习》中:对偶形式的基本思想是,将w,b表示为实例x和标记y的线性组合,求解该线性组合的系数而求得w,b。有了核函数,就不用关心映射之后的维度有多少(有些甚至是无限维,例如高斯核)。
2.2.线性不可分和软间隔最大化
并不是所有的样本都是线性可分或者非线性可分的,面对不可分的情况,即公式3中的约束条件不成立。可以引进一个松弛变量
ξi≥0
,使得函数间隔加上松弛变量大于等于1,这样公式3约束条件就变为:
每个松弛变量 ξi 给一个代价,目标函数变为:
C为惩罚系数。之后的推导和对偶问题同上。