Andrew Ng - SVM【3】最后的面纱-核函数&SMO

最后的面纱-核函数&SMO


1. 核函数

在Ng之前将线性回归的篇幅中,有一个预测房价的问题,输入 x 是房子的面积,假设我们用三次函数拟合数据,这是一个非线性的问题,用ϕ表示特征映射,会得到:


ϕ(x)=xx2x3


如果我们使用对 ϕ(x) 的学习代替对 x 的学习(为了做到这一点,我们将使用ϕ(x)换掉前边算法中的 x ),回看一下我们之前的几个公式,凡是x出现的地方都是内积 x,z 的形式,也就意味着所有的这种形式我们都可以用 ϕ(x),ϕ(z) 代替,即定义:

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

这样我们的问题又回到了线性!将高维映射到了低维。但是同时又有一个问题出现了,在计算内积 ϕ(x),ϕ(z) 的时候,可能 ϕ(x) 本身的维度会非常高,计算代价变得非常之大。当然,我们必须要让这种情况必须不是问题,我们甚至根本不用明确的写出 ϕ(x) 。Your eyes please follow me,假设 x,zR K(x,z)=(xTz)2 ,即:

K(x,z)=(i=1nxizi)j=1nxjzj=i=1nj=1nxixjzizj=i=1nj=1n(xixj)(zizj)


注意到当 n =3时:

ϕ(x)=x1x1x2x2x3x3x1x1x2x2x3x3x1x1x2x2x3x3


计算 ϕ(x)Tϕ(z) 的时间复杂度以下就飙升到了 O(n2) ,但是计算 (xTz)2 的时间复杂度却是 n (非常之牛逼)。再看一组爽一下:

K(x,z)=(xTz+c)2=i=1nj=1n(xixj)(zizj)+i=1n(2cxi)(2czi)+c2


注意到当 n =3时:

ϕ(x)=x1x1x2x2x3x3x1x1x2x2x3x3x1x1x2x2x3x32cx12cx22cx3c


我们可以观察到 ϕ(x) 中即包含了一次项又包含了二次项,而c的作用则是它可以很方便的控制一次项与二次项之间的相对权重。而我们又上演了精彩一幕,只用 O(n) 的时间复杂度(计算 xTz+c )解决一个时间复杂度为 O(n2) 的问题( ϕ(x),ϕ(z) )。而上一核函数更一般的形式如下:

K(x,z)=(xTz+c)d

这对应着 (n+dd) n+dd? ),其数量级应该是 (n+d)d 的随d呈指数上升,所以 ϕ 将是一个维度很高的特征向量。但是!你依然可以在 O(n) 的时间复杂度将其搞定!
所以说核函数的威力很大。那么当遇到一个机器学习问题的时候,我们应该怎样选择核函数呢?给定一组属性 x 并将其转化为一个特征向量ϕ(x);另一组属性 z 并将其转化为一个特征向量ϕ(z)。所以核函数做的事情就是计算 ϕ(x),ϕ(z) 。我们说如果 x z非常相似,那么 ϕ(x) ϕ(z) 大概会指向相同的方向,所以内积会非常大;而如果 x z差别较大,那么 ϕ(x) ϕ(z) 大概会指向相反的方向,所以内积会非常小。这种直观的理解和表述可能不是非常严谨,但在实际中却能发挥很好的效用。所以说当我们遇到一个新的机器学习问题,如果我们希望学习算法认为 x z是相似的,那么我们可以使 K(x,z) 取一个较大的值;如果我们希望学习算法认为 x z不一样,那么我们可以使 K(x,z) 取一个较小的值( 注意 K(x,z) 是内积,大于0)。
所以,当我们需要度量 x z的相似度的时候,核函数将会是一个很好的方式。对于下边的核函数:
K(x,z)=exp(||xz||22σ2)

x z相近的时候函数值接近于1;而当 x z相差很远的时候函数值接近于0(这个核函数的特征映射 ϕ 是无线维的)。实际上还存在一个问题,我们怎么确定一个核函数是一个有效的核函数呢?答曰:
ϕs.t.K(x,z)=ϕ(x),ϕ(z)

我们通常假设 K 是一个合理的 ,考虑对于一个有限集 S={x(1),...,x(m)} ,再定义一个 mm K 使得 Ki,j=K(x(i),x(j)) ,将 K 叫做核矩阵。则有:
Ki,j=K(x(i),x(j))=ϕ(x(i))Tϕ(x(j))=ϕ(x(j))Tϕ(x(i))=K(x(j),x(i))=Kj,i

所以 K 是一个对称矩阵。用 ϕk(x) 表示 ϕ(x) 的第 k 个元素,这时对于任意一个m维向量 z

zTKz=i=1mj=1mziKijzj=i=1mj=1mziϕ(x(i))Tϕ(x(j))zj=i=1mj=1mzik=1mϕk(x(i))ϕk(x(j))zj=k=1mi=1mj=1mziϕk(x(i))ϕk(x(j))zj=k=1m(i=1mziϕk(x(i)))20.


因为 zTKz0 ,说明 K 是一个半正定的矩阵(K0)。因此如果 K 是一个有效的核(因为这个名字是由Mercer提出来的,历史原因,我们也将有效核称为Mercer核),则对应的和举证应该是半正定的(注意反之亦成立)。这就给我们提供了一种测试核函数是否合法的方式,K(x,z)是一个有效核的充要条件是,对于任意 x(1),...x(m),(m<) ,核矩阵都是半正定的。到这里,相信我们对核函数都有了一个比较清晰的认识,有内积 x,z 的地方直接换成 K(x,z) ,使本来在低维线性不可分的问题转化到高维用超平面划分,但计算量还是维持在很高效的范围内,很爽!不过,还有个问题,假如数据在高维依然是不可分的呢?让我们引入下一话题: l1norm 软边界 SVM

