机器学习(三):SVM支持向量机算法

支持向量机(Support Vector Machine, SVM)是由Vapnik等人提出的经典二元分类算法 ,是感知器算法的深度扩展,兼具理论严谨性和工程实用性。其核心思想是寻找最大间隔超平面 实现分类,通过拉格朗日对偶 降低求解难度、核函数 解决非线性问题、SMO算法 高效求解优化问题,同时可通过OvR/OvO 拓展至多分类、通过ε-不敏感损失拓展至回归任务。在非集成学习、非海量数据集场景下,SVM是性能顶尖的分类算法,也是机器学习中凸优化、核方法的核心代表

本文将结合感知器基础、间隔理论、损失函数、优化求解、核方法、SMO算法等全维度内容,对SVM进行系统性详解


一、SVM算法基础

1. 感知器算法

感知器由Rosenblatt于1958年提出,是最古老的线性分类算法,也是SVM、神经网络、深度学习的基础,其核心是在特征空间寻找超平面分割二元类别,但存在显著局限性,为SVM的提出奠定了问题基础

(1)感知器核心原理

对于mmm个nnn维样本{x1,x2,...,xm}\{x_1,x_2,...,x_m\}{x1,x2,...,xm},二元标签y∈{+1,−1}y\in\{+1,-1\}y∈{+1,−1},感知器寻找超平面:
θ0+θ1x1+...+θnxn=0  ⟹  θTx=0\theta_0 + \theta_1x_1 + ... + \theta_nx_n = 0 \implies \theta^Tx = 0θ0+θ1x1+...+θnxn=0⟹θTx=0

  • 正例:θTx>0  ⟹  y=+1\theta^Tx > 0 \implies y=+1θTx>0⟹y=+1;负例:θTx<0  ⟹  y=−1\theta^Tx < 0 \implies y=-1θTx<0⟹y=−1
  • 判别式:y=sign(θTx)y=sign(\theta^Tx)y=sign(θTx)(符号函数)
  • 分类判定:y∗θTx>0y^*\theta^Tx > 0y∗θTx>0为正确分类,y∗θTx<0y^*\theta^Tx < 0y∗θTx<0为错误分类
(2)感知器的损失函数

损失函数定义为:分类错误样本到超平面的距离之和最小 ,简化后为:
L=−∑i=1my(i)θTx(i)L = -\sum_{i=1}^m y^{(i)}\theta^Tx^{(i)}L=−i=1∑my(i)θTx(i)

由于错误样本集不固定,无法使用批量梯度下降(BGD),仅能通过**随机梯度下降(SGD)**更新参数:
θk+1=θk+αy(i)x(i)\theta^{k+1} = \theta^k + \alpha y^{(i)}x^{(i)}θk+1=θk+αy(i)x(i)

  • α\alphaα:学习率
(3)感知器的局限性
  1. 仅适用于线性可分数据,无法处理非线性问题
  2. 可找到多个超平面实现分类,无"最优性"判定标准
  3. 对噪声容忍度低,泛化能力弱
  4. 损失函数仅关注错误样本,未考虑样本与超平面的间隔

SVM的核心目标 :解决感知器的局限性,找到对噪声鲁棒、泛化能力最强的最优超平面

2. 核心概念:空间、超平面、间隔

SVM的所有推导均基于特征空间超平面 ,而间隔是SVM区分其他分类算法的核心标志

(1)特征空间

样本的所有特征构成的向量空间,若样本有nnn个特征,则为nnn维特征空间,SVM的超平面定义在该空间中。

(2)超平面

nnn维特征空间中的超平面是n−1n-1n−1维的线性子空间,通用表达式为:
wTx+b=0w^Tx + b = 0wTx+b=0

  • www为超平面的法向量(决定超平面方向)
  • bbb为偏置项 (决定超平面位置),确定www和bbb即可唯一确定超平面
(3)函数间隔与几何间隔

SVM定义了函数间隔几何间隔 ,其中几何间隔 是样本到超平面的真实欧氏距离 ,是SVM要最大化的核心目标;函数间隔是几何间隔的简化形式,仅用于判断分类正确性

间隔类型 单个样本公式 数据集最小间隔 核心特点
函数间隔γ^\hat{\gamma}γ^ γ^i=yi(wTxi+b)\hat{\gamma}_i = y_i(w^Tx_i + b)γ^i=yi(wTxi+b) γ^min=min⁡i=1..mγ^i\hat{\gamma}{min} = \min{i=1..m} \hat{\gamma}_iγ^min=mini=1..mγ^i 依赖w,bw,bw,b缩放;仅判断分类正确性(γ^i>0\hat{\gamma}_i>0γ^i>0为正确)
几何间隔γ\gammaγ γi=yi(wTxi+b)∣w∣=γ^i∣w∣\gamma_i = \frac{y_i(w^Tx_i + b)}{|w|} = \frac{\hat{\gamma}_i}{|w|}γi=∣w∣yi(wTxi+b)=∣w∣γ^i γmin=γ^min∣w∣\gamma_{min} = \frac{\hat{\gamma}_{min}}{|w|}γmin=∣w∣γ^min 与w,bw,bw,b缩放无关;是样本到超平面的真实距离

关键性质 :对w,bw,bw,b做等比例缩放(如w→kw,b→kb,k>0w→kw, b→kb, k>0w→kw,b→kb,k>0),函数间隔会放大kkk倍,但几何间隔保持不变


二、SVM的核心思想:最大间隔超平面

SVM与感知器的本质区别在于超平面的选择准则

  • 感知器:找到任意一个能分割样本的超平面即可
  • SVM :找到最大间隔超平面------即使**两类样本中离超平面最近的点(支持向量)**的几何间隔最大化的超平面

1. 最大间隔的核心意义

最大间隔超平面是泛化能力最强的超平面,原因在于:

  1. 离超平面最近的样本是最容易分类错误的样本,让这些样本尽可能远离超平面,能有效提升模型对噪声和新样本的容忍度
  2. 最大间隔原则使模型具有结构风险最小化特性,符合统计学习理论,能有效避免过拟合

2. 支持向量的定义

