浅学支持向量机(含具体推导、核函数)

参考了西瓜书,《机器学习》周志华

背景

在超平面(比如三维立体,甚至更高维)上,找到一个分类面

wTx+b=0

看起来很陌生,其实直线方程和 Ax+By+C=0 一个道理,只不过拓展到了高维,另外注意这里的 x 是指一个高维变量

使得分类面上方都是正例(y=+1),下方都是反例(y=1

支持向量机

如果止步于此,就只是普通的线性模型罢了,而接下来引出支持向量最重要的特性——稀疏性

样本到分类面距离为

|r|=wTx+b||w||

其中,分母的符号是向量二范数,即向量的欧几里得距离,也就是向量取模,另外注意这里的 x 是指一个样本

同直线方程一样,参数等比例放缩时,方程本质不变,即所代表的分类面不变,那么不妨让距离分类面最近的点 xp 的分母部分值最小(类似单位化,只不过我们平常的单位化都是把分母置为 1 ),即 wTxp+b=±1,则有

yi(wTxi+b)1

注意这里 xi 是指第 i 个样本点,yi 是正反例的取值

显然,我们要让样本离分类面尽可能远,|r| 尽可能大,那么分母就要尽可能小

则问题就变成了

minw,b  12||w||2s.t.  yi(wTxi+b)1

注意,系数 12 是为了之后求导化简方便,选择平方是为了省去二范数的开根并且保证单调性不变(都是非负的)

显然,该问题是凸优化问题,可以用现成的凸二次规划算法解决,但是还有一种性能更优的算法,需要以此引出对偶问题

拉格朗日乘数法

与线性判别分析 LDA 类似,对约束下的凸优化问题,采用拉格朗日乘数法

首先化成目标函数取最小,约束条件小于等于 0 的一般形式,然后左边乘上拉格朗日乘子

L(w,b;μ)=12||w||2+i=1mμig(xi)=12||w||2+i=1mμi(1yi(wTxi+b))

再次提醒,其中 xi 不是变量,是样本数据,是已知量,w,b 是待优化参数,μ 是拉格朗日乘子

仅此转化,问题还不等价,因为拉格朗日乘子法针对的是等式约束,而这里是不等式约束,还需要满足 KKT 条件:

{g(xi)0μi0μig(xi)=0

最主要的就是第三个条件,要么 μi=0,要么 g(xi)=0,前者即代表最优解不在等式约束上(即在 g(xi)<0 内有最优解),后者表示最优解在等式约束上,即此时不等式约束取等了,此时的 xi 即为所谓支持向量

不难看出,这相当于我们找出了 μi 不等于 0 的项作为约束条件,去空间上找到 w,b 使得原函数取得最小值的解

这便是支持向量机最大的特点——稀疏性

偏导

接下来,将 L(w,b;μ) 分别对 w,b 求偏导得

L(w,b;μ)=12wTIw+i=1m(μiμiyixiTwμiyib)wL(w,b;μ)=Iwi=1mμiyixi=wi=1mμiyixi

注意这里 I 表示单位阵,这里做了两个转换,一个是向量二范数的等价形式,展开计算一下就能理解,另一个是我自己看的比较舒服的,把变量放到最后的形式,求导利用了两个公式

wwTx=wxTw=xw(Aw+u)TB(Aw+u)=2AB(Aw+u)

同理对 b 求导(一维变量求导不过多赘述),令二者等于 0,得

w=i=1mμiyixi0=i=1mμiyi

回代入原式得

L(w,b;μ)=12i=1mμiyixiTj=1mμjyjxj+i=1mμii=1mμiyixiTj=1mμjyjxj=i=1mμi12i=1mj=1mμiμjyiyjxiTxj

对偶问题转化

infw,bL(w,b;μ)L(w,b;μ)12||w||2

inf 表示下确界 infimum,w,b 表示,最后一个不等式放缩掉了约束项(必定小等于 0)

注意最左边对于 w,b 来说是与其无关的"常量",而与 μ 有关的"变量"

可以理解为,对于一个二次函数,找到一条平行于 x-axis 的直线 y=b 不断向上移动,触碰到这个二次函数的最底部时,取得不等式的相等条件,即优化参数 μ 使得 L(μ;w,b) 最大

maxμ L(μ;w,b)=i=1mμi12i=1mj=1mμiμjyiyjxiTxjs.t. i=1myiμi=0μi0

解出 μ 后即可求出 w,b,此时可以舍去 μi=0 的样本,很好地体现了 SVM 的稀疏性

注意 b 的求解方法是,将 w 代入方程 yi=wT+b

但是解参数的过程中 μ 是正比于样本数的,直接用二次优化反而使得问题更加复杂,实际过程中一般使用 SMO 迭代优化

SMO

类似线性方程组求解,超越方程求解的迭代法,求取一个近似解

首先确定一个初值 μ,然后取出一对待更新变量 μi,μj ,原先的优化目标函数就具有如下形式

f(μi,μj)=Pμi+Qμj+Rμiμj+S

0=i=1mμiyi

yiμi+yjμj=ki,kjykμk

则原优化目标变成一个只与 μi 有关的二次优化问题,但是要注意 μi,μj0 的约束,或者说定义域

直观来看,KKT条件违背的程度越大,则变量更新后可能导致的目标函数值减幅越大。于是,SMO 先选取违背 KKT 条件程度最大的变量,第二个变量应选择一个使目标函数值减小最快的变量,但由于比较各变量所对应的目标函数值减幅的复杂度过高,因此 SMO 采用了一个启发式:使选取的两变量所对应样本之间的间隔最大

此时,可解得 w,为了增强模型鲁棒性,b 的一般取对每个支持向量解出的值的平均

核函数

为了将问题拓展到非线性空间,总是可以通过增加维数(当然可以不增加,甚至减少,比如 LDA)来将非线性分类问题映射到更高维的空间,使得问题在这个更高维度的空间线性可分,比如对异或问题 x1x2 增加第三维度 x1x2

最终,其实就是把样本 xi 的 m 维数据拓展为 ϕ(xi) 的 n 维数据,分类面变为

wϕ(xi)+b=0

注意到,此时大部分公式基本无差,只是 xi 变为 ϕ(xi),但是有个关键地方

L(w,b;μ)=i=1mμi12i=1mj=1mμiμjyiyjϕ(xi)Tϕ(xj)

这里,我们记

κ(xi,xj)=ϕ(xi)Tϕ(xj)

并称之为核函数,而对于每一对 i,j,都有一个运算结果(标量),把这些标量按下标放入矩阵,即得到核矩阵

显然,从物理意义上出发,两个参数是对称的,或者说可交换位置的,故核矩阵是对称的。以及,本身向量内积某种程度上反映了两个向量的相似程度,主对角线上元素显然是较大的。此外,核矩阵运算结果是半正定的。

事实上,对于一个半正定核矩阵,总能找到一个与之对应的 ϕ,换言之,任何一个核函数都隐式地定义了一个称为 Reproducing Kernel Hilbert Space 的特征空间

那么如何构造核函数?答案是比较困难,一般有几个现成的核函数,其中线性核(其实就是普通 SVM,没做任何变换)、高斯核最常用

那原来的 ϕ(x) 呢?注意我们这里只需要用到 ϕ(x)Tϕ(y)=κ(x,y) 所以无所谓,只要 ϕ(x) 这个函数存在就行

软间隔

分类问题中,也有可能出现无法分类的情况(本身就存在一定的交叉地带),此时我们则需要引入软间隔概念

软间隔的核心思想就是:让不满足分类条件的(即分类错误的、在分隔带上的)样本所带来的代价尽可能小

对每个样本带来的代价,引入损失函数 (x) 松弛变量 ξi,其中 C 是正则化系数

minw,b  12||w||2+Ci=1m(yi(wTxi+b1))s.t.  yi(wTxi+b)1ξi,i=1,2,3,,m

其中损失函数 常用 0/1 损失函数 与 hinge 损失函数

0/1(z)={1,z<00,z0, hinge(z)=max(0,z)

注:这里的 hinge 函数与周志华老师书的 hinge 函数 hinge(z)=max(0,1z) 略有不同,如果直接代入,则会导致 yi(wTxi+b1) 小于 1 的情况也被考虑入损失,而事实上只能考虑到小于 0 的情况,这里应该是周志华老师书的记号没有表示清楚,原书的图大概也有点问题

那么接下来我们考虑 hinge 损失函数,则整个式子变为

minw,b  12||w||2+Ci=1mξis.t.  yi(wTxi+b)1ξiξ0,i=1,2,3,,m

同样地,使用拉格朗日乘子法

L(w,b,ξ;μ,γ)=12||w||2+Ci=1mξi+i=1mμi(1ξiyi(wTxi+b))i=1mγiξi

上式中,前三者为原函数变量,后二者为拉格朗日乘子,在研究对偶问题时请注意区别

KKT 条件

{1ξiyi(wTxi+b)0μi(1ξiyi(wTxi+b))=0μi0,γi0,ξi0γiξi=0

置偏导为 0 后

{w=i=1mμiyixii=1mμiyi=0C=μi+γi

带入并化简对偶问题,得

maxμi=1mμi12i=1mj=1mμiμjyiyjxiTxjs.t.i=1mμiyi=0,0μiC, i=1,2,3,,m

posted @   LacLic  阅读(113)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示