机器学习入门之《统计学习方法》笔记整理——支持向量机

支持向量机

  支持向量机(support vector machines, SVM)是一种二类分类模型。它的基本模型是定义在特征空间上的间隔最大的线性分类器;支持向量机还包括核技巧,这使它成为实质上的非线性分类器。支持向量机的学习策略就是间隔最大化,可形式化为一个求解凸二次规划(convex quadratic programming)的问题,也等价于正则化的合页损失函数的最小化问。支持向量机的学习算法是求解凸二次规划的最优化算法。

  支持向量机,其含义是通过支持向量运算的分类器。

  支持向量:在求解的过程中,会发现只根据部分数据就可以确定分类器,这些数据称为支持向量。


目录


线性可分支持向量机

线性可分支持向量机

  支持向量机的输入空间和特征空间是不同的,输入空间为欧氏空间或离散集合,特征空间是欧氏空间或希尔伯特空间。希尔伯特空间其实就可以当做欧氏空间的扩展,其空间维度可以是任意维的,包括无穷维,并且具有欧氏空间不具备的完备性。

  这时,我们需要先回忆一下感知机 ,因为这两个的决策函数是类似的:

  给定线性可分训练数据集,通过间隔最大化或等价地求解相应的凸二次规划问题学习得到的分离超平面为:

wx+b=0

  以及相应的分类决策函数:

f(x)=sign(wx+b)

称为线性可分支持向量机。
机器学习入门之《统计学习方法》笔记整理——支持向量机

  感知机通过训练一个超平面将平面或空间线性可分的点进行划分。 线性可分支持向量机也是如此,通过找寻分割平面来划分数据集。两者的区别,感知机的学习策略是误分类点到超平面距离和最小化,而线性可分支持向量机是基于硬间隔最大化的。

函数间隔与几何间隔

  函数间隔:对于给定的训练数据集T和超平面(w,b) ,定义超平面关于样本点(xi,yi) 的函数间隔为

γ^i=yi(wxi+b)

  定义超平面(w,b) 关于训练数据集T的函数间隔为超平面(w,b) 关于T中所有样本点(xi,yi) 的函数间隔之最小值,即

γ^=mini=1,2,...,Nγ^i

  函数间隔可以表示分类预测的正确性及确信度。但是成比例地改变wb ,例如将它们改为2w2b ,超平面并没有改变,但函数间隔却成为原来的2倍。

机器学习入门之《统计学习方法》笔记整理——支持向量机
  对分离超平面的法向量、加某些约束,如规范化,w=1 ,使得间隔是确定的。这时函数间隔成为几何间隔。

  几何间隔:对于给定的训练数据集T和超平面(w,b) ,定义超平面关于样本点(xi,yi) 的函数间隔为

γi=yi(wwxi+bw)

  定义超平面(w,b) 关于训练数据集T的函数间隔为超平面(w,b) 关于T中所有样本点(xi,yi) 的函数间隔之最小值,即

γ=mini=1,2,...,Nγi

  函数间隔和几何间隔的关系:

γi=γ^iw

γ=γ^w

  如果超平面参数wb 成比例地改变(超平面没有改变),函数间隔也按此比例改变,而几何间隔不变。

间隔最大化

  支持向量机学习的基本想法是求解能够正确划分训练数据集并且几何间隔最大的分离超平面。对线性可分的训练数据集而言,线性可分分离超平面有无穷多个(等价于感知机),但是几何间隔最大的分离超平面是唯一的。这里的间隔最大化又称为硬间隔最大化。

  间隔最大化的直观解释是:对训练数据集找到几何间隔最大的超平面意味着以充分大的确信度对训练数据进行分类,也就是说,不仅将正负实例点分开,而且对最难分的实例点(离超平面最近的点)也有足够大的确信度将它们分开。

  这个问题可以表示为下面的约束最优化问题:

maxw,bγs.t.yi(wwxi+bw)γ,i=1,2,...,N

  即:

maxw,bγ^ws.t.yi(wxi+b)γ^,i=1,2,...,N

  由于

γ^
的取值并不影响最优化,所以这里我们为了计算方便取
γ^=1
.目标函数变为:

maxw,b1w

  因为最大化1w 等价于最小化12w2 (为什么?因为要将目标函数转换为一个凸二次规划问题,从而满足后面求对偶问题需要的KKT条件(什么是KKT条件?维基百科:KKT条件),而且使所求的解为全局最优解。系数加个1/2是为了求导的时候约去系数,计算方便。),从而将问题改写成:

