支持向量机(Support Vector Machine)

支持向量机(Support Vector Machine,SVM)是 Vapnik 等人在 1995 年完善的经典监督学习算法,可广泛应用于分类与回归任务。凭借严谨的数学理论支撑与出色的泛化能力,它在深度学习兴起之前长期是文本分类、图像识别等领域的主流模型。即便如今深度学习成为行业主流,在小样本、高维度的数据场景下,SVM 仍能展现稳定可靠的性能,具备很高的实用价值。

1. 算法初探

支持向量机的预测过程,是先通过一个线性函数计算出属于 +1 或者 -1 类别的带符号的置信分数,然后根据符号决定预测类别。

  • 假设分数为 -3,符号为负,预测类别为 -1,分数越小对 +1 类的置信度越高
  • 假设分数为 +2.5,符号为正,预测类别为 +1,分数越大对 -1 类的置信度越高
  • 分数接近 0,表示样本靠近分类边界,分类置信度较低、不确定性更高
  • 注意:支持向量机类别标签为 +1 和 -1,默认不提供概率解释。

例如:经过训练我们得到两个参数分别为:\(w=(2,−1​),b=−1\), 即:\(f(x)=2x_{1}​−x_{2}​−1\)。接下来,需要计算新样本 \(x=(2,1)\) 的类别,代入函数中,得到 \(f(x)=2 \gt 0\),最终新样本输出类别是 \(+1\) 类别。


在支持向量机中,模型的参数 \(w\) 和 \(b\) 可以由下面的公式得到:

这里有一个关键要点:只有训练集中的一部分样本会对最终的决策函数产生影响,这些样本就是我们所说的支持向量,这也是支持向量机名字的由来。

所以,我们可以简单理解为:支持向量机的训练过程,本质上就是在寻找这些关键的支持向量。

2. 优化目标

支持向量机之所以只依赖少数支持向量,就能获得较强的泛化能力,关键在于它的优化目标。

在现实环境中,输入数据不可避免地会受到测量误差或噪声的影响。例如,在训练阶段模型学到的正类样本为 \(x=(2.1,3.5,1.8)\),由于噪声干扰,输入可能变为 \(x=(2.08,3.52,1.81)\)。虽然这种变化幅度很小,但如果模型对输入扰动较为敏感,那么这种微小变化就可能导致分类结果发生改变,从而表现为预测不稳定。

因此,一个具有良好泛化能力的分类模型,不仅应当在训练数据上实现正确划分,更应具备对微小扰动的稳定性。也就是说,在存在测量误差或噪声的情况下,模型的分类结果仍应保持不变,而不会因细微波动而发生翻转。

支持向量机的优化目标,是在所有可行的决策边界中,选择对输入扰动更具容忍性的那个,使模型在实现正确划分的同时,尽可能降低对微小变化的敏感程度。

2.1 扰动分析

既然支持向量机的核心目标是提升模型的抗扰动能力,我们先分析下当输入中添加扰动的时候,如何进行优化。假设:样本可能受到小扰动 \(\delta_{i}\),上限为 \(\epsilon_{i}\),注意:每个样本都有一个扰动。

当一个样本分类正确时,我们可以用下面的公式表示:

当添加扰动后,依然分类正确时,用下面的公式表示:

展开后可得:

\(y_{i}w\delta_{i}\) 是扰动带来的负面影响,当该项足够小的时候,就可能会改变分类结果。接下来,我们分析下最坏情况下的扰动怎么表示(即:该项最小能有多小):

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

其中,\(||y_{i}w||\) = \( |y_{i}| ||w||\) = \(||w||\),这就是引入的最坏情况下的扰动,把最坏扰动代回原始条件:

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


为了保证所有的样本都具有非常好的抗扰动能力,我们在选择 \(w、b\) 时,要保证距离超频面最近的样本,到超平面的几个间隔尽可能的大。所以,支持向量机的优化目标可表示为:

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

2.2 目标简化