2. l1 norm软边界SVM

直奔主题,先看两张图:


这里写图片描述

左图是当界限比较明显的时候比较合理的分割超平面,而作为对比,当有一个异常点出现的时候,按照我们前面的分析和处理方法,将会得到和右图实线差不多的一个分割超平面,这个就有点飘了。所以为了让分类器对有问题的点不是那么敏感,我们把优化问题改写成如下的形式(用 l1l1 ):

minγ,ω,b12||ω||2+Ci=1mξis.t.y(i)(ωTx(i)+b)1ξi,i=1,...,mξi0,  i=1,...,m.


这实际上市允许求解超平面时函数间隔可以小于1,并且对于那些函数间隔小于1的点( 1ξi )我们将会施以小小的惩罚 Cξi 。所以 C 在这里其实扮演了一个比较重要的角色,即控制 “(1)使||ω||2尽量的小和(2)保证尽可能多的点的函数间隔最少是1” 这两个我们需要兼顾的目标之间的权重关系。然后,像之前一样,我们将式子写成拉格朗日函数的形式:

L(ω,b,ξ,α,r)=12ωTω+Ci=1mξii=1mαi[y(i)((ω)Tx(i)+b)1+ξi]i=1mriξi


然后可以求出其对偶形式为:

maxαW(α)=i=1mαi12i,j=1my(i)y(j)α(i)α(j)x(i),x(j). s.t.0αiC,i=1,...,m   i=1mαiy(i)=0


而对应于对偶形式,其KKT条件为:

αiαi0<αi=0 y(i)(ωTx(i)+b)1=Cy(i)(ωTx(i)+b)1<Cy(i)(ωTx(i)+b)=1


话说,该假设的也假设了,该分析的也分析了,该优化的也优化了,万事俱备,只差一步,最后对这个对偶问题的算法实现!请看下节:SMO!

3. SMO

I. 坐标上升法
这是一个引子,这明显是一个引子。好吧我把它说出来了。
若有一个没有约束条件的优化问题如下:


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


坐标上升法的优化方法是:

Loopuntilconvergence:{Fori=1,...,m, {αi:=arg maxαi^ W(α1,...,αi1,αi^,αi+1,...,αm).}}


坐标上升法保持除 αi 之外的所有参数固定,然后相对于 αi 求函数最大值。我们用一张图来说明一下这个算法:

这里写图片描述

从起点开始,坐标上升法每次都会取一个相对最高(图中红点),最后让问题收敛到全局最优( )。当然你会问我,固定其他参数后针对一个参数求最值怎么求?快吗? f=x2+y2+z2 ,固定 y,z argmaxxf=0 ,答案是快,要快很多。

II. SMO sequential minimal optimization -顺序最小优化算法)
拾起我们在SVM中要优化解决的问题:


maxαW(α)=i=1mαi12i,j=1my(i)y(j)α(i)α(j)x(i),x(j). s.t.0αiC,i=1,...,m   i=1mαiy(i)=0


面对一系列的 αi ,我们是否也能固定除某一 αi 以外的其他参数,从而通过迭代收敛求得全局最优?由于种种原因,答案是否定的。好吧,是因为我们有一个约束条件使得:

α1=y(1)mi=2αiy(i)

当其他的值被假设固定以后,其实 α1 的值也就固定了,没法优化了。没办法了? No !为了满足那些约束条件,我们同时对两个参数进行更新:

Loopuntilconvergence:{1.αi,αj()2.αi,αjW}


有一点要注意的是,这里的收敛条件是什么呢?如果你还记得的话,我们上边其实说过:KKT。那么通常来说第二步是比较关键的,怎样在满足所有约束条件的情况下能相对于 αi,αj 取得 W 最优呢?假设我们选取的参数是α1,α2,那么有:

α1y(1)+α2y(2)=i=3mαiy(i)=ζ


所以能得到:

α1=(ζα2y(2))y(1)


关注一下问题的约束条件:

(1). 0αiC,i=1,...,m(2). i=1mαiy(i)=0


下面的图片应该能说明一些问题:

这里写图片描述

W(α) 改写一下:

W(α1,α2,...,αm)=W((ζα2y(2))y(1),α2,...,αm)


对比原式 W(α) ,再把 α3,...,αm 都是常数考量进去,最后我们基本上会得到这样的式子,存在一些合适的 A,B,C 使得 W(α2)=Aα22+Bα2+C ,那么我们可以轻松的令二次函数导数为0求得 α2 相应的值为 αnew,unclipped2 unclipped 的意思是说不用考虑约束条件)。所以我们得到 α2 的更新式子为:

αnew2=Hαnew,unclipped2Lαnew,unclipped2>HLαnew,unclipped2 Hαnew,unclipped2<L


当然得到了 αnew2 我们也就得到了 αnew1 。至此,我们的 SVM 学习已经到了尾声,除了一小部分未解决的问题((1)关于选取 αi αj 的启发式规则;(2)如何计算参数b),这一部分笔者将会后续做一个补充,但如果有兴趣大家可以自己试着解决一下。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值