SVM(2)问题的描述与求解

参考:http://www.blogjava.net/zhenandaci/archive/2009/02/13/254578.html
上节说到我们有了一个线性分类函数,也有了判断解优劣的标准——即有了优化的目标,这个目标就是最大化几何间隔,但是看过一些关于SVM的论文的人一定记得什么优化的目标是要最小化 ||ω|| | | ω | | 这样的说法,这是怎么回事呢?回头再看看我们对间隔和几何间隔的定义:
几何间隔: δi=1||ω|||g(xi)| δ i = 1 | | ω | | | g ( x i ) |
δ=1||ω|||g(x)| δ 几 何 = 1 | | ω | | | g ( x ) |
注意到几何间隔与 ||ω|| | | ω | | 是成反比的,因此最大化几何间隔与最小化 ||ω|| | | ω | | 完全是一回事。而我们常用的方法并不是固定 ||ω|| | | ω | | 的大小而寻求最大几何间隔,而是固定间隔(例如固定为1),寻找最小的 ||ω|| | | ω | |

目标函数

凡是求一个函数的最小值(或最大值)的问题都可以称为寻优问题(也叫作一个规划问题)。一个寻优问题最重要的部分是目标函数,例如我们想寻找最小的 ||ω|| | | ω | | 这件事,就可以用下面的式子表示:

min||ω|| m i n | | ω | |
但实际上对于这个目标,我们常常使用另一个完全等价的目标函数来代替,那就是:
min12||ω||2 m i n 1 2 | | ω | | 2
之所以采用这种形式,是因为后面的求解过程会对目标函数作一系列变换,而上式的形式会使变换后的形式更为简洁(添加的系数二分之一和平方,皆是为求导数所需)。

接下来我们自然会问的就是,这个式子是否就描述了我们的问题呢?(回想一下,我们的问题是有一堆点,可以被分成两类,我们要找出最好的分类面)

如果直接来解这个求最小值问题,很容易看出当 ||ω=0|| | | ω = 0 | | 的时候就得到了目标函数的最小值。但是你也会发现,无论你给什么样的数据,都是这个解!反映在图中,就是H1与H2两条直线间的距离无限大,这个时候,所有的样本点(无论正样本还是负样本)都跑到了H1和H2中间,而我们原本的意图是,H1右侧的被分为正类,H2 左侧的被分为负类,位于两类中间的样本则拒绝分类(拒绝分类的另一种理解是分给哪一类都有道理,因而分给哪一类也都没有道理)。这下可好,所有样本点都进入了无法分类的灰色地带。
图1

约束条件

造成这种结果的原因是在描述问题的时候只考虑了目标,而没有加入约束条件
我们前文提到过把间隔固定为1,这是指把所有样本点中间隔最小的那一点的间隔定为1,也就意味着集合中的其他点间隔都不会小于1,按照间隔的定义,满足这些条件就相当于让下面的式子总是成立:

yi(ωTxi+b)1,i=1,2,...,l(l) y i ( ω T x i + b ) ≥ 1 , i = 1 , 2 , . . . , l ( l 是 总 的 样 本 数 )

