Andrew Ng - SVM【1】最优间隔分类器

Andrew Ng - SVM【1】最优间隔分类器


Ng说,SVM是最好的监督学习算法(因为你用不用,它就那里,现成的)。为了了解SVM,我们首先应该絮叨絮叨怎样用一个较大的间隔将数据划开成类;接着好戏上演,我会讲到最优间隔分类器;然后我会讲一些核函数(Kernel)的知识,这个尤其重要,因为核函数是打通低维和高维通道的关键手段;最后,我将会讲解用SMO算法怎么实现SVM,顺利收关。


从间隔(margins)讲起


1. 对间隔的一个直观的认识

在logistic回归中,对于预测以 θ 为参在 x (特征向量, ? )条件下 y 为1的概率< p(y=1|x;θ) >,我们会使用模型 hθ(x)=g(θTx) 作为假设。所以当 hθ0.5 或者当且仅当 θTx0 时我们会认为预测结果为1 () 。那么我们来考虑一下这个问题,显然 θTx 越大 hθ(x)=p(y=1|x;θ) 就会越大,因此当我们在这种情况下,将结果预测为1就会非常“自信”。所以直观的理解,当 θTx0 时,我们会很确定预测的结果为1,而当 θTx0 的时候则会很肯定y=0。现给定一个训练集,同样,对于训练数据,假设我们可以找到相应的 θ 使得不论何时,只要 y=1 就有 θTx(i)0 ,只要 y=0 就有 θTx(i)0 ,那么根据这样的 θ 对相应的新数据做预测就非常简单了。不过理想很丰满,现实很骨感,要找到这样的 θ 还真不容易。不过有个概念叫函数间隔,可能会给这个理论一个相对好一点的支撑。

2. 对于预测的“信心”做一个分析

看下图,X代表正的训练样例,O代表负的训练样例,我们用一条线(由 θTx=0 确定的分割超平面)将正负样本分开,对A、B、C三点我们来做个分析。


Andrew Ng - SVM【1】最优间隔分类器_第1张图片

对于A点,我们会很确定y=1;而相反,对于C点来说,或许根据当前的SH我能说y=1,可是机器学习这种事情,不确定性的东西本来就多,如果SH稍微动一动,可能C的分类就不好说了。因此,当点距离我的分割超平面足够远的时候,我们对数据的预测会很简单。那么,能不能在不同类别之间,真的存在那么一个边界,使我们很自信准确(意思就是离边界足够远)的预测出数据所属类别?几何间隔(geometric margin)粗现。

3. 一些符号的说明