假设所有样本到超平面的最小几何距离为 \(\gamma_{min}\):

\(y_{i}(w·x_{i}+b)\) 叫做 \(x_{i}\) 关于超平面 \((w, b)\) 的函数间隔。

注意:当确定超平面 latex](w, b)[/latex] 的时候,分母就是常数,不同的样本到超平面的距离是由分子决定的,所以公式可以转换为下面的形式:


接下来,我们继续简化优化目标,这里有两个重要点。

1️⃣ 当我们任意缩放 \(w、b\) 时,样本到超平面的几何间隔不变。

2️⃣ 当我们任意缩放 \(w、b\) 时,超平面的位置不变。

重点:\((w, b)\)、\((3w, 3b)\) … \((Mw, Mb)\) 都可以表示同一个超平面,这种现象称为尺度不确定性

解决这个问题的具体做法是:由于 \((w, b)\) 缩放 M 倍时,函数间隔也会缩放 M 倍:

如果我们将最小的函数间隔设置为 1,相当于间接固定了一个 \((w, b)\) 的缩放尺度。

注意:这里将最小函数间隔设置为 1,也可以是 2 … 通常取 1 以简化表达。如果设为其他正数,目标函数只会多出一个常数比例因子,最终得到的超平面位置不会发生改变,只是参数整体按比例缩放。

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

我们再仔细理解下这个约束条件,它不仅要求分对,还要求分得有安全距离。它优化的不是平均表现,而是提升最危险样本的置信度,从而让模型整体更加稳健。

为了方便后续求解,我们将目标函数修改成如下形式:

原因是:平方后目标函数变为光滑的严格凸二次函数,便于构造标准二次规划并推导后续问题,同时不会改变最优解的位置。

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

3. 约束松绑

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

支持向量机为了适应实际场景,对约束条件进行了松绑,允许部分样本违反约束条件,即:约束松绑。我们把允许间隔违例的支持向量机被称作:软函数间隔支持向量机、或者软约束支持向量机。原支持向量机称作:硬函数间隔支持向量机、或者硬约束支持向量机。

3.1 松弛变量

软约束支持向量机引入一个非负松弛变量 \(\xi\),记录每个样本函数间隔违例的程度。比如:\(\xi = 0.3\),表示我们希望该样本函数间隔至少为 1,但实际输出只有 0.7,因此差了 0.3。

原始的约束条件具有一定的弹性、灵活性,样本就不会违背约束了,这就是软约束的支持向量机。但是,我们也不能无限允许样本函数间隔违例,违例的程度也需要加入到目标函数中。

此时,优化目标就不再单纯追求最大的几何间隔,而是要综合考虑几何间隔和函数间隔违例代价,在两者之间寻找一个平衡点,使整体目标函数最小,得到最优的模型。这里得到的最优,只是对当前优化目标而言的理论最优解,并不保证一定是泛化能力最好的模型。

为了调节几何间隔与违例代价之间的相对重要性,目标函数中引入了超参数 \(C\)。不同的 \(C\) 实际上改变了模型在几何间隔大小和函数间隔违例惩罚之间的侧重方向,因此也会得到不同的最优超平面。

一般来说,调整 C 时会观察到以下趋势:

  • 当 C 较大时,模型更倾向于减少函数间隔违例,可能导致几何间隔变小;
  • 当 C 较小时,模型对函数间隔违例的容忍度更高,可能使几何间隔变大。

3.2 问题转换

软约束支持向量机的目标函数是带不等式约束的优化问题,直接求解难度较大。通过拉格朗日乘子法,可将其转化为无约束优化问题,为后续求解奠定基础。接下来,我们遵循通用规范流程,将带约束的目标函数转换为一个拉格朗日函数。

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

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

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


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

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