maxw,b12w2s.t.yi(wxi+b)10,i=1,2,...,N

算法 (线性可分支持向量机学习算法——最大间隔法)

输入:线性可分训练数据集T={(x1,y1),(x2,y2),...,(xN,yN)} ,其中,xiX=RnyiY={1,+1}i=1,2,...,N

输出:最大间隔分离超平面和分类决策函数。

(1) 构造并求解约束最优化问题:

maxw,b12w2s.t.yi(wxi+b)10,i=1,2,...,N

求得最优解w,b .

(2) 由此得到分离超平面:

wx+b=0

分类决策函数

f(x)=sign(wx+b)

学习的对偶算法

  构建拉格朗日函数(Lagrange function),引进拉格朗日乘子(Lagrange multiplier):

L(w,b,α)=12w2i=1Nαiyi(wxi+b)+i=1Nαi

  根据拉格朗日对偶性,原始问题的对偶问题是拉格朗日函数的极大极小问题

maxαminw,bL(w,b,α)

  设a是对偶最优化问题的解,则存在下标j 使得aj>0 ,并可按下式求得原始最优化问题的解:

w=i=1Nαiyixi

b=yii=1Nαiyi(xixj)

算法 (线性可分支持向量机学习算法)

输入:线性可分训练数据集T={(x1,y1),(x2,y2),...,(xN,yN)} ,其中,xiX=RnyiY={1,+1}i=1,2,...,N

输出:分离超平面和分类决策函数。

(1) 构造并求解约束最优化问题:

minα12i=1Nj=1Nαiαjyiyj(xixj)i=1Nαi

s.t.i=1Nαiyi=0

αi0,i=1,2,...,N

求得最优解

α=(α1,α2,...,αN)T
.

(2) 计算

w=i=1Nαiyixi

并选择α 的一个正分量αj>0 ,计算

b=yii=1Nαiyi(xixj)

(3) 求得分离超平面

wx+b=0

分类决策函数:

f(x)=sign(wx+b)

线性支持向量机

  上面所说的线性可分支持向量机是基于训练样本线性可分的理想状态,当训练样本中存在噪声或者特异点而造成线性不可分时,就需要用到线性支持向量机。

  在线性可分支持向量机中,我们假设函数间隔γ^ 为1,若存在噪声或特异点函数间隔处于 (0,1) 中间,那么这些点就不满足问题的约束条件,也就线性不可分。为了解决这样的问题,引入了松弛变量ξi0 ,使得函数间隔与松弛变量的和大于等于1,从而约束条件变为:

yi(wxi+b)1ξi

  同时因为约束条件引入了ξi ,所以目标函数也要改变,改为:

12w2+Ci=1Nξi

  这里,C>0 称为惩罚参数,由问题决定。

  依然构造拉格朗日函数,并转换为对偶问题:

minα12i=1Nj=1Nαiαjyiyj(xixj)i=1Nαi

s.t.i=1Nαiyi=0

0αiC,i=1,2,...,N

  其拉格朗日函数是

L(w,b,ξ,α,μ)12w2+Ci=1Nξii=1Nαi(yi(wxi+b)1+ξi)i=1Nμiξi

其中,αi0,μi0 .

算法 (线性支持向量机学习算法)

输入:线性可分训练数据集T={(x1,y1),(x2,y2),...,(xN,yN)} ,其中,xiX=RnyiY={1,+1}i=1,2,...,N

输出:分离超平面和分类决策函数。

(1) 选择惩罚参数C>0 ,构造并求解凸二次规划问题:

minα12i=1Nj=1Nαiαjyiyj(xixj)i=1Nαi

s.t.i=1Nαiyi=0

0αiC,i=1,2,...,N

求得最优解α=(α1,α2,...,αN)T .

(2) 计算

w=i=1Nαiyixi

并选择α 的一个分量αj 适合条件0<αj<C ,计算

b=yii=1Nyiαi(xixj)

(3) 求得分离超平面

wx+b=0

分类决策函数:

f(x)=sign(wx+b)

支持向量

  支持向量有两种解释,一种是直观的解释,一种与对偶最优化问题的解α 联系起来。