为了更好的讲解SVM,我们将使用 y{1,1}() 来表示分类标签;分类器将以 w,b 为参,即: hω,b(x)=g(ωTx+b)
在上述 h 中, g(z)={11z0z<0 ,可以注意到, b 其实是超平面的截距。

4. 函数间隔和几何间隔

给定训练样本m条 (x(i),y(i)),i{1,...,m} ,对于参数 (ω,b) 定义函数间隔为:


γ^(i)=y(i)(ωTx+b)

值得注意的是,根据我们上边对间隔的描述,如果 y(i)=1 ,意味着如果要使得函数间隔尽量大的话,则 ωTx+b 得是一个很大的正数;相反,如果 y(i)=1 ,意味着如果要使得函数间隔尽量大的话,则 ωTx+b 得是一个很大的负数。同时不难看出当 y(i)(ωTx+b)>0 的时候,我们的预测一定是对的。所以相应的如果我们需要准确的预测数据的分类,则函数间隔越大越好(说明离超平面越远)。
但是这里存在一个问题,对于我们选取的 g(z) ,可以看到其实 g(ωT+b)=g(2ωT+2b) ,但这个却对函数间隔有很大的影响,通过调整参数的系数,我们发现函数间隔可能会变得很大(把 (ωT+b) 变成 (2ωT+2b) ,函数间隔就翻了一倍)。这不科学!通常在这种情况下,为了标准化函数间隔,上帝会为我们打开一扇窗。承接上文,几何间隔亮相!
如图所示:

Andrew Ng - SVM【1】最优间隔分类器_第2张图片

可以看到, ω 是一个和分割超平面正交 (0) 的向量,A点则是某个分类为 y(i)=1 对应的 x(i) 所确定的点( x(i) 也是一个向量),其距超平面的距离 AB=γ(i) 。要计算 γ(i) ,有几个条件:

(1)ω/||ω||(2)Ax(i)(3)B(x(i)γ(i)ω/||ω||)(4)B


所以可以有以下等式:

ωT(x(i)γ(i)ω/||ω||)+b=0

则可以得到 γ(i)

γ(i)=ωT(x(i)+b)||ω||=(ω||ω||)Tx(i)+b||ω||

当然看得出这只是A点的几何间隔,更一般的,对于任意训练样本 (x(i),y(i)) 在以 (ω,b) 为参情况下的几何间隔见如下等式:

γ(i)=y(i)((ω||ω||)Tx(i)+b||ω||)

||ω||=1 的时候,函数间隔和几何间隔相等,这就意味着在两种间隔中间,冥冥中有某种联系( γ=γ^||ω|| );还有一点要说明的是,当前妈妈已经不用担心我的几何间隔随 (ω,b) 的变化而变化了(对其做了正规化)。
回归到我们的问题,找一个分割超平面,让所有点都离超平面尽可能的远。所以在给定集合 S={(x(i),y(i));i=1,...,m} 时,函数间隔和几何间隔最终的取值为

函数间隔: γ^=mini=1,...,mγ^(i)


几何间隔: γ=mini=1,...,mγ(i)

5. 最优间隔分类器

让我们先把目标放在一个线性可分的训练集上,稍后再推广到高维的情况。我们要使得间隔最大化,才能尽量满足分类时尽可能“自信”的需求,所以所求问题可以描述如下:


maxγ,ω,bγs.t.y(i)(ωTx(i)+b)γ,i=1,...,m||ω||=1.


解释一下上边的式子, γ 为样本中最小的函数间隔,所以要求最大的函数间隔,必然要满足条件:所有的样本函数间隔都要不小于 γ ,而 ||ω||=1 保证了函数间隔和几何间隔相等。至此,如果我们能够写代码搞定上述问题,那最优间隔无疑是找到了。可是看看上边的式子,这个最优值怎么求呢?怎么求呢?怎么求呢?实际上在条件 ||ω||=1 的约束下,我们面临的是一个非凸问题,这意味着两件事,不好解决和非常不好解决(对于凸优化问题,有许多现成软件可以接收格式化的参数,直接计算优化结果),所以在此基础上我们把问题转化一下:

maxγ,ω,bγ^||ω||s.t.y(i)(ωTx(i)+b)γ^,i=1,...,m


当然在当前情况下,问题仍然非凸,我们依然愁眉不展(用 γ=γ^||ω|| γ 换了一下,还去掉了一个条件“ ||ω||=1 ”),那怎么办嘞?这时候 ω b 在几何间隔下有个性质,可以随意伸缩!这就比较屌了,我直接固定 γ^=1 ,那么肯定会有与之对应的 ω b 使得 γ 不变!再审视一下问题,最大化 γ^/||ω|| 就变成了最大化 1/||ω|| 等同于最小化 ||ω||2 。方程式如下:

minγ,ω,b12||ω||2s.t.y(i)(ωTx(i)+b)1,i=1,...,m


眼熟!现在问题转化成了一个有线性条件约束的凸优化问题!也是我们要找的 最优间隔分类器!找一段二次规划(quadratic programming)代码直接搞定!
话说我们的最优分割超平面找到这里就应该画上句号了,可是 注意,我们解决的问题依然是线性的,面对的还是假设中必然可分类的情况,那么如果训练样本非线性或者线性不可分怎么办?一个更加高端的话题等着我们去探索,让我们来认识一下拉格朗日对偶规划(lagrange duality programming),为 核函数做个铺垫。

你可能感兴趣的:(Algorithms,Machine,Learning)