具体而言,如果约束条件被满足且拉格朗日乘子 \(\alpha\) 非负,此时约束项的值为非正数。如果允许自由最小化 \(\alpha\) ,算法会倾向于让 \(\alpha \to +\infty\),从而使拉格朗日函数的值趋向负无穷,就可以让拉格朗日函数的值持续下降。这显然违背了约束的初衷,约束的作用是界定解的合法性,而非作为降低目标函数值的工具。

因此,在拉格朗日函数中对约束条件项引入最大化(max),例如:当约束满足时,约束项刚好达到满足的点,由于最大化,不会进一步变得更小,从而阻止约束项被当作优化手段。

  1. 当约束被满足时:约束项是 <=0,为了最大化,会迫使乘子 \(\alpha\) 取 0,从而使约束项的值精确归零。这就彻底切断了约束项通过变为负数来人为降低整体目标函数值的可能性,确保算法只能靠优化原始目标项来减小数值。
  2. 当约束被违反时:约束项是 >=0,为了最大化,又由于 \(\alpha\) 非负,最大化操作会驱使 \(\alpha \to +\infty\),导致拉格朗日函数值趋向正无穷,相当于给非法解施加了无限大的惩罚,迫使优化算法必须调整超平面,直到所有样本都满足约束。

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

3.3 对偶问题

我们的优化目标是在满足约束的前提下,最小化目标函数。对应到拉格朗日函数就是先对 \((\alpha, \mu)\) 求最大(约束条件),再对 \((w,b,\xi)\) 求最小(超平面)

鉴于直接求解该嵌套的优化问题难度较大,我们换个思路:我们不直接求解 \((w,b)\),而是先求解 \((\alpha, \mu)\),然后再通过 \((\alpha, \mu)\) 间接得到 \((w,b,\xi)\) 最优超平面。这种思路也叫做原问题的对偶形式、对偶问题,问题本身没有变,只是换了一种求解思路。

  • 原始问题:先对拉格朗日乘子求最大化,再对模型参数求最小化。
  • 对偶问题:先对模型参数求最小化,再对拉格朗日乘子求最大化。

简单地将 min max 的顺序直接交换成 max min ,在数学上并不总是等价的。但是,对于当前的问题,先 max 再 min 和 先 min 再 max 是等价的。

我们现在已经得到一个对偶问题,接下来,我们需要使用 KKT 条件这个工具,解出拉格朗日乘子,再反推求解出原问题的解 \((w, b)\)。注意:这个 KKT 条件其实就是拉格朗日乘子和 \((w, b)\) 的关系等式,如果没有 KKT 条件,即使我求出拉格朗日乘子也不知道如何反推得到 \((w, b)\)。

对偶问题的求解步骤是:

对 \(w、b、\xi\) 求偏导,并让其等于 0,找到拉格朗日乘子和 \(w、b、\xi\) 的关系。


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

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

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

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

这里再次碰到 C 了,我们再加深对 C 超参数的理解。我们前面在讲解 min-max 问题时,提到当函数间隔违例的时候,算法会无上限的放大这些代价,使得模型要尽可能的减少函数间隔违例。这种不加控制的惩罚方式,很容易使得模型过拟合。通过 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\)

由于求导时 \(b\) 被消掉了,所以解对偶问题算不出 \(b\),这时候,就需要 KKT 条件的互补松弛性规则:\(\alpha_i \cdot \left[ 1 – \xi_i – y_i \left( w^T x_i + b \right) \right] = 0\)。注意:\(\alpha = 0\) 我们无法得到 b,\(\alpha = C\) 需要得到每一个样本的 \(\xi_{i}\),求解起来很麻烦(计算 \(\xi\) 需要先知道 b,而 b 目前也不知道),\( 0 \lt \alpha \lt C\) 的向量中,\(\xi_{i}=0\),就可以简单计算出来。


求解出每个样本的拉格朗日乘子 \(\alpha_{i}\),我们也就得到了决策函数。在数学定义上,决策函数通常写作原始形式:

而在实际计算与工程实现中,我们将 \(w\) 的表达式代入,统一使用对偶展开形式:

4. 能力扩展

