机器学习(二)线性模型—SVM
2.3 SVM
2.3.1 概述
SVM在特征空间找到一个超平面使得超平面能将两类分开,且间隔最大(解唯一)
i. 当训练样本线性可分时,通过硬间隔最大化,学习一个线性分类器,即线性可分支持向量机;
ii. 当训练数据近似线性可分时,引入松弛变量,通过软间隔最大化,学习一个线性分类器,即线性支持向量机;
iii. 当训练数据线性不可分时,通过使用核技巧及软间隔最大化,学习非线性支持向量机。
2.3.2 问题定义
点到分离超平面的距离:
1||w|||wTx+b|(27) (27) 1 | | w | | | w T x + b |
若分离超平面能将训练样本完全分类正确则
yi(wTx+b)>0 y i ( w T x + b ) > 0 ,令
{wTxi+b≥+1,wTxi+b≤−1,yi=+1yi=−1(28) (28) { w T x i + b ≥ + 1 , y i = + 1 w T x i + b ≤ − 1 , y i = − 1
距离超平面最近的向量使得等号成立,它们被称为
支持向量(
yi(wTx+b)−1=0 y i ( w T x + b ) − 1 = 0 )
两个异类支持向量到超平面的距离之和被叫做
间隔:
2||w||(29) (29) 2 | | w | |
SVM试图去最大化间隔,目标函数定义为:
maxw,b2||w||s.t.yi(wTxi+b)≥1,i=1,2,..,m(30) max w , b 2 | | w | | (30) s . t . y i ( w T x i + b ) ≥ 1 , i = 1 , 2 , . . , m
(30) ( 30 ) 等价于去:
minw,b12||w||2s.t.yi(wTxi+b)≥1,i=1,2,..,m(31) min w , b 1 2 | | w | | 2 (31) s . t . y i ( w T x i + b ) ≥ 1 , i = 1 , 2 , . . , m
2.3.3 原问题与对偶问题推导
对
(31) ( 31 ) 的每条约束添加拉个朗日乘子
αi≥0 α i ≥ 0 ,构建拉格朗日函数
L(w,b,α)=12||w||2+∑i=1mαi(1−yi(wTxi+b))(32) (32) L ( w , b , α ) = 1 2 | | w | | 2 + ∑ i = 1 m α i ( 1 − y i ( w T x i + b ) )
对上式进行全微分:
dL=d(12wTw+∑i=1mαi(1−yi(wTxi+b))=wTdw+∑i=1mαi(1−yidwTxi)−∑i=1mαiyidb=wTdw−∑i=1mαiyidwTxi−∑i=1mαiyidb=wTdw−∑i=1mαiyixidwT−∑i=1mαiyidb(33) d L = d ( 1 2 w T w + ∑ i = 1 m α i ( 1 − y i ( w T x i + b ) ) = w T d w + ∑ i = 1 m α i ( 1 − y i d w T x i ) − ∑ i = 1 m α i y i d b = w T d w − ∑ i = 1 m α i y i d w T x i − ∑ i = 1 m α i y i d b (33) = w T d w − ∑ i = 1 m α i y i x i d w T − ∑ i = 1 m α i y i d b
固:
∂l∂w=w−∑i=1mαiyixi(34) (34) ∂ l ∂ w = w − ∑ i = 1 m α i y i x i
∂l∂b=−∑i=1mαiyi(35) (35) ∂ l ∂ b = − ∑ i = 1 m α i y i
将
(34) ( 34 ) 、
(35) ( 35 ) 置0可得,
w=∑i=1mαiyixi(36) (36) w = ∑ i = 1 m α i y i x i
∑i=1mαiyi=0(37) (37) ∑ i = 1 m α i y i = 0
将
(36) ( 36 ) 、
(37) ( 37 ) 带入
(32) ( 32 ) ,消去w,b可得到对偶问题
maxαLs.t.=12∑i=1m∑j=1mαiαjyiyjxTixj+∑i=1mαi−∑i=1mαiyi∑j=1mαjyjxTjxi=∑i=1mαi−12∑i=1m∑j=1mαiyiαjyjxTixj∑i=1mαiyi=0,αi≥0,i=1,2...,m(38) max α L = 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j x i T x j + ∑ i = 1 m α i − ∑ i = 1 m α i y i ∑ j = 1 m α j y j x j T x i = ∑ i = 1 m α i − 1 2 ∑ i = 1 m ∑ j = 1 m α i y i α j y j x i T x j s . t . ∑ i = 1 m α i y i = 0 , (38) α i ≥ 0 , i = 1 , 2... , m
(38) ( 38 ) 需满足KKT条件:
αi≥0 α i ≥ 0
1−yif(xi)≤0 1 − y i f ( x i ) ≤ 0
αi(1−yif(xi))=0(39) (39) α i ( 1 − y i f ( x i ) ) = 0
注意到,对于任意样本有
ai=0 a i = 0 或是
1−yif(xi)=0 1 − y i f ( x i ) = 0 ,
ai=0 a i = 0 的点不会在损失函数中出现,而
1−yif(xi)=0 1 − y i f ( x i ) = 0 对应的点 位于最大间隔的边界上,即支持向量。
训练完成后,大部分的训练样本无需保留,最终模型仅于支持向量有关。
(38) ( 38 ) 式为一个二次规划问题,可以使用二次规划的算法进行求解,如增光拉个朗日法、投影梯度法。该问题的规模正比于训练样本数,在实际中造成很大开销。
2.3.4 核函数:
核函数是针对线性不可分问题提出的,当样本在原始空间线性不可分时,使用核函数可将样本从原始空间映射到一个更高维的特征空间,使得样本在这个特征空间内线性可分。
基本表达式:
K(x,z)=ϕ(x)⋅ϕ(z)(40) (40) K ( x , z ) = ϕ ( x ) ⋅ ϕ ( z )
核函数性质 :
+ 对称函数对应的核矩阵半正定,就可以作为核函数使用
+ 两个核函数的线性组合仍是核函数
+ 对于任意函数g,g(x)k(x,z)g(z)仍是核函数
常用核函数:
k(xi,xj)=xTixj(41) (41) k ( x i , x j ) = x i T x j
k(xi,xj)=(xTixj)d(42) (42) k ( x i , x j ) = ( x i T x j ) d
k(xi,xj)=exp(−||xi−xj||22σ2)(43) (43) k ( x i , x j ) = e x p ( − | | x i − x j | | 2 2 σ 2 )
k(xi,xj)=exp(−||xi−xj||σ)(44) (44) k ( x i , x j ) = e x p ( − | | x i − x j | | σ )
k(xi,xj)=tanh(βxTixj+θ)(45) (45) k ( x i , x j ) = t a n h ( β x i T x j + θ )
常用核函数比较:
+ 线性:简单,速度快,但是需要线性可分
+ 多项式:比线性核拟合程度更强,知道具体的维度,但是高次容易出现数值不稳定,参数选择比较多。
+ 高斯:拟合能力最强,但是要注意过拟合问题。不过只有一个参数需要调整。带宽需要调整 。通过调控参数σ ,高斯核实际上具有相当高的灵活性,也是使用最广泛的核函数之一。 σ 越小拟合能力越强,容易过拟合。
使用核函数后,SVM的表达式可以写为:
maxαLs.t.=∑i=1mαi−12∑i=1m∑j=1mαiyiαjyjk(xi,xj)∑i=1mαiyi=0,αi≥0,i=1,2...,m(46) max α L = ∑ i = 1 m α i − 1 2 ∑ i = 1 m ∑ j = 1 m α i y i α j y j k ( x i , x j ) s . t . ∑ i = 1 m α i y i = 0 , (46) α i ≥ 0 , i = 1 , 2... , m
2.3.5 SMO算法:
思想 :
step1:选取一对待更新变量 αi α i , αj α j
step2:固定除 αi α i , αj α j 以外的参数,求解 (38) ( 38 ) ,获得更新后的 αi α i , αj α j
不断执行以上两个步骤直至收敛
αi α i , αj α j 如何选?
选取的变量只要有一个不满足KKT条件,目标函数就会在迭代之后增大,直观来看,KKT条件违背的程度越大,则更新后目标函数的增幅越大
SMO首先选取违背KKT条件程度最大的变量作为第一个变量,第二个变量应该选择一个使得目标函数增长最快的变量,但比较各变量所对应的目标函数数值增幅的复杂度较高,SMO采取了启发式的想法:所取两变量所对应样本之间间隔最大。
- 求解:
在固定其他参数后,约束可以写为 αiyi+αjyj=c,αi≥0,αj≥0 α i y i + α j y j = c , α i ≥ 0 , α j ≥ 0 ,其中 c=−∑k≠i,jαkyk c = − ∑ k ≠ i , j α k y k
αiyi+αjyj=c α i y i + α j y j = c 消去 αj α j 可得到关于 αi α i 的单变量二次规划问题,仅有的约束是 αi≥0 α i ≥ 0 ,这样的二次规划具有闭式解,不必调用数值优化算法即可高效求解 αi,αj α i , α j
2.3.5 软间隔与正则化:
软间隔指的是,我们允许分类超超平面在一些样本上出错,缓和硬间隔在要求在特征空间完全线性可分的要求
允许某些样本不满足约束:
yif(xi)≥1(47) (47) y i f ( x i ) ≥ 1
同时在最大化硬间隔的同时,不满足约束的样本尽可能的少:
minw,b12||w||2+C∑i=1ml0/1(yi(wTxi+b)−1)(48) (48) min w , b 1 2 | | w | | 2 + C ∑ i = 1 m l 0 / 1 ( y i ( w T x i + b ) − 1 )
C趋于无穷时迫使每个样本必须满足约束
l0/1 l 0 / 1 为0/1损失函数,非凸不连续,不易直接求解,换为hingeloss:
hinge(z)=max(0,1−z)(49) (49) h i n g e ( z ) = m a x ( 0 , 1 − z )
minw,b12||w||2+C∑i=1mmax(0,1−yi(wTxi+b))(50) (50) min w , b 1 2 | | w | | 2 + C ∑ i = 1 m m a x ( 0 , 1 − y i ( w T x i + b ) )
引入松弛变量,
ξi≥0 ξ i ≥ 0 ,则
(50) ( 50 ) 可写为:
minw,b12||w||2+C∑i=1mξs.t.yi(wTxi+b)≥1−ξiξi≥0,i=1,2,...m(51) min w , b 1 2 | | w | | 2 + C ∑ i = 1 m ξ s . t . y i ( w T x i + b ) ≥ 1 − ξ i (51) ξ i ≥ 0 , i = 1 , 2 , . . . m
SVM的损失函数可以看做
结构风险+
经验风险,将0/1损失函数替换为对数损失函数,可以近似得到LR。
对数损失函数:
llog=log(1+exp(−z))(52) (52) l l o g = l o g ( 1 + e x p ( − z ) )
2.3.6 SVR回归
loss=minw,b12||w||2+C∑i=1mlϵ(f(xi)−yi)(53) (53) l o s s = min w , b 1 2 | | w | | 2 + C ∑ i = 1 m l ϵ ( f ( x i ) − y i )
lϵ(z)={0,|z|−ϵ,if|z|≤ϵelse(54) (54) l ϵ ( z ) = { 0 , i f | z | ≤ ϵ | z | − ϵ , e l s e
SVR允许有一点的误差,在误差小于
ϵ ϵ 的时候不会产生损失
2.3.7 相关问题总结
SVM为什么采用间隔最大化?
当训练数据线性可分时,存在无穷个分离超平面可以将两类数据正确分开。线性可分支持向量机利用间隔最大化求得最优分离超平面,这时,解是唯一的。另一方面,此时的分隔超平面所产生的分类结果是最鲁棒的,对未知实例的泛化能力最强。
SVM为什么要引入对偶?
- 对偶问题往往更易求解(当我们寻找约束存在时的最优点的时候,约束的存在虽然减小了需要搜寻的范围,但是却使问题变得更加复杂。为了使问题变得易于处理,我们的方法是把目标函数和约束全部融入一个新的函数,即拉格朗日函数,再通过这个函数来寻找最优点。)
- 自然引入核函数进而推广到非线性分类问题。表示少数支持向量的形式 GRAM矩阵计算快
SVM为什么引入核函数?
当样本在原始空间线性不可分时,可将样本从原始空间映射到一个更高维的特征空间,使得样本在这个特征空间内线性可分。
什么是Kernel trick ?
Kernel trick 在学习预测中,只定义核函数K(x,y),而不是显式的定义映射函数ϕ。因为特征空间维数可能很高,甚至可能是无穷维,因此直接计算ϕ(x)·ϕ(y)是比较困难的。相反,直接计算K(x,y)比较容易(即直接在原来的低维空间中进行计算,而不需要显式地写出映射后的结果)。
为什么SVM对缺失数据敏感?
这里说的缺失数据是指缺失某些特征数据,向量数据不完整。SVM没有处理缺失值的策略(决策树有)。而SVM希望样本在特征空间中线性可分,所以特征空间的好坏对SVM的性能很重要。缺失特征数据将影响训练结果的好坏。
SVM如何处理多分类?
- 一对一:将N个类别两两配对,产生N(N-1)/2个二分类任务,测试阶段新样本同时交给所有的分类器,最终结果通过投票产生。避免了数据偏斜的问题,但是也很容易发现这种方法是分类器的数目呈平方级上升。
- 一对多:训练N个,取最大值作为结果。这种方式可能会出现分类重叠现象或者不可分类现象,而且由于“其余”的数据集过大,这样其实就人为造成了“数据偏斜”的问题。
- 基于决策树的方法:对于一个数据集,我们可以采用一些聚类的方法(例如Kmeas)把数据集分成两个子类,然后对两个子类进一步划分,如此循环,直到子类中只包含一个类别为止。最后,在二叉树各决策节点训练支持向量机分类器,需要学习的二类分类器数目是最少的。
SVM与LR对比:
联系:
- 如果不考虑核函数,SVM与LR都是线性分类器
- SVM LR都会受到异常值的影响,SVM更敏感
- 将SVM的hinge loss替换为对数损失可近似得到LR
区别:
- 本质:损失函数不同,SVM是hinge loss,LR是对数函数
- SVM不直接依赖数据分布,分类平面不受一类点的影响,LR受到所有数据点的影响(可能需要做样本平衡)
- SVM依赖penalty系数 实验要validation
- SVM 计算复杂度受数据量限制,LR(大规模矩阵计算)大数据更广泛
- LR可以给出概率,SVM数学推导优美
SVM LR如何选择?:
- 如果Feature的数量很大,跟样本数量差不多,这时候选用LR或者是Linear Kernel的SVM
- 如果Feature的数量比较小,样本数量一般,不算大也不算小,选用SVM+Gaussian Kernel
- 如果Feature的数量比较小,而样本数量很多,需要手工添加一些feature变成第一种情况