支持向量机 (三): 优化方法与支持向量回归

拉格朗日乘子法 - KKT条件 - 对偶问题

支持向量机 (一): 线性可分类 svm

支持向量机 (二): 软间隔 svm 与 核函数

支持向量机 (三): 优化方法与支持向量回归



优化方法


一、SMO算法

回顾 支持向量机 (二)(1.7) 式最后要求解的优化问题:

(1.1)maxαi=1mαi12i=1mi=1mαiαjyiyjxixj(1.2)s.t.i=1mαiyi=0(1.3)0αiC,i=1,2,m

在求出满足条件的最优 α 后,即可得 svm 模型的参数 (w,b) ,进而获得分离超平面。可以用通用的二次规划算法求解,该二次规划问题有 m 个变量 ( m 为样本数), (m+1) 项约束,所以当样本容量 m 很大时,问题变得不可解,而本节介绍的 SMO(sequential minimal optimization)算法就是高效求解上述问题的算法之一。

SMO 算法将原来非常大的二次规划问题分解成了一系列非常小的可解的二次规划问题。SMO 算法最诱人的地方在于,这些分解后小的二次规划问题 ,都是拥有解析解的,也就是说,求解这些小的二次规划优化问题不需要通过非常耗时的循环来得到问题的结果。由于不需要矩阵计算,使得 SMO 算法 在实际的数据集的测试中,其计算复杂度介于线性复杂度和二次复杂度之间。SMO 算法的计算复杂度和 svm 的模型也有关系,比如线性核 svm 计算速度较快。在实际测试中发现,如果训练样本是稀疏数据集,那么SMO 算法的效率会极其高。


SMO算法的基本思路是:选择两个变量 α1α2 ,固定其他所有 αi(i=3m),仅针对这两个变量构建二次规划问题,这样就比原来复杂的优化问题简化很多。由于有约束条件 i=1mαiyi=0 ,固定了其他 αi(i=3m) 后,可得 α1y1+α2y2=i=3mαiyi 。所以 α1 确定后,α2 即可自动获得,则该小型二次规划问题中的两个变量会同时更新,接着再不断选取新的变量进行优化。

如何在每一步选择合适的 α 进行优化? SMO 采用启发式的变量选择方法:第 1 个变量 α1 ,一般选择训练样本中违反 KKT 条件最严重的样本点所对应的 α 。而第 2 个变量 α2 则选取与 α1 的样本点之间间隔最大的样本点对应的 α ,这样二者的更新往往会给目标函数带来更大的变化。这里的 KKT 条件具体指的是:

αi=0yif(xi)10<αi<Cyif(xi)=1αi=Cyif(xi)1

其中 f(xi)=wxi+b=j=1mαjyjxixj+b 。还有一点就是,由于 KKT 条件过于地严格,比如 yif(xi)=1 ,这个条件一般很难达到,所以在检验 KKT 条件的时候,都是在一定的误差范围 ϵ 内检验 KKT 条件的, 即 |yif(xi)1|<ϵ



在选择了合适的变量后,下面来看如何解 α1α2

若不考虑约束项 (1.2)(1.3) ,由于固定了其他所有 αi(i=3m) ,因此设 α1y1+α2y2=i=3mαiyi=ζ ,利用 yi2=1 两边同乘以 y1 ,则 α1=(ζα2y2)y1 ,代入 (1.1) 式并求导即可得最优的 α2 ,继而利用上式求得 α1

然而由于约束项 (1.3) 的存在,α1α2 必须位于 [0,C]×[0,C] 围成的矩形区域内; 且由于约束项 (1.2) 的存在, α1y1+α2y2=i=3mαiyi=ζ ,又由于 y1, y2 只能取 +11 ,所以在第一种情况 —— y1y2 异号时,α1α2 位于直线 α1α2=ζ 上 (这里取 y1=1,y2=1 ,反过来情况类似),如下图:



这里采用迭代优化,假设上一轮迭代得到的最优解是 α1oldα2old,本轮迭代完成后的解为 α1newα2new。由于要满足约束条件,α2new 存在下界 L 和上界 H ,即: Lα2newH

假设要求 α2 的最小值,从图中可以看到只有当 α1=0 时,α2 可以在矩形区域内的直线 α1α2=ζ 上取得最小值。此时 α2new=ζ=α2oldα1old ( 后面一个等式是因为 ζ 是常数 ) ,从图中也显示红线和绿线与 y 轴都相交于 (0,ζ) ,然而由于约束 0α2C 的存在,图中绿线的下端点只能取到 (ζ,0) ,所以综合这两种情况 α2 的下界 L=max(0,ζ)=max(0,α2oldα1old)


同理要求 α2 的最大值,只有当 α1=C 时,α2 可以在矩形区域内的直线 α1α2=ζ 上取得最大值。红线和绿线与 y 轴都相交于 (C,Cζ) ,然而由于约束 0α2C 的存在,图中红线的上端点只能取到 (C+ζ,C) ,所以综合下来 α2 的上界 H=min(C,Cζ)=min(C,C+α2oldα1old)


第二种情况 —— y1y2 同号时,α1α2 位于直线 α1+α2=ζ 上 (这里取 y1=1,y2=1 ,反过来情况类似),如下图:



假设要求 α2 的最小值,从图中可以看到只有当 α1=C 时,α2 可以在矩形区域内的直线 α1+α2=ζ 上取得最小值。此时 α2new=ζC=α1old+α2oldC ,从图中也显示红线和绿线与 y 轴都相交于 (C,ζC) ,然而由于约束 0α2C 的存在,图中绿线的下端点只能取到 (ζ,0) ,所以综合这两种情况 α2 的下界 L=max(0,ζC)=max(0,α1old+α2oldC)

同理要求 α2 的最大值,只有当 $\alpha_1 = 0\alpha_2$ 可以在矩形区域内的直线 α1+α2=ζ 上取得最大值。红线和绿线与 y 轴都相交于 (0,ζ) ,然而由于约束 0α2C 的存在,图中红线的上端点只能取到 (ζC,C) ,所以综合下来 α2 的上界 H=min(C,ζ)=min(C,α1old+α2old)


于是在 Lα2newH 的约束范围内求得 α2new 后,继而从 α1y1+α2y2=i=3mαiyi=ζ 中求得 α1new ,这样 α1α2 就同时得到了更新。接下来不断选择变量进行优化,当所有 αi 都满足 KKT 条件时,算法终止,求得了最优的 αi,i=1,2,m




二、Hinge Loss 梯度下降

svm 使用的损失函数为 hinge loss,即为:

L(y,f(x))=max(0,1yf(x))

hinge loss 使得 yf(x)>1 的样本损失皆为 0,由此带来了稀疏解,使得 svm 仅通过少量的支持向量就能确定最终超平面。下面来看 hinge loss 是如何推导出来的,支持向量机 (二)(1.1) 式带软间隔的 svm 最后的优化问题为:

(1.4)minw,b,ξ12||w||2+Ci=1mξi(1.5) s.t. yi(wxi+b)1ξi,i=1,2,,m(1.6)ξi0,i=1,2,m


(1.5) 式重新整理为 ξi1yi(wxi+b) 。若 1yi(wxi+b)<0 ,由于约束(1.6) 的存在,则 ξi0 ;若1yi(wxi+b)0 ,则依然为 ξi1yi(wxi+b) 。所以 (1.5),(1.6) 式结合起来:

ξimax(0,1yi(wxi+b))=max(0,1yif(xi))

又由于 (1.4) 式是最小化问题,所以取 ξi 的极小值,即令 ξi=max(0,1yf(x)) 代入 (1.4) 式,并令λ=12C