软间隔支持向量机虽然解决了噪声干扰,但仍局限于原始特征空间中的线性分类。当数据呈现复杂的非线性分布(如螺旋形、同心圆)时,无论怎么调整软约束参数,在原始空间中都找不到一个理想的超平面。

解决思路并非继续放宽约束,而是变换观察数据的视角。根据 Cover 定理,将数据通过特定的非线性映射投射到更高维的特征空间后,数据变得线性可分的概率将显著增加。原本在低维空间中弯曲、交错的结构,在高维空间中往往能被舒展开来。

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

那么,我们就把数据映射到更高维空间,在更高维的空间去寻找最大间隔的线性超平面。但直接进行高维映射存在 2 个问题:

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

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

\(\phi(x)\) 表示映射函数,用于把原来的数据 \(x\) 映射到高维空间。核函数支持向量的决策函数如下:

在 scikit-learn 中针对 SVM 提供多种不同的核函数:

线性核 (Linear Kernel):适合特征维度远高于样本数(如文本分类),或样本量极大(百万级)场景,它的特点是计算最快,不易过拟合。

径向基核函数 (RBF / Gaussian Kernel):适合绝大多数非线性分类问题场景。它通过能将数据映射到无限维空间,具有极强的拟合能力。除非有明确理由使用其他核,否则通常优先尝试 RBF。

多项式核函数 (Polynomial Kernel):适用于图像处理等具有明确多项式交互特征的场景。它的参数较多(阶数、截距等),调参难度大,且高阶时易出现数值不稳定,目前使用频率低于 RBF。

Sigmoid 核函数:源自神经网络,目前在 SVM 中已较少使用,通常不作为常规推荐。

在实践中,通常遵循先线性核,后高斯核的原则。尽量避免盲目使用多项式核或 Sigmoid 核。如果是大规模数据或高维稀疏数据,先用线性核,如果效果不佳,再切换到高斯核 并配合网格搜索调整参数。

5. 简单总结

核心预测逻辑

支持向量机的预测逻辑是基于线性决策函数实现,其决策函数表达式为 \(f(x) = w \cdot x + b\),其中 \(w\) 为权重向量,\(b\)为偏置项。模型通过该函数计算样本的置信分数,根据分数符号判定样本类别:当 \(f(x) > 0\) 时,样本类别判定为+1。当 \(f(x) < 0\) 时,样本类别判定为-1。置信分数的绝对值越大,分类置信度越高,反之越接近 0,分类置信度越低。需要注意的是,标准 SVM 默认不提供分类概率解释,仅输出类别标签。

模型的核心参数 \(w\) 和 \(b\) 仅由支持向量决定。支持向量是训练集中对决策函数(超平面)有直接影响的关键样本,即离决策超平面最近的样本点,因此支持向量机训练的本质的是寻找这些关键支持向量。


基础优化目标

支持向量机的核心优化目标是提升模型的抗扰动能力,避免因数据存在微小噪声、测量误差或轻微分布偏移,导致分类结果发生翻转。样本到决策超平面的几何距离,直接决定了模型的抗扰动能力:几何距离越远,样本对噪声、误差的容忍度越高,模型抗扰动性越强;反之,几何距离越近,模型越容易受扰动影响,出现分类错误。

基于此,支持向量机的基础优化目标(针对线性可分数据)明确为:在正确分类所有训练样本的条件下,最大化所有样本中到超平面的最小几何间隔。这里需区分两个关键概念:几何间隔反映样本与超平面的实际距离;函数间隔是 \(|f(x)|\),反映样本相对超平面的符号关系,不具备几何意义,支持向量机的优化核心是几何间隔而非函数间隔。


软约束支持向量机

基础支持向量机仅适用于线性可分数据,当训练数据存在噪声、异常点,或数据本身近似线性可分时,硬约束(要求所有样本正确分类)会无法满足,导致优化问题无解。为解决这一问题,需引入松弛变量 \(\xi_i \geq 0\)(每个样本对应一个松弛变量),实现约束松绑,允许部分样本违反函数间隔约束,由此形成软约束支持向量机。