支持向量 :离超平面最近 的样本点,即满足γi=γmin\gamma_i = \gamma_{min}γi=γmin的样本,是决定最大间隔超平面的唯一关键样本

  • 线性可分SVM中,支持向量位于间隔边界 上,满足yi(wTxi+b)=1y_i(w^Tx_i + b) = 1yi(wTxi+b)=1
  • 软间隔SVM中,支持向量包括间隔边界上、间隔内甚至分类错误的样本
  • 核心价值 :SVM的超平面仅由支持向量决定,与其他样本无关,实现了模型的稀疏性,大幅降低计算和存储开销

3. 最大间隔的数学表达

SVM的原始目标是最大化数据集的最小几何间隔
max⁡w,bγmin=max⁡w,bγ^min∥w∥\max_{w,b} \gamma_{min} = \max_{w,b} \frac{\hat{\gamma}_{min}}{\|w\|}w,bmaxγmin=w,bmax∥w∥γ^min

结合函数间隔的缩放不变性 ,人为规定数据集的最小函数间隔γ^min=1\hat{\gamma}{min}=1γ^min=1(纯数学简化技巧,选任意正数均可,选1为计算最简洁),则目标可简化为:
max⁡w,b1∥w∥\max
{w,b} \frac{1}{\|w\|}w,bmax∥w∥1

最大化1∥w∥\frac{1}{\|w\|}∥w∥1等价于最小化12∥w∥2\frac{1}{2}\|w\|^221∥w∥2 (加12\frac{1}{2}21是为了求导后消去系数,简化计算),因此SVM的原始优化目标最终转化为带约束的凸二次规划问题
min⁡w,b12∥w∥2s.t. yi(wTxi+b)≥1 (∀i=1,2,...,m)\min_{w,b} \frac{1}{2}\|w\|^2 \quad s.t. \ y_i(w^Tx_i + b) \geq 1 \ (\forall i=1,2,...,m)w,bmin21∥w∥2s.t. yi(wTxi+b)≥1 (∀i=1,2,...,m)

该式是**线性可分SVM(硬间隔SVM)**的核心优化目标


三、SVM的损失函数:合页损失+L2正则化

SVM的优化目标可从损失函数 角度重新推导,其损失函数是合页损失(Hinge Loss)+ L2正则化 的组合,完美体现了SVM"最大间隔分类 "的核心思想,也是对二分类任务中0-1损失 (理论最优损失)的凸近似

1. 0-1损失:理论最优但不可优化

0-1损失是二分类任务的真实损失函数 ,表示样本是否被正确分类:
L0−1(y,f(x))=I(y⋅f(x)≤0)L_{0-1}(y, f(x)) = I(y\cdot f(x) \leq 0)L0−1(y,f(x))=I(y⋅f(x)≤0)

其中I(⋅)I(\cdot)I(⋅)为指示函数(条件成立为1,否则为0),f(x)=wTx+bf(x)=w^Tx+bf(x)=wTx+b为模型输出得分。

局限性:非凸、不连续,无法用梯度下降、凸优化等方法求解,因此需要用其他损失函数近似

2. 合页损失:SVM的核心经验损失

合页损失是为SVM"最大间隔"思想量身设计的损失函数,单个样本公式为:
Lhinge(y,f(x))=max⁡(0,1−y⋅f(x))=[1−y(wTx+b)]+L_{hinge}(y, f(x)) = \max(0, 1 - y\cdot f(x)) = \left[1 - y(w^Tx + b)\right]_+Lhinge(y,f(x))=max(0,1−y⋅f(x))=[1−y(wTx+b)]+

其中下标+_++表示取正值操作(括号内≤0则损失为0,否则为括号内数值)

  • y⋅f(x)>1y\cdot f(x) > 1y⋅f(x)>1:样本分类正确且远离超平面(函数间隔>1),损失为0,模型无需优化
  • 0<y⋅f(x)≤10 < y\cdot f(x) ≤ 10<y⋅f(x)≤1:样本分类正确但靠近超平面(函数间隔在0~1之间),产生损失,迫使模型让该样本远离超平面
  • y⋅f(x)≤0y\cdot f(x) ≤ 0y⋅f(x)≤0:样本分类错误,产生较大损失,模型需大幅调整参数修正

核心特点 :对"分类正确但靠近超平面"的样本也会产生损失,强制要求样本远离超平面,这是SVM"最大间隔"思想的直接数学表达

3. SVM的损失函数

纯合页损失易出现参数不唯一 问题(超平面可平移但损失不变),因此SVM的完整损失函数加入L2正则化项 (结构损失),平衡"最大间隔"和"模型复杂度最小化",公式为:
min⁡w,b∑i=1m[1−yi(wTxi+b)]+⏟合页损失(经验损失)+λ∥w∥22⏟L2正则化(结构损失)\min_{w,b} \underbrace{\sum_{i=1}^m \left[1 - y_i(w^Tx_i + b)\right]+}{合页损失(经验损失)} + \underbrace{\lambda \|w\|2^2}{L2正则化(结构损失)}w,bmin合页损失(经验损失) i=1∑m[1−yi(wTxi+b)]++L2正则化(结构损失) λ∥w∥22

其中λ>0\lambda>0λ>0为正则化系数,控制模型复杂度:λ\lambdaλ越大,模型越简单,泛化能力越强;λ\lambdaλ越小,模型越复杂,易过拟合。

4. 软间隔SVM

将正则化系数λ=12C\lambda = \frac{1}{2C}λ=2C1(CCC为软间隔SVM的惩罚系数 ),引入松弛变量ξi=[1−yi(wTxi+b)]+\xi_i = \left[1 - y_i(w^Tx_i + b)\right]+ξi=[1−yi(wTxi+b)]+(ξi≥0\xi_i≥0ξi≥0,表示样本偏离间隔边界的程度),则合页损失的优化目标可直接转化为软间隔SVM 的经典形式:
min⁡w,b12∥w∥22+C∑i=1mξis.t. yi(wTxi+b)≥1−ξi,ξi≥0\min
{w,b} \frac{1}{2}\|w\|2^2 + C\sum{i=1}^m \xi_i \quad s.t. \ y_i(w^Tx_i + b) ≥ 1 - \xi_i, \xi_i ≥ 0w,bmin21∥w∥22+Ci=1∑mξis.t. yi(wTxi+b)≥1−ξi,ξi≥0
惩罚系数CCC的意义

  • C→∞C→∞C→∞:对松弛变量的惩罚无限大,要求所有样本满足硬间隔约束,退化为线性可分SVM(硬间隔SVM)
  • CCC越大:对噪声/异常点的惩罚越重,模型越追求"硬间隔",易过拟合
  • CCC越小:对噪声/异常点的容忍度越高,模型泛化能力越强,易欠拟合

