当前位置: 首页 > ops >正文

深入浅出理解支持向量机(SVM):从原理到实践

一、SVM 的核心目标:找到最优划分超平面

1.1 基本需求:实现样本分类

SVM 的核心任务很明确,就是在样本空间中找到一个划分超平面,将不同类别的样本准确分开。比如在二维样本空间中,这个超平面就是一条直线;在三维样本空间中,超平面则是一个平面;而在 n 维样本空间中,超平面是 n-1 维的子空间。

从数学角度来看,超平面可以用方程 wᵀx + b = 0 来表示。其中,w 是超平面的法向量,决定了超平面的方向;b 是偏置项,决定了超平面在空间中的位置。通过这个方程,我们可以判断任意样本点 x 属于哪一类别 —— 当 wᵀx + b > 0 时,样本属于正类(通常标记为 y=+1);当 wᵀx + b < 0 时,样本属于负类(通常标记为 y=-1)。

1.2 理想超平面:具备抗扰动能力

在样本空间中,能实现分类的超平面可能有无数个,但并非所有超平面都能满足实际需求。SVM 追求的是理想超平面—— 这种超平面对训练样本的局部扰动 “容忍性” 最好,也就是说,即使训练样本出现微小的偏移,超平面依然能准确分类,模型的泛化能力更强。

如何衡量超平面的 “容忍性” 呢?这就需要引入 “间隔(margin)” 的概念。间隔指的是两类样本中距离超平面最近的点到超平面的距离之和。理想的超平面,就是能使间隔最大化的超平面。因为间隔越大,超平面与样本点的 “安全距离” 就越远,对局部扰动的抵抗能力自然越强。

二、SVM 的优化过程:从最大化间隔到求解目标函数

2.1 优化目标:最大化间隔

假设样本空间中,距离超平面最近的样本点到超平面的距离为 d,那么间隔 margin = 2d。要最大化间隔,本质上就是最大化 d。

根据点到超平面的距离公式,对于样本点 (xᵢ, yᵢ),其到超平面 wᵀx + b = 0 的距离为:
dᵢ = |wᵀxᵢ + b| / ||w||
(其中 ||w|| 是向量 w 的 L2 范数,即 ||w|| = √(w₁² + w₂² +... + wₙ²))

由于理想超平面能正确分类所有样本,对于正类样本(yᵢ=+1),有 wᵀx + b > 0;对于负类样本(yᵢ=-1),有 wᵀx + b <0。因此,yᵢ(wᵀxᵢ + b) > 0,此时 | wᵀxᵢ + b| = yᵢ(wᵀxᵢ + b),距离公式可简化为:
dᵢ = yᵢ(wᵀxᵢ + b) / ||w||

而距离超平面最近的样本点满足 yᵢ(wᵀxᵢ + b) = 1(通过对 w 和 b 进行放缩变换,可使这个等式成立),这类样本点就是支持向量—— 它们是决定超平面位置的关键,其他样本点对超平面的位置没有影响。

此时,最近样本点到超平面的距离 d = 1/||w||,间隔 margin = 2/||w||。要最大化间隔,就等价于最小化 ||w||²/2(选择 ||w||²/2 是为了后续求导计算更简便,不影响优化方向)。

2.2 带约束的优化问题

综上,SVM 的优化问题可转化为:

  • 最小化目标函数:f (w) = (1/2)||w||²
  • 约束条件:yᵢ(wᵀxᵢ + b) ≥ 1(i = 1, 2,..., n)

这是一个带不等式约束的凸二次规划问题,直接求解难度较大,因此需要借助拉格朗日乘子法,将其转化为对偶问题进行求解。

2.3 拉格朗日乘子法:转化为对偶问题

对于带约束的优化问题,拉格朗日乘子法的核心思想是将约束条件融入目标函数,构造拉格朗日函数。针对 SVM 的优化问题,构造的拉格朗日函数为:
L (w, b, α) = (1/2)||w||² - Σαᵢ[yᵢ(wᵀxᵢ + b) - 1]
(其中 αᵢ ≥ 0 是拉格朗日乘子,i = 1, 2,..., n)

根据对偶理论,原问题(最小化 f (w))的最优解等价于其对偶问题(最大化拉格朗日函数对 w 和 b 的最小值)的最优解,即:
min (w,b) max (α) L (w, b, α) = max (α) min (w,b) L (w, b, α)

第一步:对 w 和 b 求偏导并令其为 0