软约束支持向量机的优化目标发生调整,不再是单纯最大化最小几何间隔,而是在最大化所有样本的最小几何间隔最小化函数间隔违例代价之间寻找平衡。其中,违例代价由松弛变量衡量,\(\xi_i\)越大,对应样本的违例程度越严重。

超参数 \(C\) 用于调节两者的权重关系:\(C\) 越大,对样本违例的惩罚越重,模型更倾向于减少违例样本、降低违例代价,可能导致几何间隔变小,模型泛化能力下降(易过拟合);\(C\) 越小,对样本违例的容忍度越高,模型更倾向于保留较大的几何间隔,可能出现更多违例样本,模型拟合能力下降(易欠拟合)。


核函数支持向量机

软约束支持向量机仍局限于线性可分或近似线性可分的数据,针对非线性分布的数据(样本无法通过单一超平面实现有效分类),支持向量机通过引入核技巧解决:将低维输入空间中的非线性数据,映射到高维特征空间,使数据在高维空间中具备线性可分的可能性。

关键优势在于,实际应用中无需显式进行高维映射,而是通过核函数直接计算高维特征空间中两个样本的内积,大幅降低计算复杂度,这也是核技巧的核心意义。

常用核函数及适用场景:线性核、径向基核、多项式核、Sigmoid核。优先尝试线性核,若分类效果不佳,再替换为 RBF 核,并配合网格搜索、交叉验证进行超参数调参,避免盲目使用多项式核、Sigmoid核,减少不必要的计算成本和调参难度。


泛化性能

在训练阶段,支持向量机的核心特点是仅依靠少量关键样本构建模型,而非使用全部训练样本。针对训练数据中的噪声,如果噪声点成为支持向量,会对决策边界产生一定影响,但可通过调节惩罚参数 C 控制影响程度,避免噪声过度扭曲模型。如果噪声点并非支持向量,则不会对决策超平面产生任何干扰,使模型具备较好的抗噪能力。同时,支持向量机以最大化几何间隔为优化目标,将决策超平面置于离两类样本尽可能远的位置,而非紧贴训练样本,这一结构为后续预测阶段的稳定性奠定了基础。

在预测阶段,对于已经学习过的训练样本,由于为输入的微小扰动预留了容错空间,即便出现轻微波动,也不易跨越决策边界,因此模型对已知样本具有良好的抗扰动能力。对于未见过的新样本,最大几何间隔让新样本更大概率落在远离边界、置信度更高的区域,从整体上降低新样本进入模糊边界区的可能。


适用场景

在少样本、高维度的学习场景中,当特征维度远大于样本数量时,参数远多于有效约束,极易出现解不唯一、严重过拟合、泛化能力极差的问题。支持向量机通过对偶优化,将学习问题转化为只与样本相关的形式,最终决策函数仅由少量支持向量决定,需要优化的参数数量只与样本数有关,与原始特征维度无关。适合样本极少、特征维度极高的场景,不会因维度爆炸而过拟合或模型失效。另外,支持向量机并非通过逼近训练样本进行学习,而是由少数关键样本支撑起一个泛化边界,只关注样本间的分隔结构,而非拟合样本本身,在少样本、高维场景下依然不易过拟合。

当样本数量较多时,往往意味着问题本身更复杂,数据分布也更具多样性和复杂性。此时支持向量机不仅会因样本量增加,导致时间复杂度和空间复杂度急剧上升(训练变慢、占用内存增多),而且由于其本质是浅层模型,模型结构相对简单,拟合复杂数据分布、捕捉复杂决策边界的能力有限,无法充分挖掘海量数据中隐藏的深层规律,因此在这类场景下,其表现远不如深度学习模型。深度学习可通过多层网络自动学习分层特征,适配复杂数据分布,充分发挥海量样本的价值。

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

4 + 2 =