前言
支持向量机(Support Vector Machines, SVM)是一个非常出色的二类分类模型,被成功应用于很多机器学习应用中。这里的“机”实质上是指算法。要在笔记中把SVM完完全全讲清楚是非常困难的,一是因为这个东西本身很难理解,需要花很多时间和精力去深入学习和研究;二是因为其中涉及的数学原理非常多,以本人的数学水平也不能完全说得清楚,需要不断深入学习。因此只能力图把自己已经理解的东西梳理清楚。关于支持向量机的笔记分为三篇,本篇主要把SVM的数学原理描述一遍,并给出最大间隔法及核技巧的Matlab代码实现。
一、问题引入
1.线性分类器
在Logistic回归模型中,我们已经构建出了一个线性分类器,即画出一条决策边界,把两类数据分开:
其中使用的假设函数亦即sigmoid函数:
根据这个函数,当有一个新的样本加入时,我们只需要计算h_θ(x)的值,当h_θ(x)>0.5时,判断属于1类;当h_θ(x)<0.5时,判断属于0类。图中画出的决策边界并不是十分理想,很多情况下,我们往往希望决策边界与两边的样本点的距离都尽可能大一些,这样我们作出的决策会更加准确。亦即,当θTx>>0时,h_θ(x)=1;当θTx<<0时,h_θ(x)=0。现在我们把问题转化一下,逐渐过渡到支持向量机。
我们把θ0替换成b,表示截距。把剩下的项的θ替换成w,得:
假设函数变为:
输出y为0,1变为-1,+1,这种转化之后便于使用符号函数表示。于是问题转化为:给定线性可分训练数据集,通过间隔最大化求解相应的凸二次规划问题得到决策超平面为:
以及分类决策函数:
我们就得到了最简单的线性可分支持向量机。
二、问题分析
1.函数间隔和几何间隔
由于支持向量机的学习策略是间隔最大化,因此在介绍算法之前,先交待清楚函数间隔和几何间隔的概念。
1.1 函数间隔
对于给定的训练数据集T和超平面(w, b),定义超平面(w, b)关于样本点(xi, yi)的函数间隔为:
函数间隔可以表示分类预测的确信度。但是当我们成比例地改变w和b时,超平面没有改变,函数间隔却成比例改变了。所以我们要对法向量w加以约束,例如取单位法向量。
1.2 几何间隔
几何间隔是规范化的函数间隔,即当||w||=1时,函数间隔等于几何间隔。函数间隔与几何间隔的关系如下:
2.最大间隔法
最大间隔法的直观解释是:对训练数据进行分类时,找到几何间隔最大的超平面,使之分为正负两类。几何间隔最大意味着决策置信度最大。
2.1 硬间隔最大化
硬间隔最大化主要针对线性可分支持向量机。这个问题可描述为:
函数间隔的取值并不影响最优化问题的解,可以取γ=1.于是问题可改写为:
这是一个凸二次规划(convex quadratic programming)问题。根据这个问题求得最优解w*, b*,由此得到决策分类超平面:
以及分类决策函数:
距离分类决策超平面最近的样本点的集合称为支持向量。
如图中H1,H2上的点就是支持向量。之所以叫这个名字,是因为这些点定义或者支持这个决策边界。
2.2 原始问题与对偶问题
以上问题作为原始最优化问题。很多时候,求解原始问题(primal problem)的对偶问题(dual problem)往往更加容易。下面介绍原始问题和对偶问题的概念。
考虑约束最优化问题:
称此问题为原始最优化问题。
定义广义拉格朗日函数:
这里,α,β是拉格朗日乘子。考虑关于x的函数:
这里P表示原始问题。有如下结论:
此时我们可以认为θP函数是把目标函数和约束函数结合在一起的问题。对上式取极小值:
称p*为原始问题取得最优解时的函数值。
定义:
其中D表示对偶问题。再取其极大值:
称此问题为原始问题的对偶问题,其中d*为对偶问题的最优值。一