5. 合页损失的变体

为适配不同场景,合页损失有两种常见变体,核心是调整对"间隔"的约束强度:

(1)平方合页损失

L=max⁡(0,1−y⋅f(x))2L = \max(0, 1 - y\cdot f(x))^2L=max(0,1−y⋅f(x))2
特点:光滑函数(处处可微),对靠近超平面的样本惩罚更重,优化更稳定,常用于需要梯度光滑的场景

(2)多分类合页损失

针对SVM多分类场景扩展,公式为:
L=max⁡(0,1−yifi(x)+max⁡j≠ifj(x))L = \max(0, 1 - y_i f_i(x) + \max_{j≠i} f_j(x))L=max(0,1−yifi(x)+j=imaxfj(x))
特点:要求正确类别得分比所有错误类别得分至少大1,实现多分类的间隔约束

6. 合页损失与其他二分类损失对比

合页损失与逻辑回归的对数损失、0-1损失的核心差异如下,体现了SVM与其他分类算法的本质区别:

损失函数 公式 核心特性 适用模型 对异常值敏感性
0-1损失 I(y⋅f(x)≤0)I(y\cdot f(x) ≤ 0)I(y⋅f(x)≤0) 非凸、不连续,理论最优 无实际模型
合页损失 max⁡(0,1−y⋅f(x))\max(0,1-y\cdot f(x))max(0,1−y⋅f(x)) 凸、单侧连续,强间隔约束 SVM 低(线性惩罚)
对数损失 −log⁡(11+e−y⋅f(x))-\log\left(\frac{1}{1+e^{-y\cdot f(x)}}\right)−log(1+e−y⋅f(x)1) 凸、光滑,概率输出 逻辑回归 高(指数惩罚)

关键差异:合页损失仅对"间隔不足"的样本产生损失,模型仅由支持向量决定;对数损失对所有样本都产生损失,模型受所有样本影响

四、SVM的优化求解:拉格朗日对偶

SVM的原始优化目标是带不等式约束的凸二次规划问题 ,直接求解需处理n+1n+1n+1个变量(w∈Rnw\in R^nw∈Rn,b∈Rb\in Rb∈R)和mmm个约束,当样本数mmm较大时求解效率极低。因此SVM采用拉格朗日对偶法 ,将原始问题(求解w,bw,bw,b)转化为对偶问题 (求解拉格朗日乘子α\alphaα),大幅降低求解难度,同时为核函数的引入奠定基础

1. 拉格朗日对偶的核心原理

拉格朗日对偶法是求解带约束凸优化问题 的经典方法,核心是通过拉格朗日乘子 将约束条件融入目标函数,将带约束优化问题 转化为无约束优化问题 ,并通过原始问题对偶问题 的等价性,将求解难度转移到拉格朗日乘子上

对于通用的带约束凸优化问题(原始问题):
min⁡xf(x)s.t. ci(x)≤0(i=1..k),hj(x)=0(j=1..l)\min_x f(x) \quad s.t. \ c_i(x) ≤ 0 (i=1..k), h_j(x)=0 (j=1..l)xminf(x)s.t. ci(x)≤0(i=1..k),hj(x)=0(j=1..l)

构造拉格朗日函数:
L(x,α,β)=f(x)+∑i=1kαici(x)+∑j=1lβjhj(x)L(x, \alpha, \beta) = f(x) + \sum_{i=1}^k \alpha_i c_i(x) + \sum_{j=1}^l \beta_j h_j(x)L(x,α,β)=f(x)+i=1∑kαici(x)+j=1∑lβjhj(x)

  • αi≥0\alpha_i≥0αi≥0为不等式约束的拉格朗日乘子
  • βj\beta_jβj为等式约束的拉格朗日乘子

对偶问题 :将原始问题的"最小化f(x)f(x)f(x)"和"满足约束"转化为对拉格朗日乘子的最大化问题:
max⁡α≥0,βmin⁡xL(x,α,β)\max_{\alpha≥0, \beta} \min_x L(x, \alpha, \beta)α≥0,βmaxxminL(x,α,β)

强对偶性 :当f(x)f(x)f(x)为凸函数、ci(x)c_i(x)ci(x)为凸函数、hj(x)h_j(x)hj(x)为仿射函数时,原始问题和对偶问题的最优解相等 (p∗=d∗p^*=d^*p∗=d∗),且满足KKT条件(Karush-Kuhn-Tucker条件),KKT条件是解的充要条件。

2. 线性可分SVM的拉格朗日对偶推导

以线性可分SVM的原始优化目标为基础,逐步推导对偶问题:

(1)构造拉格朗日函数

原始目标:min⁡w,b12∥w∥2s.t. yi(wTxi+b)≥1\min_{w,b} \frac{1}{2}\|w\|^2 \quad s.t. \ y_i(w^Tx_i + b) ≥ 1minw,b21∥w∥2s.t. yi(wTxi+b)≥1

将约束变形为1−yi(wTxi+b)≤01 - y_i(w^Tx_i + b) ≤ 01−yi(wTxi+b)≤0,构造拉格朗日函数:
L(w,b,α)=12∥w∥2−∑i=1mαi[yi(wTxi+b)−1]L(w, b, \alpha) = \frac{1}{2}\|w\|^2 - \sum_{i=1}^m \alpha_i \left[ y_i(w^Tx_i + b) - 1 \right]L(w,b,α)=21∥w∥2−i=1∑mαi[yi(wTxi+b)−1]

其中αi≥0\alpha_i≥0αi≥0为拉格朗日乘子,i=1,2,...,mi=1,2,...,mi=1,2,...,m。

(2)求拉格朗日函数对w,bw,bw,b的极小值

