支持向量机(SVM)
- 由Vapnik在上世纪60年代首次提出,并于1995年发表的论文Support-Vector Networks中正式提出。
- 其优势在于具有完善的数学理论基础,且预测效果出类拔萃。在上世纪90年代到2010年左右(深度神经网络出现)处于机器学习的主流地位。
- 其主要用于二分类问题:
- 样本数据的标签取值为或(通常称标签为的为正样本,的为负样本);
- 若两类样本可以用一个线性超平面(也称为决策边界)分开,则称数据线性可分,否则称为线性不可分。
- 维超平面(hyperplane)的形式:
硬边界支持向量机(Hard Margin SVM)
也称为最大边界分类器(Maximum Margin Classifier)。
- 首先,超平面需要满足以下性质:
其中正负是人为定义的,由此决定。
- 对于新样本,分类器通过计算的符号进行分类(正or负样本)。
- 评估分离超平面的分类效果:
- 稳健性:分类边界离训练样本越远越好;
- 泛化能力:训练样本离超平面越远,测试样本也会离超平面越远。
间隔与支持向量
- 如何量化距离?计算每个训练样本到分离超平面的(垂直)距离,取最小。支持向量机的目标就是寻找间隔最大的超平面!
- 支持向量(support vector):在间隔边界上的样本点,即距离分离超平面最近的样本点。(“支撑”着最大间隔超平面)
- 移动任何其他观测值都不会影响分隔超平面(在间隔外)
优化问题
-
令,则:
- 正超平面:;
- 决策超平面:;
- 负超平面:;
这里是非零常数,故可以方程两边同除以(即取)。
-
样本点到超平面的距离:
- 支持向量到超平面的距离:(非支持向量)。
-
优化目标:最大化支持向量到超平面距离,即。为后续求偏导方便,我们转换为。
-
约束条件:(标签与分类结果同号)
-
这种优化问题属于凸优化,下面简单介绍凸优化的概念(详细解释可见CS127系列笔记):
- 凸优化:目标函数是凸的,约束条件是凸集;
- 凸函数:任何两点之间的连线都在函数图形上方;
- 凸集:凸集中的任意两点连成一条直线,这条直线上的所有点也都在这个集合里面;
- 凸优化的最优解是唯一的,非凸优化可能有多个局部最优解。
- 二次规划:目标函数为二次方程,约束条件为(线性)超平面。本优化问题就属于二次规划。
补充
这个优化问题还有另一种形式(来自ISL):
- 优化目标:
- 约束条件:
本质是固定法向量范数为,最大化平面间隔。下面的软边界SVM同样有类似的等价形式,在此作略。
软边界支持向量机(Soft Margin SVM)
- 上述使用的硬边界SVM存在以下问题:
- 约束过于严格,往往导致过拟合(对异常值过于敏感);
- 对于线性不可分的分类问题,硬边界SVM不可解。
- 于是我们做出适当妥协——允许部分样本违反约束甚至被错误分类。【用泛化能力换准确性】
- 具体而言,我们再硬边界SVM的基础上加入松弛变量,表示违反约束的程度:
- :被正确分类,且在间隔边界上或者间隔之外;
- :被正确分类,但在边界内;
- :被错误分类。
- 约束条件改为;
- 目标函数改为,其中为正则项(或惩罚项),作用为控制分类的错误程度,阻止松弛变量无限扩大。
- 为超参数,控制了模型的复杂度:越大,模型越接近硬边界(即为硬边界),反之则允许更多错误。
- 因此,可以说控制了Bias-Variance Tradeoff(越大,越容易过拟合,Var越大,Bias越小)。
损失函数
- 将支持向量机看作机器学习方法,那么它用什么损失函数?一个简单的想法是0-1损失: 但这个损失函数只考虑分类是否正确,而没有考虑分类错误的严重程度。
- 作为改进(考虑数据点离分类边界的距离),我们引入Hinge Loss:
- 表示点在间隔之外(被正确分类),损失为;
- 表示点在间隔内或错误分类,损失呈线性关系。
实际上,上面优化问题中的松弛变量就是Hinge Loss的一种体现。
- 于是,SVM模型也可以用以下形式表述:
非线性SVM与核方法
- 实际上,SVM不止可以解决线性分类问题。对于非线性分类问题,SVM的策略是:丰富并扩大特征空间,从而构造非线性分离边界。【低维到高维映射】
- 具体而言,若原来的变量维度为,则可以将其扩充为,这样甚至可以扩充到无穷维。
- 事实上,我们有以下定理:假设在一个维空间中,随机取个训练样本,随机对每一个训练样本赋予标签或者,当,这些训练样本线性可分的概率。
核技巧(Kernal Trick)
- 设样本经过升维后变为,则约束条件(之一)需要改为。
- 实际上,我们不需要知道的具体形式,而只需要确定,我们将其记作核函数。
为什么只需要核函数?
证明这个结论需要使用一些最优化理论的知识(可见CS127系列笔记),这里只作简单说明:
- 原问题可表示为
- 对偶函数为:
- 将其转化为对偶问题: 可见对偶问题只需要知道核函数即可。
训练流程
-
输入,并求解优化问题(利用SMO算法)
- 目标函数:
- 约束条件:
-
计算:找一个,计算
或者通过所有满足条件(即恰好落在边界上)的样本点求,并取平均。
测试流程
- 输入测试样本:
- 若,则;
- 若,则。
核函数的选择
- 线性(linear)核函数:
- 适用Soft Margin SVM
- 多项式(polynomial)核函数:
- 适用有限维映射,与有关
- 径向(radial)核函数:
- 适用无穷维映射
- Mercer定理:核函数能写成 的充要条件:
- 交换性:;
- 半正定性:。
应用:兵王问题
- 略,可见知乎。
这个例子源于浙江大学胡浩基老师的《机器学习》课程。
多分类问题
解决方案包括:
- 改造优化的目标函数和限制条件,使之能处理多类(Multi-class SVM);
- 一类 VS 其他类,例如1类 VS 23类,2类 VS 13类,3类 VS 12类;
- 缺点:样本类别数量不平衡
- 一类 VS 另一类,例如1类 VS 2类,1类 VS 3类,2类 VS 3类(采用投票的方式决定样本的最终类别);
- 缺点:可能出现平票;需要个分类器
- 树结构,例如123类 VS 456类,然后12类 VS 3类,然后1类 VS 2类。【类似决策树】
