前言: 学习笔记,记录下对于一些问题的记录和理解,复习和加深记忆用,挖坑补坑用。
参考:李航 《统计学习方法》
基本内容
支持向量机是一种二类分类模型。学习策略是间隔最大化,可形式化为求解一个凸二次规划问题,或等价于最小化正则化的合页损失函数。
支持向量机从简至繁模型
- 线性可分支持向量机(硬间隔最大化)
- 线性支持向量机(软间隔最大化)
- 非线性支持向量机(核技巧+软间隔最大化)
从感知机模型到线性支持向量机
之前的博文参考:感知机模型
从感知机模型可知,当数据线性可分时,通过感知机学习算法,可以获得一个分离超平面,实现分类。但我们知道,在感知机模型中分离超平面的是不唯一的。那么怎么获得一个分离“效果最好”的超平面呢。
线性可分支持向量机解决了这个问题。它决定这一效果最好的超平面的方法是使得分类后的超平面的两侧的数据点与超平面的间隔最大。
-
对于间隔
-
函数间隔(会受放大倍数的影响,以至于对同一超平面可以有不同距离)
γ^i=yi(wxi+b)
-
几何间隔(归一化||w||,使之唯一确定)
γi=∣∣w∣∣yi(wxi+b)=∣∣w∣∣γ^i
因此就可以根据上面所述,在感知机模型的基础上,加上条件优化,使得几何间隔最大化。
得出线性支持向量机的约束最优化问题 :
w,bmaxγs.t. ∣∣w∣∣yi(wxi+b)≥γ, i=1,2,...,N
写作函数间隔形式:
w,bmax∣∣w∣∣γ^s.t. yi(wxi+b)≥γ^, i=1,2,...,N
也即:
w,bmax∣∣w∣∣/γ^1s.t. yi(γ^wxi+γ^b)≥1, i=1,2,...,N
等价于:
w,bmax∣∣w∣∣1s.t. yi(wxi+b)≥1, i=1,2,...,N
线性可分支持向量机学习算法—硬间隔最大化
原始形式
(可参考感知机模型)
-
最优化问题求解 w∗,b∗
w,bmin 21∣∣w∣∣2s.t. yi(w⋅xi+b)−1≥0,i=1,2,...,N
-
结果
对偶形式
-
对偶问题的转化推导
L(w,b,α)=21∣∣w∣∣2−i=1∑Nαi[yi(w⋅xi+b)−1]
minw,b maxαL(w,b,α)
maxα minw,bL(w,b,α)
-
求解
对于 w,bminL(w,b):
∂w∂L(w,b)=0b∂L(w,b)=0
得到
w−i=1∑Nαiyixi=0i=1∑Nαiyi=0
拉格朗日函数变为
L(α)=21∣∣w∣∣2−i=1∑Nαi[yi(w⋅xi+b)−1]=21∣∣i=1∑Nαiyixi∣∣2−i=1∑Nαi[yi(∣∣i=1∑Nαiyixi∣∣⋅xi+b)−1]=21j=1∑Ni=1∑Nαiαiyiyj(xi⋅xj)−i=1∑Nαiyi((j=1∑Nαjyjxj)⋅xi+b)+i=1∑Nαi=−21i=1∑Nj=1∑Nαiαjyiyj(xi⋅xj)+i=1∑Nαi
对于极大化 L(α)
αmax L(α) ⇒ −αminL(α)
因此等价的对偶问题为
αmin s.t. 21i=1∑Nj=1∑Nαiαjyiyj(xi⋅xj)−i=1∑Nαii=1∑Nαiyi=0αi≥0, i=1,2,...,N
-
一个定理(推导?)
若 α∗是对偶问题的解,则有
w∗=i=1∑Nαi∗yixib∗=yj−i=1∑Nαi∗yi(xi⋅yj)
-
对偶问题算法
线性支持向量机—软间隔最大化
以上是针对线性可分条件,对于一般的线性不可分情况不适用。
为了扩展到一般线性不可分情况下,使用软间隔最大化,即在函数间隔上加入松弛变量,对于松弛变量,在最优化问题上加入对于松弛变量的惩罚项,因此
原始形式
w,b,ξmin 21∣∣w∣∣2+Ci=1∑Nξis.t. yi(w⋅xi+b)≥1−ξi,i=1,2,...,Nξi≥0, i=1,2,...,N
对偶形式
αmin s.t. 21i=1∑Nj=1∑Nαiαjyiyj(xi⋅xj)−i=1∑Nαii=1∑Nαiyi=00≤αi≤C, i=1,2,...,N
-
结果(求解过程使用SMO算法)
w∗=i=1∑Nαi∗yixib∗=yj−i=1∑Nαi∗yi(xi⋅yj)
w∗⋅x+b∗=0
f(x)=sign(w∗⋅x+b∗)
-
引入对偶形式的好处:一方面可以高效率求解;另一方面方便引入核技巧
线性支持向量机—合页损失函数
上述线性支持向量机使用的学习策略是软间隔最大化,学习算法是凸二次规划。此外有个等价描述:最小化以下损失函数
L(w,b)=i=1∑N[1−yi(w⋅xi+b)]++λ∣∣w∣∣2
其中,合页损失函数:
[z]+={z, z>0z, z≤0
Q:为什么可以用此表示?
why? (为什么可以用最小化该损失函数来学习线性支持向量机)
观察式子,很明显后面一项是正则化项,去掉不影响理解。前面部分,很明显是关于距离的表示。
先从最简单的模型理解,即对于感知机模型,可以使用类似的最小化损失函数
L(w,b)=i=1∑N[−yi(w⋅xi+b)]+
[−z]+表示的含义为,当为误分类点时,值为正;当为正确分类点时,值为0。因此对于最小化该损失函数,训练学习过程就是尽量使得所有点分类正确,得到损失函数最小值为 0。
再考虑去掉正则化项的合页损失函数
L(w,b)=i=1∑N[1−yi(w⋅xi+b)]+
[z]+表示的含义是,当样本点与分离超平面的函数距离大于1时(包含着正确分类的信息),值为0;当函数距离小于1或为负值(未正确分类)时,值为1−yi(w⋅xi+b)。
先考虑线性可分情况,事实上,最小化上述损失函数,就等价于使所有样本点满足yi(w⋅xi+b)>0即可,因为yi(w⋅xi+b)为函数距离,随放大倍数而改变,因此只要满足yi(w⋅xi+b)>0,就一定可以通过放大w,b确保yi(w⋅xi+b)>1,从而确使损失函数最小化为0。这也侧面说明了函数间隔取 1 并不影响结果。
但很明显这样的 w,b 有无数个(不仅仅因为放大倍数的原因,刨去放大倍数,只要能使样本点正确分类的超平面对应的w,b都是满足条件的)。所以在线性可分的情况下,这是跟上面感知机模型最小化是等价的。
那么如何获得唯一的超平面呢,可通过加入正则化项来确使结果唯一。也即
L(w,b)=i=1∑N[1−yi(w⋅xi+b)]++λ∣∣w∣∣2
但此时有个问题,最小化此时的损失函数,等价于两种情况?(1. 全部正确分类 2.没有全部正确分类,但加入了更小的正则化项)。对于第一种情况比较好理解,对于第二种情况,理论上是不存在的(从下面问题等价可以知晓,但如何直观理解呢?**how?**换句话说,是否正则化项的加入都改变不了先满足前项最小的事实?应该是否)。这难以理解的一部分应该是因为前面 1 的原因,换句话说,加入正则项后貌似开始受 1 的影响了?
再考虑一般情况,即对于非严格的线性可分情况,其实理解过程与上相似。
值得注意的一点是:
于各种情况对损失函数最小化的贡献来说,正确分类第一,函数间隔小于1,次之,最后是误分类(函数间隔为负)。
因此最小化该损失函数,这样理解来说,似乎是我们想要的。
Q:为什么同软间隔最大化等价?
即证明
minw,b i=1∑N[1−yi(w⋅xi+b)]++λ∣∣w∣∣2
等价于
w,b,ξmin 21∣∣w∣∣2+Ci=1∑Nξi(1)s.t. yi(w⋅xi+b)≥1−ξi,i=1,2,...,N(2)ξi≥0, i=1,2,...,N(3)
证明:
令
[1−yi(w⋅xi+b)]+=ξi
得到条件(3)
ξi≥0 ,1−yi(w⋅xi+b)>0⇒yi(w⋅xi+b)=1−ξiξi=0 ,1−yi(w⋅xi+b)≤0⇒yi(w⋅xi+b)≥1−ξi
等价条件(2)
最优化问题为
minw,b i=1∑Nξi+λ∣∣w∣∣2
令λ=2C1即可得到最优化问题(1)
反之,同理,因此等价。
非线性支持向量机—核函数
核函数的引入
下面是处理非线性的情况,很容易想到的思路是将线性不可分的数据通过某一个映射关系,映射为线性可分。而我们可以相信的是,对于线性不可分数据总在足够高维中存在着线性可分的超平面。而我们要做的就是找到这个映射。这是传统的思路。
以简单二维实例加以理解:
有如下训练数据,很明显该数据在二维情况下是线性不可分的。

事实上以上数据是以圆(x1−1)2+x22=1为分界线,使用python生成的随机点。
为说明为题,便于理解,在已知事实的情况下,产生一个映射:
z1=x12, z2=x22, z3=x1
那么,将以上训练数据点(x1,x2) 映射到三维空间(z1,z2,z3),数据点分布使用python画出来为:

可以看出来,此时已经可以使用一个三维平面将其正确分类。在此三维空间中,数据点线性可分。超平面方程为z1+z2−2z1=0,事实上,这与圆的方程是对应的。
当然,实际上,我们事先是不知道能够得到如此映射关系的。而且,对于上面圆(二次曲线)方程的更一般表示应该为:
a1x12+a1x22+a3x1+a4x2+a5x1x2+a6=0
也即对应的映射为R2→R5:
z1=x12, z2=x22, z3=x1, z4=x2, z5=x1x2
对应五维空间的线性方程为:
a1z1+a2z2+a3z3+a4z4+a5z5+a6=0
当然,有些项是可以省略的 。同样,这也只是针对于二次曲线的一般情况。
继续上面的例子中,假设我们已经得到了对应映射关系,那么针对线性可分情况下,使用线性可分支持向量机可以得到最优化问题:
αmin 21i=1∑Nj=1∑Nαiαjyiyj(zi⋅zj)−i=1∑Nαi
这就是熟悉的支持向量机问题了,按照步骤求解即可。
所以总结一下,对于传统思路,就是先对数据进行高纬度线性可分映射,然后再使用线性支持向量机进行分类。
但这会存在问题:
- 映射关系的确定有点难计算,而且后续计算,还需要一步步地代入。
- 另外可以预想的是,会出现维度爆炸的情况,上述中我们仅仅映射到了三维,更一般情况下是五维,而这仅仅是在原始数据为二维的情况下的映射。当样本维度高时(通常情况就是如此),映射空间的维度将会是不可想象的爆炸多,会成指数型增长。势必会增加非常大的计算压力,而且当原始维度很高时,计算根本无法进行。
那么,如何解决上述问题,如何将其推广到更一般的情况呢?这就需要核函数了,发挥核技巧的强大作用了。
我们注意到,在上面传统思路求解的过程中,其实是不必要去关注具体的映射过程的。我们需要的就是得到上面的最优化问题就可以了,观察式子
αmin 21i=1∑Nj=1∑Nαiαjyiyj(zi⋅zj)−i=1∑Nαi
其实,我们只需要知道zi⋅zj的表达式就可以,而不必要先知道映射方程,然后在作内积(其实这样也是为了获得zi⋅zj表达式而已)。
而zi⋅zj就是核函数。具体定义参考书本。关于函数空间问题参考:机器学习基础补充知识
粗略说就是,若ϕ(x)为映射函数,那么核函数K(x, z)就是映射函数的内积,即
K(x,z)=ϕ(x)⋅ϕ(z)
核函数简化了内积运算,因为不再必要进行先一一映射再一一相乘的麻烦运算了,取而代之的是直接使用核函数带入计算即可,而且不必关注映射到高维线性可分的具体实现了(可理解为隐式映射)。一言蔽之,核函数跟映射没有关系,其只是用来对映射到高纬空间后的内积的直接运算。
核函数的选择
在理解核函数的引入后,可能会有个疑问,即是如何正好获得到核函数的?更确切说,怎么就能如此巧合地不加以分析计算映射关系,而直接得到核函数的表达式的?
那最初的例子作为理解,那么是如何在不了解映射关系的情况下得到核函数的。其实,答案很简单,就是一个非线性分类问题的核函数不是唯一的,不像最初例子给出的关系式那么完美,而是**通过经验和领域知识而直接选择既定的常用的核函数。这也是为什么选择核函数通常也需要验证其有效性。
常用核函数:
-
多项式核函数(polynomial kernel function)
K(x,z)=(x⋅z+1)p
-
高斯核函数(Gaussian kernel function)
K(x,z)=exp(−2σ2∣∣x−z∣∣2)
注意:不同核函数肯定有不同作用和优缺点,到具体实践使用后和有所感悟时补充(!!!)。
非线性支持向量机算法
-
选择适当的核函数 K(x, z) 和参数 C
-
构造求解最优化问题
αmin s.t. 21i=1∑Nj=1∑NαiαjyiyjK(xi,xj)−i=1∑Nαii=1∑Nαiyi=00≤αi≤C, i=1,2,...,N
-
结果(求解过程使用SMO算法)
w∗x=i=1∑Nαi∗yiK(xi,x)b∗=yj−i=1∑Nαi∗yiK(xi,yj)
w∗⋅x+b∗=0
f(x)=sign(w∗⋅x+b∗)
其他相关补充