根据对偶问题的定义,先固定α\alphaα,求L(w,b,α)L(w,b,\alpha)L(w,b,α)对w,bw,bw,b的极小值,即min⁡w,bL(w,b,α)\min_{w,b} L(w,b,\alpha)minw,bL(w,b,α),通过求偏导并令其为0实现:

  1. 对www求偏导:∂L∂w=w−∑i=1mαiyixi=0  ⟹  w=∑i=1mαiyixi\frac{\partial L}{\partial w} = w - \sum_{i=1}^m \alpha_i y_i x_i = 0 \implies \boldsymbol{w = \sum_{i=1}^m \alpha_i y_i x_i}∂w∂L=w−∑i=1mαiyixi=0⟹w=∑i=1mαiyixi
  2. 对bbb求偏导:∂L∂b=−∑i=1mαiyi=0  ⟹  ∑i=1mαiyi=0\frac{\partial L}{\partial b} = - \sum_{i=1}^m \alpha_i y_i = 0 \implies \boldsymbol{\sum_{i=1}^m \alpha_i y_i = 0}∂b∂L=−∑i=1mαiyi=0⟹∑i=1mαiyi=0

将w=∑i=1mαiyixiw = \sum_{i=1}^m \alpha_i y_i x_iw=∑i=1mαiyixi和∑i=1mαiyi=0\sum_{i=1}^m \alpha_i y_i = 0∑i=1mαiyi=0反代回拉格朗日函数,消去www和bbb,得到仅关于α\alphaα的函数:
min⁡w,bL(w,b,α)=∑i=1mαi−12∑i=1m∑j=1mαiαjyiyjxiTxj\min_{w,b} L(w,b,\alpha) = \sum_{i=1}^m \alpha_i - \frac{1}{2} \sum_{i=1}^m \sum_{j=1}^m \alpha_i \alpha_j y_i y_j x_i^T x_jw,bminL(w,b,α)=i=1∑mαi−21i=1∑mj=1∑mαiαjyiyjxiTxj

(3)求对α\alphaα的极大值,得到对偶问题

将极小值结果代入对偶问题,得到线性可分SVM的对偶优化目标:
max⁡α∑i=1mαi−12∑i=1m∑j=1mαiαjyiyjxiTxjs.t. ∑i=1mαiyi=0,αi≥0 (∀i)\max_{\alpha} \sum_{i=1}^m \alpha_i - \frac{1}{2} \sum_{i=1}^m \sum_{j=1}^m \alpha_i \alpha_j y_i y_j x_i^T x_j \quad s.t. \ \sum_{i=1}^m \alpha_i y_i = 0, \alpha_i ≥ 0 \ (\forall i)αmaxi=1∑mαi−21i=1∑mj=1∑mαiαjyiyjxiTxjs.t. i=1∑mαiyi=0,αi≥0 (∀i)

为求解方便,将最大化 转化为最小化 (加负号),最终对偶问题为:
min⁡α12∑i=1m∑j=1mαiαjyiyjxiTxj−∑i=1mαis.t. ∑i=1mαiyi=0,αi≥0 (∀i)\min_{\alpha} \frac{1}{2} \sum_{i=1}^m \sum_{j=1}^m \alpha_i \alpha_j y_i y_j x_i^T x_j - \sum_{i=1}^m \alpha_i \quad s.t. \ \sum_{i=1}^m \alpha_i y_i = 0, \alpha_i ≥ 0 \ (\forall i)αmin21i=1∑mj=1∑mαiαjyiyjxiTxj−i=1∑mαis.t. i=1∑mαiyi=0,αi≥0 (∀i)

核心变化 :求解变量从n+1n+1n+1个(w,bw,bw,b)变为mmm个(αi\alpha_iαi),且目标函数仅包含样本间的内积xiTxjx_i^T x_jxiTxj,为核函数的引入提供了完美条件。

3. 软间隔SVM的对偶问题

软间隔SVM的原始优化目标为:
min⁡w,b12∥w∥2+C∑i=1mξis.t. yi(wTxi+b)≥1−ξi,ξi≥0,αi≥0\min_{w,b} \frac{1}{2}\|w\|^2 + C\sum_{i=1}^m \xi_i \quad s.t. \ y_i(w^Tx_i + b) ≥ 1 - \xi_i, \xi_i ≥ 0, \alpha_i ≥ 0w,bmin21∥w∥2+Ci=1∑mξis.t. yi(wTxi+b)≥1−ξi,ξi≥0,αi≥0

引入拉格朗日乘子αi≥0\alpha_i≥0αi≥0(对应分类约束)和μi≥0\mu_i≥0μi≥0(对应松弛变量约束),构造拉格朗日函数并推导后,得到软间隔SVM的对偶问题:
min⁡α12∑i=1m∑j=1mαiαjyiyjxiTxj−∑i=1mαis.t. ∑i=1mαiyi=0,0≤αi≤C (∀i)\min_{\alpha} \frac{1}{2} \sum_{i=1}^m \sum_{j=1}^m \alpha_i \alpha_j y_i y_j x_i^T x_j - \sum_{i=1}^m \alpha_i \quad s.t. \ \sum_{i=1}^m \alpha_i y_i = 0, \boldsymbol{0 ≤ \alpha_i ≤ C} \ (\forall i)αmin21i=1∑mj=1∑mαiαjyiyjxiTxj−i=1∑mαis.t. i=1∑mαiyi=0,0≤αi≤C (∀i)

与硬间隔SVM的唯一差异 :拉格朗日乘子αi\alpha_iαi的约束从αi≥0\alpha_i≥0αi≥0变为0≤αi≤C0≤\alpha_i≤C0≤αi≤C,其余完全一致,这使得SMO算法可同时适配硬/软间隔SVM。

4. KKT条件:SVM解的充要条件