要计算 min (w,b) L (w, b, α),需要分别对 w 和 b 求偏导,并令偏导数为 0,得到两个关键条件:

  1. 对 w 求偏导:∂L/∂w = w - Σαᵢyᵢxᵢ = 0 → w = Σαᵢyᵢxᵢ
  2. 对 b 求偏导:∂L/∂b = -Σαᵢyᵢ = 0 → Σαᵢyᵢ = 0
第二步:代入拉格朗日函数,简化对偶问题

将 w = Σαᵢyᵢxᵢ和 Σαᵢyᵢ = 0 代入拉格朗日函数,可消去 w 和 b,得到对偶问题的目标函数:
max (α) Σαᵢ - (1/2)ΣΣαᵢαⱼyᵢyⱼ(xᵢ・xⱼ)
(其中 xᵢ・xⱼ是样本点 xᵢ和 xⱼ的内积)

同时,对偶问题的约束条件为:

  1. Σαᵢyᵢ = 0
  2. αᵢ ≥ 0(i = 1, 2,..., n)

2.4 求解对偶问题:得到支持向量与超平面

求解上述对偶问题后,我们可以得到最优的拉格朗日乘子 α*。根据 KKT 条件(互补松弛条件),只有支持向量对应的 αᵢ > 0,其他样本点的 αᵢ = 0。

利用 α*,我们可以进一步计算超平面的参数:

  1. 法向量 w* = Σα*ᵢyᵢxᵢ(仅由支持向量贡献)
  2. 偏置项 b* = yⱼ - w*ᵀxⱼ(任选一个支持向量 (xⱼ, yⱼ) 计算)

最终,SVM 的分类决策函数为:
f (x) = sign (wᵀx + b) = sign(Σαᵢyᵢ(xᵢ·x) + b)

三、SVM 的关键技术:应对实际数据挑战

3.1 软间隔:处理含噪声的数据

在实际应用中,数据往往存在噪声或异常值,此时 “硬间隔”(要求所有样本都满足 yᵢ(wᵀxᵢ + b) ≥ 1)的要求过于严格,可能导致模型无法找到合适的超平面,或出现过拟合。

为了解决这一问题,SVM 引入了松弛因子 ξᵢ ≥ 0,将约束条件放宽为:
yᵢ(wᵀxᵢ + b) ≥ 1 - ξᵢ

同时,目标函数需要加入对松弛因子的惩罚,以平衡间隔大小和分类错误:
min (w,b,ξ) (1/2)||w||² + CΣξᵢ
(其中 C 是惩罚参数,控制对分类错误的容忍程度)

  • 当 C 趋近于无穷大时,惩罚力度极强,模型会尽量避免分类错误,退化为硬间隔 SVM;
  • 当 C 趋近于 0 时,惩罚力度极弱,模型允许更多分类错误,间隔会变得很大,但可能导致欠拟合。

软间隔 SVM 的求解过程与硬间隔类似,同样通过拉格朗日乘子法转化为对偶问题,只是约束条件变为 0 ≤ αᵢ ≤ C(C 为惩罚参数)。

3.2 核函数:解决低维不可分问题

在很多场景下,样本在低维空间中是线性不可分的(比如 “异或” 问题),此时硬间隔和软间隔 SVM 都无法直接应用。SVM 的解决方案是将低维空间中的样本映射到高维空间,使样本在高维空间中线性可分。

核函数的核心思想

假设存在一个映射函数 Φ(x),能将低维空间的样本 x 映射到高维特征空间的 Φ(x)。在高维空间中,SVM 的对偶问题目标函数中的内积 (xᵢ・xⱼ) 会变为 (Φ(xᵢ)・Φ(xⱼ))。

然而,直接计算高维空间的内积会面临 “维数灾难”—— 当维度过高时,计算量会急剧增加。核函数的巧妙之处在于,它可以在低维空间中直接计算高维空间内积的结果,无需显式构造映射函数 Φ(x)。

核函数 K (xᵢ, xⱼ) 满足:
K (xᵢ, xⱼ) = Φ(xᵢ)・Φ(xⱼ)

常用的核函数
  1. 线性核函数:K(xᵢ, xⱼ) = xᵢ·xⱼ
    适用于低维空间中线性可分的数据,本质上就是硬间隔或软间隔 SVM。

  2. 高斯核函数(RBF 核):K(xᵢ, xⱼ) = exp(-||xᵢ - xⱼ||²/(2σ²))
    适用于低维不可分的数据,能将样本映射到无穷维空间,灵活性极高,是实际应用中最常用的核函数之一。其中 σ 是带宽参数,控制核函数的平滑程度。

  3. 多项式核函数:K(xᵢ, xⱼ) = (xᵢ·xⱼ + c)^d
    (c≥0 是常数,d 是多项式的次数)适用于样本具有多项式分布规律的数据。

