1 线性可分支持向量机和硬间隔最大化
1.1 定义
给定线性可分训练数据集,通过间隔最大算法或等价求解凸二次规划问题学得分离超平面:
w∗⋅x+b∗=0
相应的分类预测函数是:
f(x)=sign(w∗⋅x+b∗)
与感知机的对比:
线性可分支持向量机和感知机的分离超平面和决策函数完全一致。区别就在对参数w∗,b∗的求解上。支持向量机的要求更高。
1.2 优化算法
svm是要求间隔最大的分离超平面,这是一个约束最优化问题。可直接求解或先引入拉格朗日乘子,再等价求解其对偶算法。
1.2.1 学习算法-间隔最大化
间隔最大化的分割超平面等价于以足够大的置信度对训练集进行分类。以几何间隔(带符号的点到直线距离,分类正确为正,否则为负)来衡量“间隔“。假设样本集到分类超平面的几何间隔分别为γ1,γ2,...,γN。我们的目标就是找到最小的几何间隔,然后最大化它。
γ=min(γ1,γ2,...,γN)w,bmaxγ
等价于:
w,bmaxγs.t.∣∣w∣∣yi(w⋅xi+b)≥γ,i=1,2,...,N
根据几何间隔与函数间隔的关系γ=∣∣w∣∣γ^,函数间隔与几何间隔只相差w的二范数,而成倍的增大w,b不会改变分离超平面和几何间隔,只会影响函数间隔。不妨假设函数间隔为1。就得到下式:
w,bmax∣∣w∣∣γ^s.t.∣∣w∣∣yi(w⋅xi+b)≥∣∣w∣∣γ^,i=1,2,...,N
函数间隔等于1,得到:
w,bmin21∣∣w∣∣2s.t.yi(w⋅xi+b)≥1,i=1,2,...,N
线性可分SVM-最大间隔优化算法:
(1)构造约束最优化问题:
w,bmin21∣∣w∣∣2s.t.yi(w⋅xi+b)≥1,i=1,2,...,N
求解得到w∗,b∗。
(2)由此得到分离超平面:
w∗⋅x+b∗=0
决策函数:
f(x)=sign(w∗⋅x+b∗)
1.2.2学习算法-拉格朗日对偶算法
推导:
引入拉格朗日乘子a1,a2,...,aN构建拉格朗日函数:
L(w,b,a)=21∣∣w∣∣2+i=1∑Nai(1−yi(w⋅xi+b))(1)
上述约束最优化问题就变成了极小极大问题:
w,bminamaxL(w,b,a)
当满足KKT条件时,等价于优化其对偶问题,极大极小问题:
amaxw,bminL(w,b,a)
先来考虑内部极小问题,令ψ(a)=w,bminL(w,b,a)。ψ(a)分别对w,b求导并令其为0。
∂w∂L=w−i=1∑Naiyixi∂b∂L=−i=1∑Naiyi
令其等于0求得。
w=i=1∑Naiyixi(2)
i=1∑Naiyi=0(3)
再来求外部极大问题:
a∗=aargmaxψ(a)
将公式(2)(3)带入拉格朗日函数(1)中。ψ(a)等于
ψ(a)=21i=1∑Nj=1∑Naiajyiyj(xi⋅xj)+i=1∑Nai−i=1∑Naiyi(j=1∑Najyj(xj⋅xi))=−21i=1∑Nj=1∑Naiajyiyj(xi⋅xj)+i=1∑Nai
最大化maxψ(a)等价于最小化−minψ(a)。
maxψ(x)=−minψ(a)=21i=1∑Nj=1∑Naiajyiyj(xi⋅xj)−i=1∑Nai
于是原始问题就转化为对a的约束极小问题:
amin21i=1∑Nj=1∑Naiajyiyj(xi⋅xj)−i=1∑Nais.t.i=1∑Naiyi=0ai≥0,i=1,2,...,N(4)
根据(4)式求得a∗。进入可求导w∗,b∗。即求得了分离超平面和决策函数。
学习方法-对偶算法:
(1)构建约束最优化问题:
amin21i=1∑Nj=1∑Naiajyiyj(xi⋅xj)−i=1∑Nais.t.i=1∑Naiyi=0ai≥0,i=1,2,...,N(4)
求得最优解a∗=(a1∗,a2∗,...,aN∗)T。对应着每一个样本一个权重。
(2)计算w∗,b∗
根据公式(w)求得w∗
w∗=i=1∑Nai∗yixi
选择a∗中的一个正分量aj∗>0。也就是支持向量,由于支持向量在支撑超平面上,所以可以根据支持向量求得b∗。
b∗=yj−i=1∑Naiyi(xi⋅xj)
(3)带入w∗,b∗即可求得分离超平面和决策函数:
分离超平面:
w∗⋅x+b∗=0
决策函数:
f(x)=sign(w∗⋅x+b∗)
2 线性支持向量机和软间隔最大化
2.1 定义与优化方法
线性支持向量机不严格要求数据线性可分,近似线性可分即可。同时将硬间隔最大化放宽到软间隔最大化。**对每个样本引进一个松弛因子ξi≥0。让函数间隔加上松弛因子大于1即可。**这样约束条件就变为:
yi(w⋅xi+b)≥1−ξi
同时,要为每个松弛因子加上惩罚,目标函数变为
w,bmin21∣∣w∣∣2+Ci=1∑Nξi2
综合起来,约束最优问题变为:
w,bmin21∣∣w∣∣2+Ci=1∑Nξi2s.t.yi(w⋅xi+b)≥1−ξiξi≥0,i=1,2,...,N
注意:w的解是唯一的,而b的解可能不唯一,而是存在某一个区间内。
优化方法与线性可分SVM一样包括:软间隔最大化和对偶算法。思想一样,只是多了约束条件(不重复介绍了,参见李航老师的统计学习方法)。
2.2 合页损失函数
线性支持向量机学习策略是软间隔最大化,学习算法是凸二次规划。等价于最小化合页损失函数:
L=i=1∑N[1−yi(w⋅xi+b)]++λ∣∣w∣∣2
合页损失函数中第一项是经验损失(和感知机的类似,只是要求更加严格)。第二项是正则项:参数w的二范数。插入李航老师统计机器学习里关于合页损失函数的配图:

上图包含了三种损失函数:
3 非线性支持向量机和核函数
3.1核技巧
先简单介绍几个概念:
**核技巧:**首先使用变换将数据从原空间映射到另一个空间,然后在新空间用线性分类方法学习分类模型。
映射变换:ϕ(x)将x从输入空间映射到特征空间。
**核函数:**对所有的x,z,函数k(x,z)都满足:
k(x,z)=ϕ(x)⋅ϕ(z)
则称k(x,z)为核函数,ϕ(x)为映射函数。核函数的值域是R。是两个向量点积得到的一个数值。核技巧的思想是只定义核函数k(x,z)。而不需要显示的定义映射函数ϕ(x)。
3.2 svm中的核技巧
在线性支持向量机中,无论是目标函数还是决策函数(分离超平面),都只涉及实例与实例之间的点积xi⋅xj。在对偶问题的目标函数中可以用k(xi,xj)=ϕ(xi)⋅ϕ(xj)代替向量点积xi⋅xj。此时目标函数为:
mina21i=1∑Nj=1∑NaiajyiyjK(xi⋅xj)−i=1∑Nai
同样,分类决策的向量点积也使用核函数k(xi,xj)=ϕ(xi)⋅ϕ(xj)替换。即:
f(x)=sign(i=1∑Nai∗yiK(xi,x)+b∗)
不需要显示定义特征空间和映射函数,只需要给定核函数k(xi,xj)=ϕ(xi)⋅ϕ(xj)。
3.3 核函数的要求
给定一个函数,如何判断该函数能不能作为核函数呢?
k(x,z)=ϕ(x)⋅ϕ(z)为正定核的充要条件是对任意xI。k(x,z)对应的Gram矩阵是半正定矩阵。
k=[k(xi,xj)]m×m
一般很少认为自己定义核函数,而是使用已有的核函数。
3.4 常用核函数
(1)多项式核函数
k(x,z)=(x⋅z+1)p
(2)高斯核函数
k(x,z)=exp(−2σ2∣∣x−z∣∣2)
3.5 学习算法
(1)选取适当核函数k(x,z)和参数C。构造约束最优化问题:
mina21i=1∑Nj=1∑NaiajyiyjK(xi⋅xj)−i=1∑Nais.t.i=1∑Naiyi=00≤ai≤C,i=1,2,...,N(5)
求得最优解a∗=(a1∗,a2∗,...,aN∗)T。
(2)计算w∗,b∗
w∗=i=1∑Nai∗yixi
选择一个a∗的正分量0<aj∗<0,计算b∗。
b∗=yj−i=1∑Nai∗yiK(xi⋅xj)
(3)构造决策函数
f(x)=sign(i=1∑Nai∗yiK(xi,x)+b∗)
3.6 SMO序列最小优化算法
Sequential minimall optimization(SMO)是一种高效实现svm学习的算法。在3.4学习算法中,就是求解拉格朗日因子a∗。一个变量ai对应一个样本(xi,yi)。变量总数等于样本总量N。计算复杂度高。
SMO是一种启发式的算法:其基本思路是,如果所有变量都满足此最优化问题的KKT条件,那么就得到了最优化问题的解。
SMO分为两步:
(1)选择两个变量。
- 选择第一个变量:称为外层循环,选择违反KKT条件最严重的样本点。具体的是逐次检测样本点(xi,yi)是否满足KKT条件。
- 选择第二个变量:称为内层循环,希望第二个变量有足够大的变化。
(2)优化这两个变量,使得整体loss下降。
注意:选择的两个变量只有一个是自由变量。由约束条件,一个确定,另一个也随之确定。
高频面试题:
(1)如何选择核函数
根据恩达的公开课,主要考虑特征数n与样本数m。
| 特征数据情况 |
选择 |
原因 |
| 特征数n很多 |
LR,线性核SVM |
输入空间已足够复杂,无需核变换 |
| 特征数n一般,m一般 |
高斯核svm |
数据量不大,可使用计算复杂的高斯核 |
| 特征数n一般,m很多 |
手工设计特征。然后使用LR,线性核SVM |
数据量很大时,要避免使用非线性svm。主要从特征上着手,补充特征 |
(2)为什么要通过求解对偶算法求解SVM
- 方便引入核函数,对偶问题转化成了样例的点积形式
- 将原始问题的约束转化成对偶问题中的等式约束。
- 简化求解。原始问题的参数是(d+1)维的(d是w的维度也就是特征的维度)。而对偶问题的参数a是N维的,只与样本数量有关。便于设计复杂特征。
- 求解高效,最优解a∗是稀疏的。只有支持向量的a不为0。
(3)svm对异常值敏感么,缺失值敏感么?
参考:
[1]李航,统计学习方法
[2]知乎:【机器学习面试总结】—— SVM
[3]知乎:SVM 高频面试题