KKT条件是SVM原始问题和对偶问题解的充要条件 ,对于软间隔SVM,每个样本(xi,yi)(x_i,y_i)(xi,yi)满足以下KKT条件:

  1. αi≥0,μi≥0,ξi≥0\alpha_i ≥ 0, \mu_i ≥ 0, \xi_i ≥ 0αi≥0,μi≥0,ξi≥0(乘子和松弛变量非负);
  2. αi[yi(wTxi+b)−1+ξi]=0\alpha_i \left[ y_i(w^Tx_i + b) - 1 + \xi_i \right] = 0αi[yi(wTxi+b)−1+ξi]=0(互补松弛条件);
  3. μiξi=0\mu_i \xi_i = 0μiξi=0(互补松弛条件);
  4. yi(wTxi+b)≥1−ξiy_i(w^Tx_i + b) ≥ 1 - \xi_iyi(wTxi+b)≥1−ξi(原始分类约束)。

KKT条件的核心意义 :通过αi\alpha_iαi的取值可直接判断样本的类型,确定支持向量

  • αi=0\alpha_i = 0αi=0:样本分类正确,在间隔边界外,对超平面无影响;
  • 0<αi<C0 < \alpha_i < C0<αi<C:样本在间隔边界上 ,是核心支持向量,满足yi(wTxi+b)=1y_i(w^Tx_i + b) = 1yi(wTxi+b)=1;
  • αi=C\alpha_i = Cαi=C:样本嵌入间隔内,ξi<1\xi_i<1ξi<1时分类正确,ξi=1\xi_i=1ξi=1时在超平面上,ξi>1\xi_i>1ξi>1时分类错误。

关键结论 :只有支持向量的αi≠0\alpha_i≠0αi=0,非支持向量的αi=0\alpha_i=0αi=0,因此SVM的www可表示为仅支持向量的线性组合,实现了模型的稀疏性。

5. 从对偶解恢复原始解(w∗,b∗w^*,b^*w∗,b∗)

求解对偶问题得到最优拉格朗日乘子α∗\alpha^*α∗后,可通过以下步骤恢复SVM的原始解w∗w^*w∗和b∗b^*b∗,确定最终超平面:

(1)求解w∗w^*w∗

由拉格朗日偏导结果直接得到:
w∗=∑i=1mαi∗yixi\boldsymbol{w^* = \sum_{i=1}^m \alpha_i^* y_i x_i}w∗=i=1∑mαi∗yixi

由于非支持向量的αi∗=0\alpha_i^*=0αi∗=0,因此w∗w^*w∗仅由支持向量 的αi∗,yi,xi\alpha_i^*, y_i, x_iαi∗,yi,xi线性组合而成。

(2)求解b∗b^*b∗

利用支持向量的KKT条件 0\<\\alpha_i\^\*\ 时,yi(w∗Txi+b∗)=1y_i(w^{*T}x_i + b^*) = 1yi(w∗Txi+b∗)=1),对任意支持向量xsx_sxs,有:
bs∗=ys−w∗Txs=ys−∑i=1mαi∗yixiTxsb_s^* = y_s - w^{*T}x_s = y_s - \sum_{i=1}^m \alpha_i^* y_i x_i^T x_sbs∗=ys−w∗Txs=ys−i=1∑mαi∗yixiTxs

为降低噪声影响,取所有支持向量 对应的bs∗b_s^*bs∗的平均值作为最终的b∗b^*b∗:
b∗=1S∑s=1Sbs∗\boldsymbol{b^* = \frac{1}{S} \sum_{s=1}^S b_s^*}b∗=S1s=1∑Sbs∗

其中SSS为支持向量的数量。

(3)最终超平面与判别式

超平面:w∗Tx+b∗=0w^{*T}x + b^* = 0w∗Tx+b∗=0

分类判别式:f(x)=sign(w∗Tx+b∗)\boldsymbol{f(x) = sign\left( w^{*T}x + b^* \right)}f(x)=sign(w∗Tx+b∗)

五、非线性SVM:核函数的引入

线性SVM仅能处理线性可分数据 ,但实际问题中大部分数据是非线性可分 的,SVM解决非线性问题的核心思路是升维 :将低维特征空间的非线性可分数据映射到高维特征空间 ,使其在高维空间线性可分。但直接显式升维会引发维度爆炸 问题,核函数的引入完美解决了这一问题,实现了隐式升维

1. 显式升维的问题:维度爆炸

对于低维特征xxx,定义映射函数φ(x):Rn→Rd\varphi(x): R^n → R^dφ(x):Rn→Rd(d>nd>nd>n),将其映射到ddd维高维特征空间,此时高维空间的内积为φ(xi)Tφ(xj)\varphi(x_i)^T \varphi(x_j)φ(xi)Tφ(xj)
问题 :高维空间的维度ddd会急剧增加,甚至为无穷维,导致:

  1. 映射函数φ(x)\varphi(x)φ(x)的构造极其复杂,甚至无法显式表达;
  2. 高维内积φ(xi)Tφ(xj)\varphi(x_i)^T \varphi(x_j)φ(xi)Tφ(xj)的计算复杂度呈指数级上升,无法落地。

例如:二维特征(x1,x2)(x_1,x_2)(x1,x2)映射为二次多项式特征(x1,x2,x1x2,x12,x22)(x_1,x_2,x_1x_2,x_1^2,x_2^2)(x1,x2,x1x2,x12,x22),维度从2→5;三维特征映射为二次多项式特征,维度从3→19,这就是维度爆炸

2. 核函数的核心思想:隐式升维+内积等价替换

SVM的对偶问题仅依赖样本间的内积 ,与特征空间的维度无关,这是核函数能引入的关键前提

核函数的核心思想是:跳过显式的高维映射φ(x)\varphi(x)φ(x),直接定义一个函数K(xi,xj)K(x_i,x_j)K(xi,xj),使其值等于高维空间的内积φ(xi)Tφ(xj)\varphi(x_i)^T \varphi(x_j)φ(xi)Tφ(xj) ,即:
K(xi,xj)=φ(xi)Tφ(xj)\boldsymbol{K(x_i, x_j) = \varphi(x_i)^T \varphi(x_j)}K(xi,xj)=φ(xi)Tφ(xj)

其中K(x,z)K(x,z)K(x,z)为核函数 ,φ(x)\varphi(x)φ(x)为低维到高维的映射函数(无需显式定义)。