因此我们的两类分类问题也被我们转化成了它的数学形式,一个带约束的最小值的问题:
{minsubject to 12||ω||2yi(ωTxi+b)10,i=1,2,...,l(l) { m i n 1 2 | | ω | | 2 subject to  y i ( ω T x i + b ) − 1 ≥ 0 , i = 1 , 2 , . . . , l ( l 是 总 的 样 本 数 )

接下来从最一般的意义上看看一个求最小值的问题有何特征,以及如何来解。

求解

参考:http://www.blogjava.net/zhenandaci/archive/2009/02/14/254630.html

K.K.T.条件

参考:支持向量机通俗导论(理解SVM的三层境界)
这里写图片描述
从最一般的定义上说,一个求最小值的问题就是一个优化问题(也叫寻优问题,更文绉绉的叫法是规划——Programming),它同样由两部分组成,目标函数和约束条件,在这里,可以用下面的式子表示K.K.T条件:

minsubject to f(x)ci(x)0,i=1,2,...,pcj(x)=0,j=p+1,p+2,...,p+q { m i n f ( x ) subject to  c i ( x ) ≤ 0 , i = 1 , 2 , . . . , p c j ( x ) = 0 , j = p + 1 , p + 2 , . . . , p + q
(式1)
约束条件用函数c来表示,就是constrain的意思啦。你可以看出一共有p+q个 约束条件,其中p个是 不等式约束,q个 等式约束
关于这个式子可以这样来理解:式中的x是自变量,但不限定它的维数必须为1(视乎你解决的问题空间维数,对我们的文本分类来说,那可是成千上万啊)。要求f(x)在哪一点上取得最小值(反倒不太关心这个最小值到底是多少,关键是哪一点),但不是在整个空间里找,而是在约束条件所划定的一个有限的空间里找,这个有限的空间就是优化理论里所说的 可行域。注意:
1. 可行域中的每一个点都要求满足所有p+q个条件,而不是满足其中一条或几条就可以(切记,要满足每个约束).
2. 同时可行域边界上的点有一个额外好的特性,它们可以使不等式约束取得等号!而边界内的点不行。

凸集

凸集是指有这么一个点的集合,其中任取两个点连一条直线,这条线上的点仍然在这个集合内部,因此说“凸”是很形象的(一个反例是,二维平面上,一个月牙形的区域就不是凸集,你随便就可以找到两个点违反了刚才的规定)。

回头再来看我们线性分类器问题的描述:

{minsubject to 12||ω||2yi(ωTxi+b)10,i=1,2,...,l(l) { m i n 1 2 | | ω | | 2 subject to  y i ( ω T x i + b ) − 1 ≥ 0 , i = 1 , 2 , . . . , l ( l 是 总 的 样 本 数 )
(式2)
在这个问题中,自变量就是 ω ω ,而目标函数是 ω ω 的二次函数,所有的约束条件都是 ω ω 的线性函数(哎,千万不要把 xi x i 当成变量,它代表样本,是已知的),这种规划问题有个很有名气的称呼—— 二次规划(Quadratic Programming,QP),而且可以更进一步的说,由于它的可行域是一个凸集,因此它是一个 凸二次规划

在动手求一个问题的解之前(好吧,我承认,是动计算机求……),我们必须先问自己:这个问题是不是有解?如果有解,是否能找到?
对于一般意义上的规划问题,两个问题的答案都是不一定,但凸二次规划让人喜欢的地方就在于,它有解(教科书里面为了严谨,常常加限定成分,说它有全局最优解,由于我们想找的本来就是全局最优的解,所以不加也罢),而且可以找到!(当然,依据你使用的算法不同,找到这个解的速度,行话叫收敛速度,会有所不同)

对比(式2)和(式1)还可以发现,我们的线性分类器问题只有不等式约束,因此形式上看似乎比一般意义上的规划问题要简单,但解起来却并非如此。

因为我们实际上并不知道该怎么解一个带约束的优化问题。如果你仔细回忆一下高等数学的知识,会记得我们可以轻松的解一个不带任何约束的优化问题(实际上就是当年背得烂熟的函数求极值嘛,求导再找0点呗,谁不会啊?笑),我们甚至还会解一个只带等式约束的优化问题,也是背得烂熟的,求条件极值,记得么,通过添加拉格朗日乘子,构造拉格朗日函数,来把这个问题转化为无约束的优化问题云云(如果你一时没想通,我提醒一下,构造出的拉格朗日函数就是转化之后的问题形式,它显然没有带任何条件)。

如果只带等式约束的问题可以转化为无约束的问题而得以求解,那么可不可以把带不等式约束的问题向只带等式约束的问题转化一下而得以求解呢?是可以的。

回顾图1,圆形的样本点定为正样本(连带着,我们可以把正样本所属的类叫做正类),方形的点定为负例。我们想求得这样一个线性函数(在n维空间中的线性函数):

g(x)=ωTx+b g ( x ) = ω T x + b
使得所有属于正类的点 x+ x + 代入以后有g(x+)≥1,而所有属于负类的点 x x − 代入后有g(x-)≤-1(之所以总跟1比较,无论正一还是负一,都是因为我们固定了间隔为1,注意间隔和几何间隔的区别)。代入g(x)后的值如果在1和-1之间,我们就拒绝判断。

求这样的 g(x) g ( x ) 的过程就是求 ω ω (一个n维向量)和 b b (一个实数)两个参数的过程(但实际上只需要求ω,求得以后找某些样本点代入就可以求得 b b )。因此在求g(x)的时候, ω ω 才是变量。

你肯定能看出来,一旦求出了 ω ω (也就求出了 b b ),那么中间的直线H就知道了(因为它就是ωTx+b=0嘛,哈哈),那么H1和H2也就知道了(因为三者是平行的,而且相隔的距离还是 ||ω|| | | ω | | 决定的)。那么 ω ω 是谁决定的?显然是你给的样本决定的,一旦你在空间中给出了那些个样本点,三条直线的位置实际上就唯一确定了(因为我们求的是最优的那三条,当然是唯一的),我们解优化问题的过程也只不过是把这个确定了的东西算出来而已。

样本确定了 ω ω ,用数学的语言描述,就是 ω ω 可以表示为样本的某种组合:

ω=α1x1+α2x2+...+αnxn ω = α 1 x 1 + α 2 x 2 + . . . + α n x n
式子中的 αi α i 是一个一个的数(在严格的证明过程中,这些 α α 被称为拉格朗日乘子),而 xi x i 是样本点,因而是向量,n就是总样本点的个数。为了方便描述,以下开始严格区别数字与向量的乘积和向量间的乘积,我会用 α1x1 α 1 x 1 表示数字和向量的乘积,而用 <x1,x2> < x 1 , x 2 > <script type="math/tex" id="MathJax-Element-426"> </script>表示向量 x1,x2 x 1 , x 2 的内积(也叫点积,注意与向量叉积的区别)。因此 g(x) g ( x ) 的表达式严格的形式应该是:
g(x)=<ω,x>+b g ( x ) =< ω , x > + b
但是上面的式子还不够好,你回头看看图中正样本和负样本的位置,想像一下,我不动所有点的位置,而只是把其中一个正样本点定为负样本点(也就是把一个点的形状从圆形变为方形),结果怎么样?三条直线都必须移动(因为对这三条直线的要求是必须把方形和圆形的点正确分开)!这说明 ω ω 不仅跟样本点的位置有关,还跟样本的类别有关(也就是和样本的“标签”有关)。因此用下面这个式子表示才算完整:
ω=α1y1x1+α2y2x2+...+αnynxn ω = α 1 y 1 x 1 + α 2 y 2 x 2 + . . . + α n y n x n
(式3)
其中的 yi y i 就是第i个样本的标签,它等于1或者-1。其实以上式子的4那一堆拉格朗日乘子中,只有很少的一部分不等于0(不等于0才对 ω ω 起决定作用),这部分不等于0的拉格朗日乘子后面所乘的样本点,其实都落在H1和H2上,也正是这部分样本(而不需要全部样本)唯一的确定了分类函数,当然,更严格的说,这些样本的一部分就可以确定,因为例如确定一条直线,只需要两个点就可以,即便有三五个都落在上面,我们也不是全都需要。这部分我们真正需要的样本点,就叫做 支持(撑)向量!(名字还挺形象吧,他们“撑”起了分界线)。

式子也可以用求和符号简写一下:

ω=i=1nαiyixi ω = ∑ i = 1 n α i y i x i
因此原来的 g(x) g ( x ) 表达式可以写为:
g(x)=<ω,x>+b=<i=1n(αiyixi),x>+b g ( x ) =< ω , x > + b =< ∑ i = 1 n ( α i y i x i ) , x > + b
注意式子中 x x 才是变量,也就是你要分类哪篇文档,就把该文档的向量表示代入到x的位置,而所有的 xi x i 统统都是已知的样本。还注意到式子中只有 xi x i x x 是向量,因此一部分可以从内积符号中拿出来,得到g(x)的式子为:
g(x)=<i=1nαiyi(xi,x)>+b g ( x ) =< ∑ i = 1 n α i y i ( x i , x ) > + b
(式4)
发现了什么? ω ω 不见啦!从求 ω ω 变成了求 α α

但肯定有人会说,这并没有把原问题简化呀。嘿嘿,其实简化了,只不过在你看不见的地方,以这样的形式描述问题以后,我们的优化问题少了很大一部分不等式约束(记得这是我们解不了极值问题的万恶之源)。但是接下来先跳过线性分类器求解的部分,来看看 SVM在线性分类器上所做的重大改进——核函数

求解的SMO算法可参考刘建平大佬的博客:
http://www.cnblogs.com/pinard/p/6111471.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值