四、SVM 求解实例:直观理解计算过程

为了让大家更直观地理解 SVM 的求解过程,我们通过一个简单的实例进行演示。

假设存在 3 个样本点:

  • 正例 1:x₁=(3,3),y₁=+1
  • 正例 2:x₂=(4,3),y₂=+1
  • 负例 1:x₃=(1,1),y₃=-1

步骤 1:构造对偶问题目标函数

根据对偶问题的目标函数:
max (α) Σαᵢ - (1/2)ΣΣαᵢαⱼyᵢyⱼ(xᵢ・xⱼ)

代入样本点的内积(x₁・x₁=18,x₁・x₂=21,x₁・x₃=6,x₂・x₂=25,x₂・x₃=7,x₃・x₃=2)和类别标签,目标函数可展开为:
max (α) (α₁ + α₂ + α₃) - (1/2)[18α₁² + 21α₁α₂ - 6α₁α₃ + 21α₂α₁ + 25α₂² - 7α₂α₃ - 6α₃α₁ - 7α₃α₂ + 2α₃²]

结合约束条件 Σαᵢyᵢ = 0(即 α₁ + α₂ - α₃ = 0 → α₃ = α₁ + α₂),代入目标函数并化简,可将其转化为关于 α₁和 α₂的函数。

步骤 2:求解最优 α*

对化简后的目标函数分别求 α₁和 α₂的偏导,并令偏导为 0,得到方程组。求解后发现,直接得到的解不满足 αᵢ ≥ 0 的约束,因此需要在边界上寻找最优解。

通过尝试边界条件(如 α₁=0、α₂=0 等),最终得到最优的 α为:
α₁
 = 0.25,α₂* = 0,α₃* = 0.25
(只有 α₁和 α₃ > 0,因此 x₁和 x₃是支持向量)

步骤 3:计算超平面参数

  1. 法向量 w* = Σα*ᵢyᵢxᵢ = 0.25×1×(3,3) + 0×1×(4,3) + 0.25×(-1)×(1,1) = (0.5, 0.5)
  2. 偏置项 b* = y₁ - w*ᵀx₁ = 1 - (0.5×3 + 0.5×3) = -2

步骤 4:得到超平面方程与决策函数

超平面方程为:0.5x₁ + 0.5x₂ - 2 = 0
分类决策函数为:f (x) = sign (0.5x₁ + 0.5x₂ - 2)

http://www.xdnf.cn/news/18740.html

相关文章:

  • 《鸿蒙开发 3 天速成:核心知识点 + 实战案例精讲》
  • Uniapp(Vue2)Api请求封装
  • 解决VSCode无法下载服务器端 Server问的题
  • vue3 + jsx 中使用native ui 组件插槽
  • 使用 mcp-use 构建极简 Web 自动化测试智能体「喂饭教程」
  • http与https配置
  • 管理网络安全
  • FreeRTOS学习笔记(四):任务执行与切换
  • 入门Ubuntu操作系统
  • 类型签名,位置参数,关键字参数
  • 【Jetson】基于llama.cpp部署gpt-oss-20b(推理与GUI交互)
  • 利用Certbot生成ssl证书配置到nginx
  • Redis--2
  • 从下载到运行:MySQL 详细安装配置完整教程
  • Cloudflare 推出 GenAI 安全工具,守护企业数据
  • AI在提升阅读效率的同时,如何加强理解深度?
  • 2025中国生物制造科技创新论坛为何“花落”常德?
  • arm问题
  • 编写Linux下usb设备驱动方法:probe函数中要进行的工作
  • HTML+CSS+JavaScript实现的AES加密工具网页应用,包含完整的UI界面和加密/解密功能
  • 集成电路学习:什么是ONNX开放神经网络交换
  • 网络编程——TCP、UDP
  • ADC-工业信号采集卡-K004规格书
  • JWT用户认证后微服务间如何认证?(双向TLS(mTLS)、API网关、Refresh Token刷新Token)微服务间不传递用户认证Token
  • zookeeper基础概念及部署
  • Redis缓存雪崩缓存击穿缓存穿透的处理方式
  • java18学习笔记
  • Nuxt.js@4 中管理 HTML <head> 标签
  • AI 伦理的 “灰色地带”:数据隐私与技术创新如何平衡?
  • 零知开源——基于STM32F103RBT6和ADXL335实现SG90舵机姿态控制系统