核心价值

  1. 隐式升维 :无需构造映射函数φ(x)\varphi(x)φ(x),通过核函数间接实现数据向高维空间的映射,彻底解决维度爆炸问题;
  2. 简化计算 :直接计算核函数值K(xi,xj)K(x_i,x_j)K(xi,xj),替代高维内积的计算,大幅降低复杂度;
  3. 无缝适配 :仅需将SVM对偶问题中的低维内积xiTxjx_i^T x_jxiTxj替换为核函数K(xi,xj)K(x_i,x_j)K(xi,xj),无需改变SVM的核心求解逻辑。

3. Mercer定理:核函数的充要条件

并非所有函数都能作为核函数,Mercer定理 给出了核函数的充分必要条件,是核函数的理论基石:

设XXX是有限维欧氏空间的非空子集,二元函数K:X×X→RK: X×X→RK:X×X→R满足对称性 (K(x,z)=K(z,x),∀x,z∈XK(x,z)=K(z,x), \forall x,z∈XK(x,z)=K(z,x),∀x,z∈X),则K(x,z)K(x,z)K(x,z)能作为核函数的充要条件是:对任意有限样本集{x1,x2,...,xm}\{x_1,x_2,...,x_m\}{x1,x2,...,xm},由K(xi,xj)K(x_i,x_j)K(xi,xj)构成的核矩阵KKK (m×mm×mm×m,第iii行jjj列元素为K(xi,xj)K(x_i,x_j)K(xi,xj))是半正定矩阵(特征值≥0)。

Mercer定理的意义

  1. 存在性证明 :满足Mercer条件的核函数,必然存在一个隐式的高维映射φ(x)\varphi(x)φ(x),证明了核函数"隐式升维"的合理性;
  2. 判定准则:为核函数的设计和选择提供了数学标准;
  3. 通用性:常用核函数(线性核、高斯核、多项式核等)均满足Mercer条件。

4. 常用核函数

实际应用中无需自行设计核函数,直接使用经典核函数即可,常用核函数如下,覆盖了线性、中等非线性、复杂非线性等所有场景:

核函数类型 公式 映射特点 适用场景
线性核 K(x,z)=xTzK(x,z) = x^T zK(x,z)=xTz 无升维,等价于线性SVM 线性可分数据
多项式核 K(x,z)=(γxTz+r)dK(x,z) = (\gamma x^T z + r)^dK(x,z)=(γxTz+r)d 映射到ddd次多项式高维空间 中等复杂度非线性数据
高斯核(RBF) K(x,z)=exp(−γ∣x−z∣2)K(x,z) = exp\left(-\gamma |x-z|^2\right)K(x,z)=exp(−γ∣x−z∣2) 映射到无穷维高维空间 复杂非线性数据(应用最广)
Sigmoid核 K(x,z)=tanh(γxTz+r)K(x,z) = tanh(\gamma x^T z + r)K(x,z)=tanh(γxTz+r) 类神经网络的映射 非线性分类,少用

超参数说明 :γ>0\gamma>0γ>0为核宽度,ddd为多项式次数,rrr为常数项,需通过交叉验证(如网格搜索)调优。
高斯核的优势:无需手动选择映射维度,可处理任意复杂的非线性问题,是实际应用中最常用的核函数。

5. 非线性SVM的完整形式

将线性SVM对偶问题、超平面、判别式中的低维内积xiTxjx_i^T x_jxiTxj替换为** 核函数K(xi,xj)K(x_i,x_j)K(xi,xj)**,即可得到非线性SVM的完整形式:

(1)对偶优化目标

min⁡α12∑i=1m∑j=1mαiαjyiyjK(xi,xj)−∑i=1mαis.t. ∑i=1mαiyi=0,0≤αi≤C (∀i)\min_{\alpha} \frac{1}{2} \sum_{i=1}^m \sum_{j=1}^m \alpha_i \alpha_j y_i y_j K(x_i,x_j) - \sum_{i=1}^m \alpha_i \quad s.t. \ \sum_{i=1}^m \alpha_i y_i = 0, 0 ≤ \alpha_i ≤ C \ (\forall i)αmin21i=1∑mj=1∑mαiαjyiyjK(xi,xj)−i=1∑mαis.t. i=1∑mαiyi=0,0≤αi≤C (∀i)

(2)超平面与判别式

由于高维空间的www无法显式表达,直接通过核函数构造判别式:
f(x)=sign(∑i=1mαi∗yiK(xi,x)+b∗)\boldsymbol{f(x) = sign\left( \sum_{i=1}^m \alpha_i^* y_i K(x_i,x) + b^* \right)}f(x)=sign(i=1∑mαi∗yiK(xi,x)+b∗)

其中b∗b^*b∗的求解仍利用支持向量的KKT条件,将内积替换为核函数即可:
bs∗=ys−∑i=1mαi∗yiK(xi,xs)b_s^* = y_s - \sum_{i=1}^m \alpha_i^* y_i K(x_i,x_s)bs∗=ys−i=1∑mαi∗yiK(xi,xs)

六、SVM的高效求解:SMO算法

SVM的对偶问题是凸二次规划问题 ,直接求解mmm个拉格朗日乘子α\alphaα的计算复杂度为O(m3)O(m^3)O(m3),无法处理中等规模以上的数据集。SMO(Sequential Minimal Optimization,序列最小优化)算法由Platt于1998年提出,是求解SVM对偶问题的核心高效算法 ,将mmm维优化分解为一系列二维子问题,通过解析解求解,大幅降低计算复杂度。

1. SMO算法的核心前提

SVM的对偶问题有一个关键等式约束 :∑i=1mαiyi=0\sum_{i=1}^m \alpha_i y_i = 0∑i=1mαiyi=0(yi∈{+1,−1}y_i\in\{+1,-1\}yi∈{+1,−1})。

该约束意味着:若固定m−2m-2m−2个α\alphaα,剩下2个α\alphaα的取值相互约束 ,二维子问题可进一步简化为一维优化 ,无需复杂数值解法,直接通过解析解求解,这是SMO算法高效的核心原因。

2. SMO算法的核心思想

