支持向量机(Support Vector Machine)

支持向量机(Support Vector Machine)是 1995 年问世的经典监督学习算法,可广泛应用于分类与回归任务。凭借严谨的统计学习理论根基与出色的泛化能力,在深度学习兴起之前,它一直是文本分类、图像识别等领域的主流模型。即便如今深度学习成为行业主流,面对小样本、高维度的数据场景,SVM 依旧能展现出稳定可靠的性能,具备极高的实用价值,也是机器学习入门阶段必须吃透的核心算法。

1. 决策函数

支持向量机(SVM)是一种经典的监督学习算法,最初用于二分类任务。其核心思想是构造一个线性决策函数

对于新样本 \(x\) ,SVM 不关心 \(f(x)\) 的具体数值大小,仅依据其符号判定类别:

注意:支持向量机原始输出仅为类别标签(如 +1 或 -1),并不提供概率解释。若需获得概率估计,通常需借助其他方法,由于这部分不属其核心原理内容,我们今天暂不展开讨论此类扩展方法。

2. 优化目标

现实中的数据常受噪声或测量误差影响。假设某正类样本 \(x=(2.1,3.5,1.8)\) 在测试时因扰动变为 \( x=(2.08,3.52,1.81)\),微小扰动就可能导致误分类,把它错判为 \(-1\) 类别。

SVM的核心设计目标正是提升模型对这类扰动的容忍度


接下来,我们看看如何提升支持向量机鲁棒性。假设:样本可能受到小扰动 \(\delta_{i}\),上限为 \(\epsilon_{i}\),注意:每个样本都有一个扰动。

对于线性分类器 \(f(x)=w·x+b\) 分类正确条件为:

展开后可得:

第二项是扰动带来的负面影响,当第二项负向贡献足够大的时候,就可能会改变符号,从而改变最终的分类结果。接下来,我们分析下第二项最坏情况是什么样的,对第二项拆解:

我们发现,当 \(\theta\) 为 π 时,\(\delta_{i}\) 达到扰动的上限。

注意:\(||y_{i}w||\) = \( |y_{i}| ||w||\) = \(||w||\)

把最坏扰动代回原始条件:

  • 左边:扰动上限
  • 右边:样本到超平面的几何距离

此时不难发现:样本能承受的最大扰动上限,恰好等于该样本到超平面的几何距离。距离超平面越远的样本,抗扰动能力越强;反之则越容易因微小扰动导致分类错误。

基于上述推导,SVM 的优化目标就是:最大化两类样本到超平面的最小几何距离,即让距离超平面最近的样本,尽可能远离超平面。这一目标的本质是为所有样本预留足够的安全边界,从而提升模型的鲁棒性。

SVM 的原始优化目标可表示为:

该式称为最大化最小几何间隔,含义是:在所有样本中找到到超平面距离最小的样本,并通过调整 \(w\) 和 \(b\),使这个最小距离最大化。

3. 约束条件

直接优化目标函数较为复杂,下面对这个目标函数进行一下转换。假设所有样本到超平面的最小几何距离为 \(\gamma_{min}\):

当确定超平面的时候,分母就是常数,不同的样本到超平面的距离是由分子决定的,所以公式可以转换为下面的形式:

再次注意:这里有个非常重要的点。第一个重要的点:我们缩放 \(w\) 与 \(b\) M 倍时,样本到超平面的几何间隔不变。

第二个重要的点,我们缩放 \(w\) 与 \(b\) M 倍时,\(\gamma_{min}\)​ 也会放大 M 倍。

所以,\(\gamma_{min}\) 的数值大小本身没有几何意义,它不会改变超平面的位置,也不会改变样本到超平面的几何距离,它只反映了 \((w, b)\) 的尺度选择。

这里再特别注意一下:在同一个数据集上,分类超平面的位置是唯一的,但表示该超平面的参数对 \(\gamma_{min}\) 存在尺度不唯一性。为了消除这种尺度自由度,我们可以将函数间隔 \(\gamma_{min}\)​ 固定为 1。这样,最优的参数 \((w, b)\) 唯一,从而也便于后续的优化求解。

注意:\(y_{i}(w·x_{i}+b)\) 现在最小值是 1,所以,优化目标公式可以表示为:

为了便于求解,通常将目标函数写成:

目标函数的含义是:在所有样本均被正确分类、满足分类约束的前提下,最大化距离超平面最近样本的几何间隔,从而获得泛化能力更好的线性分类模型。

4. 约束松绑

上述目标函数要求所有样本都能够正确分类,但现实数据中往往存在噪声、异常点,导致部分样本无法满足 \( y_{i}(w·x_{i} + b) \ge 1 \) 的严格约束,导致优化问题无解,算法根本无法运行。

为解决这一问题,需要对约束条件进行松绑,允许部分样本违反原始约束。具体做法是,引入一个非负松弛变量 \(\xi\),记录每个样本距离对理想约束差了多少。比如:\(\xi = 0.3\),表示我们希望该样本的输出至少为 1,但实际输出只有 0.7,因此差了 0.3。

