支持向量机(SVM)
支持向量机是监督学习中最有影响力的方法之一。类似于逻辑回归,这个模型也是基于线性函数 w⊤x+b 的。不同于逻辑回归的是,支持向量机不输出概率,只输出类别。当 w⊤x+b 为正时,支持向量机预测属于正类。类似地,当 w⊤x+b 为负时,支持向量机预测属于负类。
在机器学习中,SVM首次实现了经验风险和结构风险的结合作为优化准则,从而使得学习到的模型具有更好的鲁棒性。接下来我们以线性可分的二值分类问题为背景进行SVD原理的介绍,假设有 N 个样本,其特征是2维的,其标签情况显示如下图,而我们SVM的最终目的就是求出一条分割线(在高维空间中称之为超平面)能够完成分类任务。
![[监督学习]之支持向量机 [监督学习]之支持向量机](/default/index/img?u=L2RlZmF1bHQvaW5kZXgvaW1nP3U9YUhSMGNITTZMeTl3YVdGdWMyaGxiaTVqYjIwdmFXMWhaMlZ6THprd05TOHhNemRsTVRJNU5UUmlOVE5pTXpWall6RmhNRGMxTWpZNFlqUmlNemhtTVM1d2JtYz0=)
从经验风险的角度来看,如果只需要满足分类的正确率的要求,该问题的分割线是存在无数条的;可是我们还有更高的要求,我们希望找到其中最优的那条分割线,也就是说具有更好的鲁棒性,即使有一定噪声存在,也能够更好地区分样本的类别,就是所谓的结构风险最小。这种想法反映到上图中,就是寻找那条红线,它不仅需要满足分类正确的要求,还必须是所有分割线中margin最大的那一个,这里的margin就是指各类样本距离分割线的最小距离的和,即为图中两条蓝色虚线之间的距离 ,我们不妨设红色分割线距离各个类别样本的最短距离相等并记为 d 。
我们设待求的分割线为 wTx+b=0 ,则两侧虚线的表达式分别为 wTx+b=−1,wTx+b=+1 。
假设蓝色虚线的表达式为 wTx+b=c ,我们对等式两边同时除以 c ,则有 cwTx+cb=1 ,同时对于红色分割线也可以作此处理,有 cwTx+cb=0 ,若令 w=cwT,b=cb ,则有上述结果。这就是分割线参数的缩放处理。
从而有分割线的margin数学表示 D=2d=∣∣w∣∣2 ,也就有了我们的优化目标:
max∣∣w∣∣2
那么如何保证样本的分类正确呢?我们可以观察到:当样本为正样例 yi=+1 时,有 wTxi+b≥+1 ;当样本为负样例 yi=−1 时,有 wTxi+b≤−1 。将这两个限制条件归结为一个条件表示则为
yi(wTxi+b)≥1
因此,将SVM转化为一个不等式约束的优化问题
⎩⎨⎧wmin21∣∣w∣∣2st.yi(wTxi+b)≥1,i=1,2,⋯,N
简单例子
![[监督学习]之支持向量机 [监督学习]之支持向量机](/default/index/img?u=L2RlZmF1bHQvaW5kZXgvaW1nP3U9YUhSMGNITTZMeTl3YVdGdWMyaGxiaTVqYjIwdmFXMWhaMlZ6THpRMk5DOHpPRFUwTVRFNVkyVXhNMlF5T1RZek1tTm1NalF6TXpJd1pqQXlOV1ptTUM1d2JtYz0=)
![[监督学习]之支持向量机 [监督学习]之支持向量机](/default/index/img?u=L2RlZmF1bHQvaW5kZXgvaW1nP3U9YUhSMGNITTZMeTl3YVdGdWMyaGxiaTVqYjIwdmFXMWhaMlZ6THpNd09DODRPREZrTkdNM09HUTFaV00wTmpFNE1qQXhOak5qWm1VeVlXTXhaall6WXk1d2JtYz0=)
解答:
i. 如图所示
ii. H2:wTx+b=−1
iii. 当样本的标签为 yi=−1 时,有 wTxi+b≤−1 ;当样本的标签为 yi=+1 时,有 wTxi+b≥+1 ,经过总结规律从而有 yi(wTxi+b)≥1,∀i∈{1,2,⋯,N} 。
iv. 训练数据本身是线性可分的,且不含有噪声。
v. 已知 H1:wTx+b=1,H2:wTx+b=−1 ,由求平行直线的距离公式知
D=∣∣w∣∣22
vi. 优化问题的表达式为
⎩⎨⎧min21∣∣w∣∣2st.yi(wTxi+b)≥1,i=1,2,⋯,N
vii. 在这种情况下,具体的优化公式为
⎩⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎧min21(w12+w22+w32)w1+2w2+3w3+b≥14w1+w2+2w3+b≥1w1−2w2+w3−b≥1
从而有拉格朗日函数
L(w,b)=21(w12+w22+w32)−λ1(w1+2w2+3w3+b−1)−λ2(4w1+w2+2w3+b−1)−λ3(w1−2w2+w3−b−1)
其KKT条件为
⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧∂w1∂L=w1−λ1−4λ2−λ3=0∂w2∂L=w2−2λ1−λ2+2λ3=0∂w3∂L=w3−3λ1−2λ2−λ3=0∂b∂L=−λ1−λ2+λ3=0λ1(w1+2w2+3w3+b−1)=0λ2(4w1+w2+2w3+b−1)=0λ3(w1−2w2+w3+b−1)=0λ1≥0λ2≥0λ3≥0
解出
⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧λ1=0.1λ2=0λ3=0.1w1=0.2w2=0w3=0.4b=−0.4
拉格朗日对偶问题
从上一节的简单例子中,我们可以通过KKT条件求解SVM的问题,但是当样本数目特别多时,这种求解方法就明显力不从心了。因此需要寻找一种更简便的方法,而拉格朗日对偶问题是求解SVM的一种有效的方式。
原始问题
假设 f(x),ci(x),hj(x) 是定义在 Rn 上的连续可微函数,考虑约束最小化问题
⎩⎪⎪⎨⎪⎪⎧s.t.x∈Rnminf(x)ci(x)≤0,i=1,2,⋯,khj(x)=0,j=1,2,⋯,l
称此约束优化问题为原始问题。
首先,引入广义拉格朗日函数
L(x,α,β)=f(x)+i=1∑kαici(x)+j=1∑lβihi(x)
这里的 x=[x1,x2,⋯,xn]T∈Rn ,αi,βi 是拉格朗日乘子,αi≥0 ,考虑 x 的函数:
θp(x)=α,β,αi≥0maxL(x,α,β)
这里的下标 p 表示原始问题。针对 x ,可以分为两种情况分别考虑。
- 假设给定某个 x ,如果 x 违反原始问题的约束条件,也就是某个 i 使得 ci(x)>0 或者存在某个 j 使得 hj(x)=0 ,那么就有
θp(x)=α,β,αi≥0maxf(x)+i=1∑kαici(x)+j=1∑lβjhj(x)=+∞
上式是怎么来的呢?因为若某个 i 使得 ci(x)>0 ,这个时候为求得最大值,不妨设 αi→+∞ ,其余参数不管怎样,都会有 θp(x)→+∞ ;如若存在某个 j 使得 hj(x)=0 ,为求得最大值,我们不妨令 βjhj(x)→+∞ ,同样不管其他参数如何,都会有 θp(x)→+∞ 。
- 假设给定某个 x ,如果 x 满足原始问题的约束条件,则有
θp(x)=α,β,αi≥0maxf(x)+i=1∑kαici(x)+j=1∑lβjhj(x)=f(x)
因此,可以总结为
θp(x)={f(x),+∞,x满足原始问题约束其他
这时,我们发现极小化问题
xminθp(x)=xminα,β,αi≥0maxL(x,α,β)
和原始问题的优化是等价的,它们是有相同的解的。
对偶问题
我们直接给出结论:
在满足 f(x),ci(x),hj(x) 都是凸函数的条件下
xminα,β,αi≥0maxL(x,α,β)=α,β,αi≥0maxxminL(x,α,β)
回到SVM的优化问题,并将其转化为对偶问题。
⎩⎨⎧wmin21∣∣w∣∣2st.yi(wTxi+b)≥1,i=1,2,⋯,NL(w,b,α)=21w2+i=1∑Nαi[1−yi(wTxi+b)]
原始问题:w,bminα,αi≥0maxL(w,b,α)
对偶问题:α,αi≥0maxw,bminL(w,b,α)
对于 w,bminL(w,b,α) 有
∂w∂L=0∂b∂L=0⇒w=i=1∑Nαixiyi⇒i=1∑Nαiyi=0
满足上述参数时,L 关于 w,b 取得最小值,接下来求解 α,αi≥0maxw,bminL(w,b,α) ,将上述结果代入有
==αmax21(i=1∑Nαixiyi)2+i=1∑Nαi[1−(j=1∑Nαjxjyj)Txiyi]αmax21(i=1∑Nαixiyi)T(i=1∑Nαixiyi)−i=1∑Nαi(j=1∑Nαjxjyj)Txiyi+i=1∑Nαiαmax−21i=1∑Nj=1∑Nαiαjyiyj<xi,xj>+i=1∑Nαi并且⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧i=1∑Nαiyi=0αi[1−yi(wTxi+b)]=0αi≥0,i=1,2,⋯,N
从而转变为一个求解 αi 的优化问题,若求解出 αi ,则 w,b 自然可以表示出来。
w=i=1∑Nαixiyib=yi1−yiwTx,x∈S
其中, S 表示支持向量的样本集合。从而有SVM的决策函数
y=(i=1∑Nαixiyi)Tx=i=1∑NαiyixiTx
序列最小化算法(SMO)
上节最后得到的关于 α 的式子是一个二次规划问题,使用通用算法开销比较大。SMO方法是1998年提出的,用于求取SVM中的拉格朗日乘子,比通用算法更加高效。
其主要思想为,选取两个变量 αi,αj ,固定其他参数,对这两个参数进行优化,然后重复这个过程。
线性不可分时的核函数应用
在样本数据是线性不可分的情况中,自然上述的SVD无法解决,如下图(左)所示,椭圆内是一类,椭圆外是一类,自然无法用一条直线进行区分。这时,我们可以将原始数据进行一个空间映射。
![[监督学习]之支持向量机 [监督学习]之支持向量机](/default/index/img?u=L2RlZmF1bHQvaW5kZXgvaW1nP3U9YUhSMGNITTZMeTl3YVdGdWMyaGxiaTVqYjIwdmFXMWhaMlZ6THpZd05DOHlZekl6TnpnNE4yVTJOV0U0T0dSa09ERm1ZbVptTkRJME9HUXdZVGhtTkM1d2JtYz0=)
设原空间为 χ⊂R2,x=[x1,x3]T∈χ ,新空间为 Z∈R2,z=[z1,z2]T∈Z ,定义从原空间到新空间的映射为
z=ϕ(x)=[x12,x22]T
经过变换 z=ϕ(x) ,原空间 χ⊂R2 变换为新空间 Z⊂R2 ,原空间的点相应的变换为新空间的点,原空间的椭圆
w1x12+w2x22+b=0
变换为新空间的直线
w1z1+w2z2+b=0
这样,就可以用普通的SVM进行处理了。由于SVD的求解过程的特殊性,即它并不需要明确知道每一个样本点的具体坐标,而仅仅需要两两样本间的内积,因此在SVD中的核函数并不需要知道变换后的坐标,仅需要变换后的内积即可。故有几种常见核函数:
-
多项式核函数
K(x,z)=(x⋅z+1)p
对应的SVM是一个 p 次多项式分类器,在此情况下,分类决策函数为
f(x)=sign(i=1∑Nαi∗yi(xi⋅x+1)p+b∗)
-
高斯核函数
K(x,z)=e−2σ2∣∣x−z∣∣2
对应的SVM是一个高斯径向基函数分类器,在此情况下,分类决策函数为
f(x)=sign(i=1∑Nαi∗yie−2σ2∣∣x−z∣∣2+b∗)
参考资料:支持向量机原理推导及Python实现