SMO的核心思想是分而治之

  1. 将mmm维凸二次规划问题分解为一系列二维子问题 (每次仅优化2个拉格朗日乘子αi,αj\alpha_i, \alpha_jαi,αj,固定其余αk(k≠i,j)\alpha_k(k≠i,j)αk(k=i,j));
  2. 对每个二维子问题,通过解析解直接求解,保证每次迭代都能降低对偶问题的目标函数值;
  3. 通过启发式选择 待优化的αi,αj\alpha_i, \alpha_jαi,αj,加速收敛到全局最优解;
  4. 迭代执行上述步骤,直到所有α\alphaα满足KKT条件,算法收敛。

3. SMO算法的完整步骤

SMO算法的迭代过程分为外层循环 (选择第一个待优化的αi\alpha_iαi)、内层循环 (选择第二个待优化的αj\alpha_jαj)、二维子问题求解参数更新收敛判断五个核心步骤,完整流程如下:

步骤1:初始化参数
  • 拉格朗日乘子:αi=0\alpha_i = 0αi=0(i=1..mi=1..mi=1..m);
  • 阈值:b=0b = 0b=0;
  • 超参数:惩罚系数CCC、收敛阈值ϵ\epsilonϵ、最大迭代次数max_itermax\_itermax_iter;
  • 核函数:选择并初始化核函数(如高斯核、线性核)。
步骤2:外层循环------选择第一个待优化的αi\alpha_iαi

外层循环的目标是找到违反KKT条件 alpha_i (违反KKT条件的乘子需要优化),采用启发式选择策略加速收敛:

  1. 优先遍历支持向量:先遍历0\<\\alpha_i\的样本(支持向量),这些样本更易违反KKT条件,且对超平面影响最大;
  2. 全样本遍历:若未找到违反KKT条件的支持向量,遍历所有样本;
  3. 若遍历完所有样本均无违反KKT条件的αi\alpha_iαi,算法收敛,退出循环。

KKT条件的简化判断(软间隔SVM):

  • αi=0\alpha_i=0αi=0:需满足yif(xi)≥1−ϵy_i f(x_i) ≥ 1 - \epsilonyif(xi)≥1−ϵ;
  • 0\<\\alpha_i\
  • αi=C\alpha_i=Cαi=C:需满足yif(xi)≤1+ϵy_i f(x_i) ≤ 1 + \epsilonyif(xi)≤1+ϵ;
    其中f(xi)=∑k=1mαkykK(xk,xi)+bf(x_i) = \sum_{k=1}^m \alpha_k y_k K(x_k,x_i) + bf(xi)=∑k=1mαkykK(xk,xi)+b为样本xix_ixi的模型输出得分,ϵ\epsilonϵ为收敛阈值。
步骤3:内层循环------选择第二个待优化的αj\alpha_jαj

选择αj\alpha_jαj的目标是最大化更新步长 ,让目标函数快速下降,核心策略是选择使预测误差差的绝对值∣Ei−Ej∣|E_i - E_j|∣Ei−Ej∣最大 的αj\alpha_jαj:

  1. 计算αi\alpha_iαi的预测误差:Ei=f(xi)−yiE_i = f(x_i) - y_iEi=f(xi)−yi;
  2. 遍历其余αk(k≠i)\alpha_k(k≠i)αk(k=i),计算Ek=f(xk)−ykE_k = f(x_k) - y_kEk=f(xk)−yk;
  3. 选择使∣Ei−Ek∣|E_i - E_k|∣Ei−Ek∣最大的αk\alpha_kαk作为αj\alpha_jαj;
  4. 若未找到最优αj\alpha_jαj,随机选择一个非αi\alpha_iαi的αj\alpha_jαj(防止算法停滞)。
步骤4:二维子问题求解------优化αi,αj\alpha_i, \alpha_jαi,αj

这是SMO算法的核心步骤,通过解析解求解αj\alpha_jαj,再利用等式约束推导αi\alpha_iαi,分为边界计算未修剪解求解修剪解三个子步骤:

子步骤4.1:计算αj\alpha_jαj的取值边界LLL和HHH

根据yiy_iyi和yjy_jyj的符号,结合αi,αj∈[0,C]\alpha_i, \alpha_j \in [0,C]αi,αj∈[0,C]的约束,确定αj\alpha_jαj的有效取值范围:

  • 若yi=yjy_i = y_jyi=yj(同号):L=max⁡(0,αi+αj−C)L = \max(0, \alpha_i + \alpha_j - C)L=max(0,αi+αj−C),H=min⁡(C,αi+αj)H = \min(C, \alpha_i + \alpha_j)H=min(C,αi+αj);
  • 若yi≠yjy_i ≠ y_jyi=yj(异号):L=max⁡(0,αj−αi)L = \max(0, \alpha_j - \alpha_i)L=max(0,αj−αi),H=min⁡(C,C+αj−αi)H = \min(C, C + \alpha_j - \alpha_i)H=min(C,C+αj−αi);
    若L=HL=HL=H :αj\alpha_jαj无优化空间,跳过本次迭代。
子步骤4.2:计算核函数值与η\etaη
  • 核函数值:Kii=K(xi,xi)K_{ii}=K(x_i,x_i)Kii=K(xi,xi),Kjj=K(xj,xj)K_{jj}=K(x_j,x_j)Kjj=K(xj,xj),Kij=K(xi,xj)K_{ij}=K(x_i,x_j)Kij=K(xi,xj);
  • 二阶导数:η=Kii+Kjj−2Kij\eta = K_{ii} + K_{jj} - 2K_{ij}η=Kii+Kjj−2Kij(η>0\eta>0η>0保证凸优化,若η≤0\eta≤0η≤0,跳过本次迭代)。
子步骤4.3:计算αj\alpha_jαj的未修剪解αjnew,unc\alpha_j^{new,unc}αjnew,unc

通过解析解直接求解未考虑边界约束的αj\alpha_jαj:
αjnew,unc=αjold+yj(Ei−Ej)η\alpha_j^{new,unc} = \alpha_j^{old} + \frac{y_j (E_i - E_j)}{\eta}αjnew,unc=αjold+ηyj(Ei−Ej)

其中αjold\alpha_j^{old}αjold为αj\alpha_jαj的原始值。

子步骤4.4:修剪αj\alpha_jαj到有效边界[L,H][L,H][L,H]