min(Ci=1mmax(0,1yif(xi))+12||w||2)min(i=1mmax(0,1yif(xi))hingeloss+λ||w||2)


svm 中最常用的优化算法自然是上文中的 SMO 算法,不过有了损失函数后也可以直接优化。由于 hinge loss 在 yi(wTxi+b)=1 处不可导,因而无法直接使用梯度下降,不过可以通过求次梯度 (subgradient) 来进行优化:

Lw={yixiifyi(wxi+b)<10otherwiseLb={yiifyi(wxi+b)<10otherwisew=wηLwb=bηLb






支持向量回归


前文主要叙述支持向量机用于分类问题,当然其也可用于回归问题。给定一组数据 {(x1,y1),(x2,y2),,(xm,ym)} ,其中 xiRdyiR ,回归问题希望学得一个模型 f(x)=wx+b ,使得 f(x)y 尽可能接近 。传统的回归模型通常基于模型输出 f(x) 与真实输出 y 之间的差别来计算损失。当且仅当 f(x)y 完全相同时,损失才为零。支持向量回归 ( Support Vector Regression,以下简称 svr ) 与之不同,它假设能容忍 f(x)y 之间最多有 ϵ 的偏差,即仅当 |f(x)y|>ϵ 时,才计算损失。如下图所示,svr 相当于以 f(x) 为中心,构建了一个宽度为 ϵ 的间隔带。若训练样本落在此间隔带内则被认为是预测正确的。


svr 的损失函数由此被称为 ϵinsensitive error ,形如 :

(2.1)L(y,f(x))={0if|yf(x)|ϵ|yf(x)|ϵotherwise


本质上我们希望所有的模型输出 f(x) 都在 ϵ 的间隔带内,因而与 支持向量机 (一) 中的 (1.3) 式一样,我们可以定义 svr 的优化目标:

(2.2)minw,b12||w||2 s.t. |yiwxib|ϵ,i=1,2,,m


同样类似于 支持向量机 (二) 中的 (1.1) 式,可以为每个样本点引入松弛变量 ξ>0,即允许一部分样本落到间隔带外,使得模型更加 robust 。由于这里用的是绝对值,实际上是两个不等式,也就是说两边都需要松弛变量,我们定义为 ξi,ξi ,于是优化目标变为:

(2.3)minw,b,ξ,ξ12||w||2+Ci=1m(ξi+ξi)s.t.ϵξiyiwxibϵ+ξiξi0,ξi0i=1,2,,m


上式中的 Cϵ 分别对应 scikit-learn 的 SVR 中的参数 CepsilonC 越大,意味着对离群点的惩罚就越大,最终就会有较少的点跨过间隔边界,模型也会变得复杂。而 C 设的越小,则较多的点会跨过间隔边界,最终形成的模型较为平滑。而 epsilon 越大,则对离群点容忍度越高,最终的模型也会较为平滑,这个参数是 svr 问题中独有的,svm 中没有这个参数。


对于 (2.3) 式,为每条约束引入拉格朗日乘子 μi0,μi0,αi0,αi0

(2.4)L(w,b,α,α,ξ,ξ,μ,μ)=12||w||2+Ci=1m(ξi+ξi)+i=1mαi(ϵξiyi+wxi+b)+i=1mαi(yiwxibϵξi)i=1mμiξii=1mμiξi


其对偶问题为:

(2.5)maxα,μminw,b,ξL(w,b,α,α,ξ,ξ,μ,μ)s.t.αi,αi0,i=1,2,mμi,μi0,i=1,2,m


上式对 w,b,ξi,ξi 求偏导为零可得:

(2.6)Lw=0w=i=1m(αiαi)xi(2.7)Lb=0i=1m(αiαi)=0(2.8)Lξ=0Cαiμi=0(2.9)Lξ=0Cαiμi=0

(2.6)(2.9) 式代入 (2.4) 式,并考虑由(2.8),(2.9) 式得 Cαi=ui0 ,因而 0αiC 得化简后的优化问题:

(2.10)maxα,αi=1myi(αiαi)ϵ(αi+αi)12i=1mj=1m(αiαi)(αjαj)xixjs.t.i=1m(αiαi)=00αi,αiC,i=1,2,m


上述求最优解的过程需满足 KKT 条件,其中的互补松弛条件为 :

{αi(ϵ+ξi+yiwxib)=0(2.11)αi(ϵ+ξiyi+wxi+b)=0(2.12)μiξi=(Cαi)ξi=0(2.13)μiξi=(Cαi)ξi=0(2.14)


若样本在间隔带内,则 ξi=0|yiwxb|<ϵ ,于是要让互补松弛成立,只有使 αi=0,αi=0 ,则由 (2.6) 式得 w=0 ,说明在间隔带内的样本都不是支持向量,而对于间隔带上或间隔带外的样本,相应的 αiαi 才能取非零值。此外一个样本不可能同时位于 f(x) 的上方和下方,所以 (2.11)(2.12) 式不能同时成立,因此 αiαi 中至少一个为零。


优化问题 (2.10) 同样可以使用二次规划或 SMO 算法求出 α ,继而根据 (2.6) 式求得模型参数 w=i=1m(αiαi)xi 。而对于模型参数 b 来说,对于任意满足 0<αi<C 的样本,由 (2.13)(2.14) 式可得 ξi=0 ,进而根据 (2.11)(2.12) 式:

b=ϵ+yiwxi=ϵ+yij=1m(αjαj)xjxi

svr 最后的模型为:

f(x)=wx+b=i=1m(αiαi)xix+b






支持向量机算法总结


支持向量机的优点:

  1. 解决高维特征的分类问题和回归问题很有效,在特征维度大于样本数时依然有很好的效果。
  2. 仅仅使用一部分样本决定超平面,内存占用少。
  3. 有大量的核函数可以使用,从而可以很灵活的来解决各种非线性的分类回归问题。

支持向量机的缺点:

  1. 当采用核函数时,如果需要存储核矩阵,则空间复杂度为 O(m2)
  2. 选择核函数没有通用的标准 (当然其实是有的,见下文~) 。
  3. 样本量很大时,计算复杂度高。

对于第 3 个缺点,scikit-learn 的 SVC 文档中有一句话:

The fit time scales at least quadratically with the number of samples and may be impractical beyond tens of thousands of samples.


我特意去查了下字典,”tens of thousands“ 意为 ”好几万“,也就是说对于几万的数据 svm 处理起来就已经很捉急了,至于百万到亿级的数据基本就不用想了,这在如今这个大数据时代确实不够看,不过这里说的是使用核函数的 svm。而对于线性 svm 来说,情况要好很多,一般为 O(m)



LibSVM 的作者,国立台湾大学的林智仁教授在其一篇小文(A Practical Guide to Support Vector Classification)中提出了 svm 库的一般使用流程 :


其中第二步 scaling 对于 svm 的整体效果有重大影响。主要原因为在没有进行 scaling 的情况下,数值范围大的特征会产生较大的影响,进而影响模型效果。

第三步中认为应优先试验 RBF 核,通常效果比较好。但他同时也提到,RBF 核并不是万能的,在一些情况下线性核更加适用。当特征数非常多,或者样本数远小于特征数时,使用线性核已然足够,映射到高维空间作用不大,而且只要对 C 进行调参即可。虽然理论上高斯核的效果不会差于线性核,但高斯核需要更多轮的调参。


下表总结了 scikit-learn 中的 svm 分类库:


scikit-learn 中 svm 库的两个主要超参数为 CγCγ 越大,则模型趋于复杂,容易过拟合;反之,Cγ 越小,模型变得简单,如下图所示:







/

posted @   massquantity  阅读(11684)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示