第七章:支持向量机
线性支持向量机
线性可分或硬间隔支持向量机
前提:训练数据集线性可分;
学习目标:特征空间的分离超平面:w⋅x+b=0,w=0;这个超平面是唯一的;
学习策略:最大间隔法,等价于下列的最优化问题:
w,bmin21∣∣w∣∣2
st.yi(w⋅xi+b)−1≥0,i=1,2,...N
由于是条件约束的最优化问题,所以自然想到采用拉格朗日乘数法来求解问题,一般转化为求解对偶问题,引入拉格朗日乘子后,原始问题成为下式:
L(w,b,α)=21∣∣w∣∣2−i=1∑Nαiyi(w⋅x+b)+i=1∑Nαi;,每一个α对应一个样本;
原始问题的对偶问题是极大极小问题:
αmaxw,bminL(w,b,α);
-
先求解极小化问题:求导、等于0解得:
w=i=1∑Nαiyixi;
i=1∑Nαiyi;
-
然后使用最优化方法来求解α
αmin21i=1∑Nj=1∑Nαiαjyiyj(xi⋅xj)−i=1∑Nαi
s.t.i=1∑Nαiyi=0;αi≥0,i=1,2,...N;
-
代入1中所求得的表达式,得到 w、b的值,得到分离超平面和决策函数;
求得的α中,对于那些αj>0(这些点被称为支持向量:即落在间隔边界(yj(w⋅xj+b)−1=0)上的那些点,只有这些点才对分离平面的确定起作用,是距离分离超平面最近的实例点);可借此求得b的值:
b=yj−i=1∑Nαiyi(xi⋅xj);
超平面对于某个训练集的各个间隔定义如下:
- 函数间隔:γ^=i=1,...Nminyi(w⋅xi+b),(所有实例点中最小的函数间隔即为该分离超平面对于训练集的函数间隔)函数间隔可以表示分类预测的正确性及确信度,但由于其量级随着w、b的比例变化而变化,所以引入几何间隔的概念;
- 几何间隔:γ=∣∣w∣∣γ^,这时,w、b比例变化时,几何间隔是不变的;
线性不可分或软件隔支持向量机
对于有些线性不可分的数据集来说,也可以采用类似线性可分的方法来求得分离超平面;方法是为每个样本点引进一个松弛变量 ϵi≥0;
约束条件变为:yi(w⋅x+b)≥1−ϵi;
原始问题变为:
w,bmin21∣∣w∣∣2+Ci=1∑Nϵi
st.yi(w⋅xi+b)≥1−ϵi,i=1,2,...N
ϵi≥0,i=1,2,...,,N
线性不可分的线性支持向量机知识多了一个惩罚系数:C,目标函数有两层含义:使间隔尽量大,同时使误分类点个数尽可能少
对偶问题为:
αmin21i=1∑Nj=1∑Nαiαjyiyj(xi⋅xj)−i=1∑Nαi
s.t.i=1∑Nαiyi=0;0≤αi≤C,i=1,2,...N;
求得了对应的α之后,对于那些0<αj<C的那些实例点,根据KTT条件,与线性可分SVM一致,可求得w、b值:
w=i=1∑Nαiyixi;
b=yj−i=1∑Nαiyi(xi⋅xj);
线性SVM的分类决策函数都是:
f(x)=sign(w⋅x+b)
根据最后学习到的w、b、α,可以求得松弛变量的值,分一下几种情况:
- 0<αi<C;这一类实例点全部落在间隔边界上,即=0;$
-
α=C;
1. 若0<ϵi<1;分类正确,点落在分割面和分割边界之间;
2. 若ϵi=1,点落在分离超平面上;
3. ϵi>1,误分类点;
合页损失函数
线性支持向量机还有另一种解释,就是最小化以下损失函数:
w,bmini=1∑N[1−yi(w⋅xi+b)]++λ∣∣w∣∣2,λ=2C1;
上式第一项L(y(w⋅x+b)=[(1−y(w⋅x+b)]+即为合页损失函数;下标+的意义为【】内的数>0,则取值为本身,否则取为0;就是说样本点被正确分类时,代价为0,否则损失就是1−yi(w⋅xi),也就是ϵi(到间隔边界的函数距离)
合页损失函数翻译了SVM不仅要正确分类,而且确信度足够高(函数间隔大于等于最大间隔)的时候损失才为0;
合页函数图:
图中虚线表示的是感知机的损失函数:

非线性支持向量机
非线性向量机就是采用一定的技巧将输入空间映射到某一特征空间,让原本的非线性分类问题转为线性分类问题,这样,就可以直接使用线性SVM学习方法来学习分类模型,核技巧就是这样的方法;
核函数和映射函数
K(x,z)=ϕ(x)⋅ϕ(z),ϕ(x)就是映射函数
这样就可以把对偶问题中的向量积xi⋅xj用核函数K(x,z)代替,
核函数
最小序列最优化方法(SMO:sequential minimal optimization)
SMO算法的思想就是:对于最终求得的α都会满足KTT条件,所以,当出现不满足KTT条件的点时(选取两个这样的变量,其中一个为自由变量),就可以对目标函数进行优化,从而更新α的值,把原本的复杂问题转变为一个两个变量的优化问题,而这种子问题又可以通过解析方法求解,大大提高了运算速度;
求解两个变量二次规划的解析方法
将除去两个变量外的其余α当做常数,然后将对偶问题转化为子问题对选取的两个变量进行求解,采用常规单变量求导即可得到沿约束方向的极值,根据约束条件可以求得另一个变量的更新值:
只考虑约束条件:
a1y1+a2y2=T(常数),不考虑 0≤α≤C;求得:
a2new,unc=a2old+ηy2(E2−E1);
其中η=K11+K22−2K12,E为对实例的预测值与实际函数值之差:
Ei=j=1∑NαjyjK(xj,xi)+b−yi,i=1,2;
结合0≤α≤C;进一步求得:
a2new=⎩⎪⎨⎪⎧H,a2new,unc,L,a2new,unc>HL≤a2new,unc≤Ha2new,unc≤L
1.y1=y2,L=max(0,a2old−a1old),H=min(C,C+a2old−a1old);
2.y1=y2,L=max(0,a2old+a1old−C),H=min(C,a2old+a1old);
a1new=a1old+y1y2(a2old−a2new);
选择变量的启发式方法(?)
选择两个变量,其中至少有一个是违背KTT条件的(不然表示优化完成);
外层循环(选择第一个变量):
遍历满足条件 0<αi<C的样本点,这些点是在间隔边界上的支持向量;若都满足KTT,则遍历全部训练集;
内层循环(选择第二个变量):
考虑使得∣E1−E2∣最大的那个样本点,这样可以加快算法速度;如果不能找到使目标函数有足够下降的点,采用启发式规则选择第二个变量:遍历在间隔边界上的支持向量点,直到目标函数有足够的下降,否则,遍历整个训练集,若仍没有找到,放弃外循环选择的第一个变量,重新开始外循环、内循环。
b和E的更新
在求得了新的α之后,需要更新相应的b、E值;
疑问:每一个样本都计算E的话,对于那些距离分离面远的点,E岂不是很大?