将未修剪解投影到[L,H][L,H][L,H]范围内,得到αj\alpha_jαj的最优解:
αjnew={H,αjnew,unc>Hαjnew,unc,L≤αjnew,unc≤HL,αjnew,unc<L\alpha_j^{new} = \begin{cases} H, & \alpha_j^{new,unc} > H \\ \alpha_j^{new,unc}, & L ≤ \alpha_j^{new,unc} ≤ H \\ L, & \alpha_j^{new,unc} < L \end{cases}αjnew=⎩ ⎨ ⎧H,αjnew,unc,L,αjnew,unc>HL≤αjnew,unc≤Hαjnew,unc<L

子步骤4.5:更新αi\alpha_iαi

利用等式约束∑k=1mαkyk=0\sum_{k=1}^m \alpha_k y_k = 0∑k=1mαkyk=0,推导αi\alpha_iαi的最优解:
αinew=αiold+yiyj(αjold−αjnew)\alpha_i^{new} = \alpha_i^{old} + y_i y_j (\alpha_j^{old} - \alpha_j^{new})αinew=αiold+yiyj(αjold−αjnew)

步骤5:参数更新------更新阈值bbb和模型输出
子步骤5.1:更新阈值bbb

bbb的更新需满足KKT条件,分三种情况计算,保证更新后的bbb能让支持向量满足yif(xi)=1y_i f(x_i) = 1yif(xi)=1:

  1. 若0<αinew<C0 < \alpha_i^{new} < C0<αinew<C:b1=−Ei−yiKii(αinew−αiold)−yjKij(αjnew−αjold)+boldb_1 = -E_i - y_i K_{ii}(\alpha_i^{new}-\alpha_i^{old}) - y_j K_{ij}(\alpha_j^{new}-\alpha_j^{old}) + b^{old}b1=−Ei−yiKii(αinew−αiold)−yjKij(αjnew−αjold)+bold;
  2. 若0<αjnew<C0 < \alpha_j^{new} < C0<αjnew<C:b2=−Ej−yiKij(αinew−αiold)−yjKjj(αjnew−αjold)+boldb_2 = -E_j - y_i K_{ij}(\alpha_i^{new}-\alpha_i^{old}) - y_j K_{jj}(\alpha_j^{new}-\alpha_j^{old}) + b^{old}b2=−Ej−yiKij(αinew−αiold)−yjKjj(αjnew−αjold)+bold;
  3. 若两者都满足:bnew=b1=b2b^{new} = b_1 = b_2bnew=b1=b2;若仅其一满足,取对应值;若都不满足,取bnew=(b1+b2)/2b^{new} = (b_1 + b_2)/2bnew=(b1+b2)/2。
子步骤5.2:更新模型输出

将更新后的αinew,αjnew,bnew\alpha_i^{new}, \alpha_j^{new}, b^{new}αinew,αjnew,bnew代入,更新所有样本的模型输出得分f(x)f(x)f(x)和预测误差EEE。

步骤6:收敛判断
  • 若αi,αj\alpha_i, \alpha_jαi,αj的更新量∣αinew−αiold∣<ϵ|\alpha_i^{new}-\alpha_i^{old}| < \epsilon∣αinew−αiold∣<ϵ且∣αjnew−αjold∣<ϵ|\alpha_j^{new}-\alpha_j^{old}| < \epsilon∣αjnew−αjold∣<ϵ,认为本次迭代收敛;
  • 若迭代次数达到max_itermax\_itermax_iter,强制退出循环;
  • 否则,返回步骤2,继续外层循环。
步骤7:求解最终模型参数

算法收敛后,得到最优拉格朗日乘子α∗\alpha^*α∗,求解b∗b^*b∗(支持向量的平均值),最终分类判别式为:
f(x)=sign(∑i=1mαi∗yiK(xi,x)+b∗)f(x) = sign\left( \sum_{i=1}^m \alpha_i^* y_i K(x_i,x) + b^* \right)f(x)=sign(i=1∑mαi∗yiK(xi,x)+b∗)

4. SMO算法的关键特性

  1. 计算高效 :每次仅优化2个乘子,二维子问题有解析解,时间复杂度约为O(m)O(m)O(m)(线性核)或O(m2)O(m^2)O(m2)(高斯核),远优于直接求解mmm维二次规划;
  2. 收敛性保证 :每次迭代都能降低对偶问题的目标函数值,且目标函数有下界,因此SMO必然收敛到全局最优解
  3. 启发式选择:优先选择支持向量、最大误差的乘子,大幅加速收敛,实际迭代次数远小于样本数;
  4. 通用适配 :仅需调整核函数和α\alphaα的约束,即可适配线性/非线性SVM硬/软间隔SVM
  5. 稀疏性保持 :优化过程中仅更新违反KKT条件的乘子,非支持向量的αi\alpha_iαi始终为0,保持模型的稀疏性。

七、SVM的拓展:多分类与回归

SVM原生是二元分类算法 ,但通过简单拓展可实现多分类回归 任务,分别称为多分类SVM支持向量回归(SVR),核心思想仍基于"最大间隔",仅对损失函数和约束条件做适应性调整。

相关推荐
AMoon丶2 小时前
Golang--锁
linux·开发语言·数据结构·后端·算法·golang·mutex
x_xbx2 小时前
LeetCode:88. 合并两个有序数组
算法·leetcode·职场和发展
ฅ^•ﻌ•^ฅ12 小时前
LeetCode hot 100(复习c++) 1-15
c++·算法·leetcode
alphaTao2 小时前
LeetCode 每日一题 2026/3/9-2026/3/15
算法·leetcode·职场和发展
Kiyra2 小时前
[特殊字符] LeetCode 做题笔记(二):678. 有效的括号字符串
笔记·算法·leetcode
Fcy6482 小时前
与队列有关练习题
算法
TracyCoder1232 小时前
LeetCode Hot100(71/100)——152. 乘积最大子数组
算法·leetcode·职场和发展
Z9fish2 小时前
sse哈工大C语言编程练习44
c语言·c++·算法
李日灐2 小时前
改造红黑树实现封装 map/set:感受C++ 标准容器的精妙设计与底层实现
开发语言·数据结构·c++·后端·算法·红黑树