SVM学习之五——支持向量机的原理
名词解释1——支持向量机:“机(machine,机器)”实际上是一个算法。在机器学习领域,常把一些算法看作是一个机器(又叫学习机器,或预测函数,或学习函数)。“支持向量”则是指训练集中的某些训练点的输入 xi 。它是一种有监督(有导师)学习方法,即已知训练点的类别,求训练点和类别之间的对应关系,以便将训练集按照类别分开,或者是预测新的训练点所对应的类别。
名词解释2——符号函数:sgn(a) = 1, a >= 0;sgn(a) = -1, a < 0.
一般地,考虑 n 维空间上的分类问题,它包含 n 个指标和 l 个样本点。记这 l 个样本点的集合为 T = {(x1,y1),...,(xl,yl)},其中 xi 是输入指标向量,或称输入,或称模式,其分量称为特征,或属性,或输入指标;yi 是输出指标向量,或称输出,i = 1,...,l。 这 l 个样本点组成的集合称为训练集,所以我们也称样本点位训练点。
对于训练集来说,有线性可分、近似线性可分和线性不可分等三种情况,这就是分类问题的三种类型。其实,无论是哪类问题,都有对应的分类机,这将在以下的内容中进行详细阐述。那么,有人可能会问,什么叫线性可分?通俗地讲,就是可以用一条或几条直线把属于不同类别的样本点分开。实际上,求解分类问题,就是要求出这条或这几条直线!那么,问题是:怎么求?这里先以二维两类线性可分的分类问题为例,做个详细的说明,然后再过渡到多类分类问题。
首先,回忆一下平面(二维)坐标系中某条直线的方程。还记得直线的一般方程
Ax + By + C = 0 (公式一)
吧,我们引入向量的概念,则该方程可以写成{x,y}与{A,B}的内积加上C等于0,即
{A,B}·{x,y} + C = 0
你还记得法向量和方向向量的概念吗?其实{A,B}就是法向量,而{B,-A}就是方向向量了。那么我们可以把直线的一般方程简化成为
w·x + b = 0 (公式二)
的形式(因为这个式子是大家最常用的嘛)。注意:(公式二)中的 x 和(公式一)中的 x 不同,前者一个二维向量,后者是一个实数。
对于两类问题,如果将某一直线两侧的样本点分为正类和负类,则用符号函数的方式推断点 x 所对应的类别 y 的决策函数如下:
y = f(x) = sgn((w·x) + b) (公式三)
根据符号函数的定义,很明显 y 的取值要么是 1 ,要么是 -1,也就是说样本点的类别只有 1 和 -1 两类。此时的分类问题是:对于任意给定的一个新的模式 x ,根据训练集推断它所对应的输出 y 是 1 还是 -1。这就是线性可分的分类问题,也是一个模式识别问题,我们要做的工作就是要求出 w 和 b 。
直接求这两个参数基本上不太可能,除了训练集我们又没有别的信息可以利用,这可如何是好?前辈们给出了一个绝妙的方法——就是所求得的预测函数 f(x) 对原有样本的分类错误率最小。那么,问题又出来了,这个错误率咋算?损失函数就是专门用来评价预测准确程度的一种度量,而且模式识别问题使用的正是“0-1损失函数”。根据我的上一篇学习体会——《从机器学习到支持向量机》http://axywestwind.bokee.com/viewdiary.14525093.html中的阐述,使(公式三)中的 f(x) 的预测误差最小的问题转化成期望误差最小、经验风险最小,最后在统计学习理论中又转化为结构风险最小(Structural Risk Minimization, SRM)。而实现SRM的思路之一就是设计预测函数集的某种结构使每个子集中都能取得最小的经验风险(如使训练误差为0),然后只需选择适当的子集使置信范围最小,则这个子集中使经验风险最小的函数就是最优函数。SVM方法实际上就是这种思想的具体实现,它是对SRM的近似。说了半天,终于和上次的内容连接上了。但是,为了求解SRM这个最小化问题,还得将它转化成数学形式。
SVM方法是从线性可分情况下的最优分类面提出的,它是实现统计学习理论思想的方法。什么是最优分类面呢?这要从最优分类线说起。所谓最优分类线就是要求分类线不但能将两类无错误地分开,而且要使两类的分类间隔最大。前者是保证经验风险最小(如使训练误差为0),而使分类间隔最大实际上就是使推广性的界中的置信范围最小,从而使真实风险最小。推广到高维空间,最优分类线就成为最优分类面。
那么如何构造这个最优分类面呢?方法有 2 个:平分最近点法和最大间隔法。有趣的是,这两个方法殊途同归,它们求解得到的是同一个超平面(由三个定理联合起来证明了这个结论)。由这三个定理可知,这两个方法与一个最优化问题求解方法等价,这个方法就称为“线性可分支持向量分类机”。其实,这个分类机是将最大间隔法求解最优分类面的最优化问题转化为其对偶问题,从而通过求解相对简单的对偶问题来求解原分类问题的算法。随后引入松弛变量和惩罚因子来解决非线性分类问题,并且允许一定的分类错误(软间隔),最终得到非线性软间隔的标准的 C-支持向量机(C-SVC)。其中的巧妙之处就在于把一个复杂的最优化问题的求解简化为对原有样本数据的内积运算。我们要做的就是选择适当的核函数及其参数、惩罚因子就可以了。
概括地说,SVM就是首先通过用内积函数定义的非线性变换将输入空间变换到一个高维空间,然后再在这个空间中求(广义)最优分类面的分类方法。
那么,如何通过计算机来求解这个内积运算呢?且听下回分解!下次会介绍选块算法、分解算法,并重点介绍由分解算法改进得到的最经典的 SMO 算法。
本文转自
http://www.langtech.org.cn/index.php/uid-507-action-viewspace-itemid-445