1 概述
维基百科 的定义 :
在机器学习中,支持向量机(英语:Support Vector Machine,常简称为SVM,又名支持向量网络[1])是在分类与回归分析中分析数据的监督式学习模型与相关的学习算法。
给定一组训练实例,每个训练实例被标记为属于两个类别中的一个或另一个,SVM训练算法创建一个将新的实例分配给两个类别之一的模型,使其成为非概率二元线性分类器。SVM模型是将实例表示为空间中的点,这样映射就使得单独类别的实例被尽可能宽的明显的间隔分开。然后,将新的实例映射到同一空间,并基于它们落在间隔的哪一侧来预测所属类别。
除了进行线性分类之外,SVM还可以使用所谓的核技巧有效地进行非线性分类,将其输入隐式映射到高维特征空间中。
支持向量机方法是建立在统计学习理论的VC 维理论和结构风险最小原理基础上的,根据有限的样本信息在模型的复杂性(即对特定训练样本的学习精度,Accuracy)和学习能力(即无错误地识别任意样本的能力)之间寻求最佳折衷,以期获得最好的推广能力。
使用 SVM ,是为了分类数据。SVM 使用 (p-1) 维超平面将数据分割为多个类别,从而实现分类。最佳超平面的一个合理选择是以最大间隔把两个类分开的超平面。因此,我们要选择能够让到每边最近的数据点的距离最大化的超平面。如果存在这样的超平面,则称为最大间隔超平面,而其定义的线性分类器被称为最大间隔分类器,或者叫做最佳稳定性感知器。
下图中, x1 为多维度向量, x2 为标记(图片来自维基百科,大部分教材中使用 (x,y) 来表示):
其中, w⋅x−b=0 就是最大间隔超平面。
对于线性不可分的数据(大部分时候拿到的数据都是线性不可分),使用核函数将其映射到高维空间实现线性可分,如下图。
实际上,SVM 在文本、超文本、图像、手写字体识别等领域都有应用。
2 原理
2.1 问题描述
2.1.1 线性分类器
将下图看成一个二维平面的数据,我们使用一个直线将其分开。中间红色直线对应的函数就是 线性函数 。这种使用一个线性函数可以分开样本的,称为 线性可分,否则称为 非线性可分。
使用下面的函数:
f(x) = 0 既是分割线,f(x) =1 为一个类别,f(x) = -1 为另一个类别。我们需要使得分割线距离两个样本的距离最大。
延伸到高维空间,给定线性可分训练数据集,通过间隔最大化得到的分离超平面为:
对应的分类决策函数为:
该决策函数称为线性可分支持向量机。
注:
1. ϕ(x) 是是某个确定的特征空间转换函数,用来将x映射到(更高的)维度。最简单的为 ϕ(x)=x
2. 图示中 +1 和 -1 是法线向量决定的,并非一定是右/上边为 +1 ,左/下边为 -1。
2.1.2 线性分类器求解目标
如上描述,设 :
则有:
则有:
即定义一个样本点到某个超平面的间隔:
将 w 和 b 进行归一化(等比例缩放),则有:
(其中, ||w|| 为 向量 w⃗ 的 2 范数 : ||w||2=w21+w22+...+w2n‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾√ )
于是,我们要求取的 最大间隔分离超平面 的目标函数为:
(st.
意思为 subject to
,表示约束条件)
目标函数简化为:
于是求解的目标等同于:
在这个问题中,自变量是w,而目标函数是w的二次函数,所有的约束条件都是w的线性函数,这种规划问题称为 二次规划(Quadratic Programming,QP),而且可以更进一步的说,由于它的可行域是一个凸集,因此它是一个凸二次规划。
在可行域为一个凸集约束条件下求极小值,很自然想到使用拉格朗日乘子法。
2.1.3 拉格朗日乘子法求解
对于含有不等式约束的优化问题,常用的方法是使用 KKT 条件。对于问题:
于是,把原问题所有的不等式约束、等式约束和目标函数全部写为一个式子:
具体解释可以参考 《深入理解拉格朗日乘子法和 KKT 条件》 。
于是,原问题是极小极大问题:
所以原始问题的对偶问题,是极大极小问题 :
将拉格朗日函数 L(w,b,α) 分别对 w,b 求偏导,依据 KKT 条件令其为 0 :