1. 支持向量和间隔边界

  在线性可分情况下,训练数据集的样本点中与分离超平面跄离最近的样本点的实例称为支持向量( support vector )。支持向量是使约束条件式等号成立的点,即

yi(wxi+b)1=0

yi=+1 的正例点,支持向量在超平面H1:wx+b=1

yi=1 的负例点,支持向量在超平面H2:wx+b=1

  H1H2 之间的距离称为间隔(margin)。间隔依赖于分离超平面的法向量w ,等于2wH1H2 称为间隔边界。

  在决定分离超平面时只有支持向量起作用,而其他实例点并不起作用。如果移动支持向量将改变所求的解;但是如果移动其他实例点,甚至去掉这些点,则解是不会改变的。由于支持向量在确定分离超平面中起决定性作用,所以将这种分类模型称为支持向量机。支持向量的个数一般很少,所以支持向量机由很少的“重要的”训练样本确定。

2. 支持向量和对偶最优化问题的解α

  在线性可分支持向量机中,(w,b)只依赖于训练数据中对应于αi>0的样本点(xi,yi) ,而其他样本点对(w,b) 没有影响,将训练数据中对应于αi>0 的实例点(xi,yi) 称为支持向量。

  支持向量一定在间隔边界上,由KKT互补条件可知:

αi(yi(wxi+b)1)=0,i=1,2,,N

  对应于αi>0 的实例点(xi,yi) ,则有:

yi(wxi+b)1=0

  即(xi,yi) 一定在间隔边界上,和前面的的支持向量定义是一致的。

  同时可以得出,非支持向量对应的αi=0,因为yi(wxi+b)1>0 ,故αi=0

合页损失函数

  线性支持向量机学习还有另外一种解释,就是最小化以下目标函数

i=1N[1yi(wxi+b)]++λw2

  目标函数的第1项是经验损失或经验风险,函数

L(y(wx+b))=[1y(wx+b)]+

称为合页损失函数.下标“+”表示下取正值的函数