此时,原始的约束条件具有一定的弹性、灵活性,样本就不会违背约束了,这就是软约束的支持向量机。


为避免模型无限制地允许样本违反约束,需在目标函数中加入对松弛变量的惩罚项(违反约束代价):

第一项越小,几何间隔越大,第二项越小,违反约束的代价就越少。单纯追求更大的几何间隔,往往需要容忍更高的违反约束的代价,因此未必能使目标函数达到最小。所以,目标函数会在几何间隔和违反约束之间达到一个平衡,使得目标函数最小,得到理论上最优的模型。但是这里需要注意,这个理论最优不一定是泛化能力最好的模型。

为了调和理论最优泛化最优的矛盾,实现对参数 \(w、b\) 选择的有效干预,SVM 算法引入超参数 \(C\) 来调整两项优化目标的制衡关系:

  • \(C\) 越大:惩罚越严格,模型更倾向于让所有样本满足约束(可能过拟合异常点);
  • \(C\) 越小:惩罚越宽松,允许更多样本违反约束(可能欠拟合,泛化能力更强些)。

超参数 \(C\) 并不存在通用的理想取值,其最优范围依赖于数据分布与噪声水平。因此,通常通过交叉验证配合网格搜索,在不同候选值中选择泛化表现最优的参数。

5. 问题转换

软约束 SVM 的目标函数是带不等式约束的优化问题,直接求解难度较大。通过拉格朗日乘子法,可将其转化为无约束优化问题,为后续求解奠定基础。

接下来,我们遵循通用规范流程,将带约束的目标函数转换为一个拉格朗日函数。

给第一个约束加乘子 \(\alpha_{i} \ge 0\):

给第二个约束加乘子 \(\mu{i} \ge 0\)

接下来,我们将目标和约束合成一个拉格朗日函数,把带约束的最小化问题,变成一个无约束的问题:


这里需要注意,原来优化的是 min 问题,现在则变成一个 min–max 问题?

在拉格朗日函数中,前两项对应的是原始优化目标,后两项对应的是约束条件。如果在引入拉格朗日函数之后,仍然把整个问题当作一个单纯的最小化问题来处理,就会出现一个严重的问题:为了使拉格朗日函数的值尽可能小,算法并不一定需要真正优化前两项的目标函数,而是可以通过操纵约束项来不断降低整体数值。

具体来说,当约束条件被满足时,对应的约束项是小于等于零的,同时拉格朗日乘子 α 又被限制为非负。在这种情况下,只要不断增大 α,就可以让拉格朗日函数的值持续下降,从而把“满足约束”错误地当成了一种可以用来降低目标函数的手段。

这显然违背了约束的初衷,因为约束的作用并不是参与优化打分,而只是用来区分解是否合法。正因为如此,约束条件不能被当作一个可以被无限优化的项,而必须被冻结在一个恰当的状态。为此,在拉格朗日函数中对拉格朗日乘子引入最大化(max):当约束被满足时,最大化会使约束项达到其允许的最大值,从而不再对整体目标产生影响;当约束被违反时,最大化会将拉格朗日函数的值推向无穷大,模型越想找到一个超平面,所有样本都满足约束。

这样,整体优化过程才变成:先通过 max 阻止约束项被当作优化手段,再在满足约束的解集合中,搜索 \(w、b、\xi\),从而使原始的优化目标得以正确实现。

6. 对偶问题

原问题是先对 \(\alpha、\mu\) 求最大,再对 \(w、b、\xi\) 求最小的双层嵌套优化,直接求解较为困难。将问题转化为对偶形式,把优化变量从 \(w、b、\xi\) 转换为样本对应的系数 \(\alpha、\mu\),更易于高效求解。同时,对偶形式中的目标函数仅依赖于样本之间的内积,使得可以自然地引入核函数处理非线性分类问题。

对偶问题的核心步骤是:

  1. 对 \(w、b、\xi\) 求偏导,并让其等于 0(这就是 KKT 的一部分)。
  2. 将 \(w、b、\xi\) 表示成关于 \(\alpha_{i}\) ​ 的函数。
  3. 代回拉格朗日函数,得到只关于 \(\alpha\) 的对偶问题。

对 \(w\) 求导并令其为 0:

对 \(b\) 求导并令其为 0:

对 \(\xi\) 求导并令其为 0:

由于 \(\mu_{i} \ge 0\),所以:

当某个样本的拉格朗日乘子达到上界(α​=C)时,表明模型已对该样本非常重视,即在当前优化约束下,愿意为纠正其违例付出高的代价。若这些被顶格对待的样本来自噪声,模型可能为迁就少数困难样本而过度调整决策边界,从而削弱整体稳健性。因此,通过调节上界 C,本质上是在改变优化问题对违例的容忍程度,进而影响决策边界的选择。

接下来,我们将上述公式代回拉格朗日函数,消去 \(w、b、\xi\),得到只与 \(\alpha\) 有关的问题:

我们通过解出每个样本对应的 \(\alpha_{i}\),就可以得到超平面的关键参数 \(w\) 和 \(b\) 。虽然从理论上当前问题存在最优解,但需要同时决定每一个样本对应的参数,数量庞大且相互牵制。因此在实际中,求解的难点不在于是否有解,而在于如何高效地将其计算出来,通常采用序列最小优化(SMO)等算法,通过每次优化两个拉格朗日乘子,逐步迭代得到最优解。

求解出的 \(\alpha\) 有以下几种情况:

  • \(\alpha = 0\),样本分类正确,未触及约束, \(y_{i}(w·x_{i}+b) > 1\);
  • \( 0 \lt \alpha \lt C\),样本分类正确,在约束边界上 \(y_{i}(w·x_{i}+b) = 1\);
  • \(\alpha = C\),违反约束条件(可能分类错误,也可能分类正确)\(y_{i}(w·x_{i}+b) < 1\)

决策函数 \(w、b\) 是由 \(\alpha \gt 0\) 的样本集合决定,这些样本也叫支持样本(向量),这也是支持向量机名称的由来。

7. 高维映射

  • \(xi_{i}⋅x\) 本质上是在问:新样本 x 和第 i 个训练样本像不像
  • \(y_{i}\) 规定这个样本是支持正类还是支持负类
  • \(\alpha_{i}\) 第 i 个样本在最终决策中有多重要

新样本 \(x\) 来了,让训练集中重要的样本逐个出来,看看它们和 \(x_{i}\) 有多像,然后按它们的立场和话语权加权投票。


软约束 SVM 仍局限于线性分类场景:当数据本质上是非线性分布(如内外环、螺旋形分布)时,即便允许样本违反约束,在原始特征空间中也无法找到合适的线性超平面,分类效果很差。

因此,软约束 SVM 主要适用于线性近似可分且存在噪声的数据,而对于本质上非线性的分布,即便允许错分,也难以得到合理的分类边界,这时就需要借助核函数将数据映射到高维空间,以实现有效分类。

那怎么解决呢?思路并不是再放宽约束,而是换一个看问题的空间。在原始特征空间里,数据是非线性缠绕的,看起来怎么都画不出一条合情合理的直线;但如果把数据通过某种非线性变换映射到一个更高维的空间,原本弯曲、交错的结构,可能就会被拉直,在新空间中变得线性可分。

那么,由于原始空间线性不可分,无法寻找最大间隔的线性超平面,那么,我们就把数据映射到更高维空间,在更高维的空间去寻找最大间隔的线性超平面。但直接进行高维映射存在两大问题:

  • 计算复杂度极高:高维空间的特征维度可能非常高,甚至无穷维;
  • 映射函数未知:难以找到合适的实现有效映射。

核函数正是在这里登场的,它让我们无需真的进行高维映射(核技巧),只需在原空间中计算样本之间的相似度,就等价地完成了在高维空间中训练 SVM。

这里有个理解的点:支持向量机在高维空间中是仍然是最大化间隔,寻找线性超平面,但是从原空间的角度来看,这个超平面就变成非线性的。

\(\phi(x)\) 表示映射函数,用于把原来的数据 \(x\) 映射到高维空间。

常见的核函数有:

8. 打完收工

决策函数:通过决策函数 \(f(x)=sign(\sum_{i} \alpha_i y_i K(x_i, x) + b)\) 输出标量,依据符号判定类别 +1 或 -1。支持向量机决策函数是由部分 \(\alpha > 0\) 的样本决定,这些样本叫做支持向量。

间隔最大化思想:SVM 的本质是寻找最稳健的分类超平面,让两类样本到超平面的最小几何间隔最大化。这一思想的核心逻辑是:样本到超平面的距离直接等价于其抗扰动能力,几何间隔越大,样本受噪声、小扰动影响时分类结果越稳定,从而保障模型泛化能力。

有限样本最优思想:针对小样本、高维数据场景设计,不追求对训练数据的绝对拟合,而是通过数学推导实现有限样本下的最优分类边界,这也是其在深度学习兴起后仍能立足的核心原因。

约束平衡思想:承认现实数据的噪声与异常点,通过 “硬约束→软约束” 的松弛与惩罚机制,在 “分类准确性” 和 “模型稳健性” 之间寻找平衡,避免极端情况(完全不允许分错导致过拟合,或过度宽松导致欠拟合)。

超参数 C 影响:C 越小,惩罚越宽松,泛化能力可能提升。C 越大,惩罚越严格,模型倾向于完全正确分类,可能过拟合,需通过网格搜索优化。

核技巧思想:面对非线性数据,通过将低维非线性数据映射到高维线性可分空间,再通过核函数避免高维计算的爆炸式复杂度,用原空间样本相似度等价替代高维空间点积,实现高效非线性分类。

多分类 SVM:SVM 本质是二分类,需要 one-vs-rest 或 one-vs-one 扩展。

未经允许不得转载:一亩三分地 » 支持向量机(Support Vector Machine)
评论 (0)

6 + 8 =