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 或者当且仅当 θTx≥0 时我们会认为预测结果为1 (直接将问题扣在二分类?) 。那么我们来考虑一下这个问题,显然 θTx 越大 hθ(x)=p(y=1|x;θ) 就会越大,因此当我们在这种情况下,将结果预测为1就会非常“自信”。所以直观的理解,当 θTx≫0 时,我们会很确定预测的结果为1,而当 θTx≪0 的时候则会很肯定y=0。现给定一个训练集,同样,对于训练数据,假设我们可以找到相应的 θ 使得不论何时,只要 y=1 就有 θTx(i)≫0 ,只要 y=0 就有 θTx(i)≪0 ,那么根据这样的 θ 对相应的新数据做预测就非常简单了。不过理想很丰满,现实很骨感,要找到这样的 θ 还真不容易。不过有个概念叫函数间隔,可能会给这个理论一个相对好一点的支撑。
2. 对于预测的“信心”做一个分析
看下图,X代表正的训练样例,O代表负的训练样例,我们用一条线(由 θTx=0 确定的分割超平面)将正负样本分开,对A、B、C三点我们来做个分析。
对于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)={1−1z≥0z<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) ,函数间隔就翻了一倍)。这不科学!通常在这种情况下,为了标准化函数间隔,上帝会为我们打开一扇窗。承接上文,几何间隔亮相!
如图所示:
可以看到,
ω 是一个和分割超平面正交
(话说正交内积为0是怎么体现的?) 的向量,A点则是某个分类为
y(i)=1 对应的
x(i) 所确定的点(
x(i) 也是一个向量),其距超平面的距离
AB=γ(i) 。要计算
γ(i) ,有几个条件:
(1)单位同向的向量ω/||ω||;(2)A:x(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),为
核函数做个铺垫。