[z]+={z, z>00 z0

  合页损失函数不仅要分类正确,而且确信度足够高时损失才是0。

非线性支持向量机

核技巧

非线性分类问题:如果能用Rn 中的一个超曲面将正负例正确分开,则称这个问题为非线性可分问题.

求解方法:进行非线性变换,将非线性问题变成线性问题。

  学习是隐式地在特征空间进行的,不需要显式地定义特征空间和映射函数。这样的技巧称为核技巧

  核技巧应用到支持向量机,其基本想法就是通过一个非线性变换将输入空间(欧氏空间Rn 或离散集合)对应于一个特征空间(希尔伯特空间H ),使得在输入空间Rn 中的超曲面模型对应于特征空间H 中的超平面模型(支持向量机)。

  设X 是输入空间,H 为特征空间,如果存在一个映射映射函数

ϕ(x):XH

  使得对所有x,zX ,函数K(x,z) 满足条件

K(x,z)=ϕ(x)ϕ(z)

则称K(x,z) 为核函数。

  核技巧的想法是,在学习与预测中只定义核函数K(x,z) ,而不显式地定义映射函数。对于给定的核K(x,z) ,特征空间x和映射函数的取法并不唯一,可以取不同的特征空间,即便是在同一特征空间里也可以取不同的映射。

  在对偶问题的目标函数中的内积(xixj) 可以用核函数K(xi,xj) 来代替:

w(α)=12i=1Nj=1NαiαjyiyjK(xi,xj)i=1Nαi

  分类决策函数也可用核函数代替,变为:

f(x)=sign(i=1Nsaiyiϕ(xi)ϕ(x)+b)=sign(i=1nsaiyiK(xi,x)+b)

  这等价于经过映射函数将原来的输入空间变换到一个新的特征空间,将输入空间中的内积xixj 变换为特征空间中的内积ϕ(xi)ϕ(xj) .

  在新的特征空间里从训练样本中学习线性支持向量机。当映射函数是非线性函数时,学习到的含有核函数的支持向量机是非线性分类模型。

  在核函数给定的条件下,可以利用解线性分类问题的方法求解非线性分类问题的支持向量机。

  这里给出判定正定核的充要条件:

  设ΚX×XR 是对称函数,则Κ(x,z) 为正定核函数的充要条件是对任意xiX ,i=1,2,,m,Κ(x,z) 对应的Gram矩阵:

K=[K(xi,xj)]m×n

是半正定矩阵。

  由充要条件可以给出判定正定核的等价定义:

  设X 为输入空间,Κ(x,z) 是定义在X×X 对称函数,如果对任意xiX , i=1,2,,m , Κ(x,z) 对应的Gram矩阵:

K=[K(xi,xj)]m×n

是半正定矩阵,则称Κ(x,z) 是正定核。 符合这样条件的函数,我们称它为正定核函数。

注意:也有的核函数是非正定核,如多元二次核函数K(x,z)=(xz2+c2)12

  在实际应用中,还经常用到Mercer定理还确定核函数。由Mercer定理得到的核函数称为Mercer核,正定核比Mercer核更具有一般性,因为正定核要求函数为定义空间上的对称函数,而Mercer核要求函数为对称连续函数。

常用核函数

1. 线性核函数

  线性核函数是最简单的核函数,是径向基核函数的一个特例,公式为:

K(x,z)=xTy+c

  主要用于线性可分的情形,在原始空间中寻找最优线性分类器,具有参数少速度快的优势。

2. 多项式核函数

  多项式核适合于正交归一化数据,公式为:

K(x,z)=(xz+1)p

  多项式核函数属于全局核函数,允许相距很远的数据点对核函数的值有影响。参数p 越大,映射的维度越高,计算量就会越大。当p 过大时,学习复杂性也会过高,易出现过拟合。

3. 径向基核函数

  径向基核函数属于局部核函数,当数据点距离中心点变远时,取值会变小,公式为:

K(x,z)=exp(γxz2)

4. 高斯核函数

  高斯核函数可以看作是径向基核函数的另一种形式:

K(x,z)=exp(xz22σ2)

  高斯(径向基)核对数据中存在的噪声有着较好的抗干扰能力,由于其很强的局部性,其参数决定了函数作用范围,随着参数σ 的增大而减弱。

5. 字符串核函数

  核函数不仅可以定义在欧氏空间上,还可以定义在离散数据的集合上。字符串核函数是定义在字符串集合上的核函数,可以直观地理解为度量一对字符串的相似度,在文本分类、信息检索等方面都有应用。

kn(s,t)=uΣn[ϕn(s)]u[ϕn(t)]u=uΣn(i,j):s(i)=t(j)=uλl(i)λl(j)

  字符串核函数kn(s,t) 给出了字符串st 中长度等于n 的所有子串组成的特征向量的余弦相似度。两个字符串相同的子串越多,他们就越相似,字符串核函数的值就越大。字符串核函数可以由动态规划快速的计算。

6. Sigmoid核函数

  Sigmoid核函数来源于神经网络,被广泛用于深度学习和机器学习中,公式为:

K(x,z)=tanh(xz+c)

  采用Sigmoid函数作为核函数时,支持向量机实现的就是一种多层感知器神经网络。支持向量机的理论基础(凸二次规划)决定了它最终求得的为全局最优值而不是局部最优值,也保证了它对未知样本的良好泛化能力。

算法 (非线性支持向量机学习算法)

输入:线性可分训练数据集T={(x1,y1),(x2,y2),...,(xN,yN)} ,其中,xiX=RnyiY={1,+1}i=1,2,...,N

输出:分类决策函数。

(1) 选择惩罚参数C>0 ,构造并求解凸二次规划问题:

minα12i=1Nj=1NαiαjyiyjK(xi,xj)i=1Nαi

s.t.i=1Nαiyi=0

0αiC,i=1,2,...,N

求得最优解α=(α1,α2,...,αN)T .

(2) 选择α 的一个分量αj 适合条件0<αj<C ,计算

b=yii=1NyiαiK(xi,xj)

(3) 分类决策函数:

f(x)=sign(i=1nsaiyiK(xi,x)+b)

SMO算法

  SMO算法是一种启发式算法,其基本思路是:如果所有变量的解都满足此最优化问题的KKT条件(Karush-Kuhn-Tucker conditions),那么这个最优化问题的解就得到了。因为KKT条件是该最优化问题的充分必要条件。否则,选择两个变量,固定其他变量,针对这两个变量构建一个二次规划问题。这个二次规划问题关于这两个变量的解应该更接近原始二次规划问题的解,因为这会使得原始二次规划问题的目标函数值变得更小。重要的是,这时子问题可以通过解析方法求解,这样就可以大大提高整个算法的计算速度。子问题有两个变量,一个是违反KKT条件最严重的那一个,另一个由约束条件自动确定。如此,SMO算法将原问题不断分解为子问题并对子问题求解,进而达到求解原问题的目的。

概要:SMO方法的中心思想是每次取一对αiαj ,调整这两个值。

参数:训练数据/分类数据/C /ξ /最大迭代数

过程:

初始化α为0;

在每次迭代中 (小于等于最大迭代数),

  • 找到第一个不满足KKT条件的训练数据,对应的αi

  • 在其它不满足KKT条件的训练数据中,找到误差最大的x,对应的index的αj

  • αiαj 组成了一对,根据约束条件调整αi , αj

  整个SMO算法包括两个部分:求解两个变量二次规划的解析方法和选择变量的启发式方法.

坐标上升法

  假设有优化问题:

maxαW(α1,α2,...,αm)

  W是α向量的函数。利用坐标上升法(求目标函数的最小时即为坐标下降法)求解问题最优的过程如下:

//循环到函数收敛

Loop until convergence{

​ //依次选取一个变量,将其作为固定值

​ For i = 1,2,…,m{

αi=argmaxαiW(α1,α2,...,αi,...,αm)

​ }
}

  算法的思想为:每次只考虑一个变量进行优化,将其他变量固定。这时整个函数可以看作只关于该变量的函数,可以对其直接求导计算。然后继续求其他分变量的值,整个内循环下来就得到了α 的一组值,若该组值满足条件,即为我们求的值,否则继续迭代计算直至收敛。

SMO算法

  参考坐标上升法,我们选择向量α 的一个变量,将其他变量固定进行优化,该处优化问题包含了约束条件, 变量必须满足等式约束i=1Nαiyi=0 ,所以每次选择两个变量进行优化

  不失一般性,将设选择的两个变量为α1α2,其他变量αi(i=3,4,,N) 是固定的。 于是优化问题的子问题可以写作:

minα1,α2W(α1,α2)=12K11α12+12K22α22+y1y2K12α1α2(α1+α2)+y1α1i=3NyiαiKi1+y2α2i=3NyiαiKi2s.t.α1y1+α2y2=i=3Nyiαi=ς0αiC,i=1,2

其中,Kij=K(xi,xj),i,j=1,2,...,Nς 是常数。

  现在的问题就是如何选择两个变量构造最优子问题。SMO采用启发式选择方法选择变量。所谓启发式,即每次选择拉格朗日乘子时,优先选择前面样本系数中满足条件0<αi<Cαi 作优化,不考虑约束条件中相等的情况是因为在界上的样例对应的系数αi 一般都不会改变。

  通过启发式搜索找到第一个变量,因为要考虑算法的收敛性,第二个变量显然不是随便选的。实际上,只要选择的两个变量中有一个违背KKT条件,那么目标函数在一步迭代后值就会减小,并且我们希望找到的α2 在更新后能够有足够大的变化。

算法 (SMO算法)

输入:线性可分训练数据集T={(x1,y1),(x2,y2),...,(xN,yN)} ,其中,xiX=RnyiY={1,+1}i=1,2,...,N ,精度ε

输出:近似解α^

(1) 取初值α(0)=0,令k

(2) 选取优化变量α1(k),α2(k) ,解析求解两个变量的最优化问题,求得最优解α1(k+1),α2(k+1) ,更新αα(k+1)

(3) 若精度ε 范围内满足停机条件

i=1Nαiyi=0

0αiC,i=1,2,...,N

yig(xi)={1,{xi|αi=0}=1,{xi|0<αi<C}1,{xi|αi=C}

其中,

g(xi)=j=1NαjyjK(xj,xi)+b

则转(4) ;否则令k=k+1 ,转(2) ;

(4) 取α^=α(k+1)

小结

  力推一篇文章,写的太好了,我写的只能算是笔记,这才是真正详细地讲述原理——支持向量机通俗导论(理解SVM的三层境界)

参考文章

  1. 理解支持向量机
  2. 理解支持向量机(二)核函数
  3. 统计学习方法 李航—第7章 支持向量机
  4. 理解数学空间,从距离到希尔伯特空间
  5. 机器学习实战 - 读书笔记(06) – SVM支持向量机
  6. 支持向量机(SVM)是什么意思?
  7. 支持向量机通俗导论(理解SVM的三层境界)