Day 12:支持向量机(SVM)原理与实践

Day 12:支持向量机(SVM)原理与实践

📋 目录

  1. SVM 概述与发展
  2. 线性可分 SVM(硬间隔)
  3. 线性不可分 SVM(软间隔)
  4. 核方法(Kernel Trick)
  5. SVM 超参数详解
  6. SVM 优缺点与应用场景

第一部分:SVM 概述与发展

1.1 什么是 SVM?

支持向量机(Support Vector Machine, SVM) 是一种监督学习 模型,通过寻找最大间隔超平面来区分不同类别的数据。

核心思想

找到离决策边界最近的样本点(支持向量),并最大化它们到边界的距离。

1.2 SVM 的发展历程

时间 里程碑 贡献者
1963年 线性可分 SVM(硬间隔) Vladimir Vapnik 等
1992年 核技巧(Kernel Trick) Bernhard Boser 等
1995年 软间隔(Soft Margin) Corinna Cortes 等

重要地位:被誉为"最好的现成分类器",在深度学习兴起前是机器学习的主流算法。

1.3 SVM vs 其他分类器

特性 逻辑回归 KNN 决策树 SVM
决策边界 线性 非线性 分段线性 线性/非线性
对异常值敏感度
高维数据表现 优秀
可解释性
训练速度 慢(大数据)

第二部分:线性可分 SVM(硬间隔)

2.1 基本概念

线性可分:存在一个超平面能够完全分开两类数据点。

超平面方程
wTx+b=0 \mathbf{w}^T \mathbf{x} + b = 0 wTx+b=0

其中:

  • w\mathbf{w}w:法向量(决定方向)
  • bbb:偏置(决定位置)

分类决策函数
f(x)=sign⁡(wTx+b) f(\mathbf{x}) = \operatorname{sign}(\mathbf{w}^T \mathbf{x} + b) f(x)=sign(wTx+b)

2.2 函数间隔与几何间隔

函数间隔
γ^i=yi(wTxi+b) \hat{\gamma}_i = y_i(\mathbf{w}^T \mathbf{x}_i + b) γ^i=yi(wTxi+b)

几何间隔 (点到超平面的真实距离):
γi=yi(wTxi+b)∥w∥=γ^i∥w∥ \gamma_i = \frac{y_i(\mathbf{w}^T \mathbf{x}_i + b)}{\|\mathbf{w}\|} = \frac{\hat{\gamma}_i}{\|\mathbf{w}\|} γi=∥w∥yi(wTxi+b)=∥w∥γ^i

数据集的最小几何间隔
γ=min⁡i=1,...,nγi \gamma = \min_{i=1,\dots,n} \gamma_i γ=i=1,...,nminγi

2.3 最大间隔原理

目标 :找到使几何间隔 γ\gammaγ 最大的超平面。

优化问题
max⁡w,bγs.t.yi(wTxi+b)∥w∥≥γ,i=1,...,n \max_{\mathbf{w}, b} \gamma \quad \text{s.t.} \quad \frac{y_i(\mathbf{w}^T \mathbf{x}_i + b)}{\|\mathbf{w}\|} \geq \gamma, \quad i = 1, \dots, n w,bmaxγs.t.∥w∥yi(wTxi+b)≥γ,i=1,...,n

等价形式 (令 γ^=1\hat{\gamma} = 1γ^=1):
min⁡w,b12∥w∥2s.t.yi(wTxi+b)≥1,i=1,...,n \min_{\mathbf{w}, b} \frac{1}{2} \|\mathbf{w}\|^2 \quad \text{s.t.} \quad y_i(\mathbf{w}^T \mathbf{x}_i + b) \geq 1, \quad i = 1, \dots, n w,bmin21∥w∥2s.t.yi(wTxi+b)≥1,i=1,...,n

2.4 支持向量

定义 :距离决策边界最近的样本点,即满足 yi(wTxi+b)=1y_i(\mathbf{w}^T \mathbf{x}_i + b) = 1yi(wTxi+b)=1 的点。

性质

  • 只有支持向量决定决策边界
  • 移除非支持向量不影响模型

第三部分:线性不可分 SVM(软间隔)

3.1 为什么要软间隔?

硬间隔的问题

  • 数据可能线性不可分(不存在完美分隔的超平面)
  • 即使线性可分,硬间隔对异常值极其敏感

3.2 软间隔的引入

松弛变量 ξi\xi_iξi
ξi=max⁡(0,1−yi(wTxi+b)) \xi_i = \max(0, 1 - y_i(\mathbf{w}^T\mathbf{x}_i + b)) ξi=max(0,1−yi(wTxi+b))
含义

  • ξi=0\xi_i = 0ξi=0:正确分类且在间隔外
  • 0<ξi<10 < \xi_i < 10<ξi<1:正确分类但在间隔内
  • ξi≥1\xi_i \geq 1ξi≥1:分类错误

3.3 C 参数(惩罚系数)

优化目标
min⁡w,b,ξ12∥w∥2+C∑i=1nξi \min_{\mathbf{w}, b, \xi} \frac{1}{2} \|\mathbf{w}\|^2 + C \sum_{i=1}^n \xi_i w,b,ξmin21∥w∥2+Ci=1∑nξi

约束条件
yi(wTxi+b)≥1−ξi,ξi≥0,i=1,...,n y_i(\mathbf{w}^T \mathbf{x}_i + b) \geq 1 - \xi_i, \quad \xi_i \geq 0, \quad i = 1, \dots, n yi(wTxi+b)≥1−ξi,ξi≥0,i=1,...,n

3.4 C 参数的影响

C 值 效果 风险
大 C 更关注分类正确,允许更小的间隔 过拟合
小 C 更关注间隔最大化,允许更多误分类 欠拟合

调参经验

  • C 过大 → 训练集准确率高,测试集可能低(过拟合)
  • C 过小 → 训练集准确率低(欠拟合)
  • 通常使用对数尺度搜索:[0.001, 0.01, 0.1, 1, 10, 100]

第四部分:核方法(Kernel Trick)

4.1 为什么需要核函数?

问题 :很多真实数据在原始特征空间是线性不可分的。

解决方案 :将数据映射到高维特征空间,使其变得线性可分。

python 复制代码
# 一维线性不可分 → 二维线性可分
# 原始空间: x (一维)
# 映射到: φ(x) = [x, x²] (二维)

4.2 核函数定义

核函数 :K(xi,xj)=ϕ(xi)Tϕ(xj)K(\mathbf{x}_i, \mathbf{x}_j) = \phi(\mathbf{x}_i)^T \phi(\mathbf{x}_j)K(xi,xj)=ϕ(xi)Tϕ(xj)

核技巧 :不需要显式计算高维映射 ϕ\phiϕ,直接计算内积,大大降低计算量。

4.3 常用核函数

核函数 公式 参数 特点
线性核 K(xi,xj)=xiTxjK(x_i, x_j) = x_i^T x_jK(xi,xj)=xiTxj - 速度快,可解释
多项式核 K(xi,xj)=(γxiTxj+r)dK(x_i, x_j) = (\gamma x_i^T x_j + r)^dK(xi,xj)=(γxiTxj+r)d degree, coef0 全局性强
RBF核 K(xi,xj)=exp⁡(−γ∣xi−xj∣2)K(x_i, x_j) = \exp(-\gamma |x_i - x_j|^2)K(xi,xj)=exp(−γ∣xi−xj∣2) gamma 局部性强,最常用
Sigmoid核 K(xi,xj)=tanh⁡(γxiTxj+r)K(x_i, x_j) = \tanh(\gamma x_i^T x_j + r)K(xi,xj)=tanh(γxiTxj+r) gamma, coef0 类似神经网络

4.4 RBF 核详解

RBF (Radial Basis Function) 是最常用的核函数,又称高斯核。

公式
K(xi,xj)=exp⁡(−γ∥xi−xj∥2) K(x_i, x_j) = \exp(-\gamma \|x_i - x_j\|^2) K(xi,xj)=exp(−γ∥xi−xj∥2)

参数 γ\gammaγ 的影响

γ\gammaγ 效果 风险
影响范围小,决策边界复杂 过拟合
影响范围大,决策边界平滑 欠拟合

RBF 核的优势

  • 只有一个参数 γ\gammaγ,调参简单
  • 能逼近任意连续函数
  • 数值稳定性好

第五部分:SVM 超参数详解

5.1 核心参数

参数 含义 典型范围 调参建议
C 惩罚系数 0.001, 0.01, 0.1, 1, 10, 100 对数尺度
gamma RBF 核参数 0.001, 0.01, 0.1, 1, 10 对数尺度
kernel 核函数类型 'linear', 'rbf', 'poly' 优先尝试 linear, rbf
degree 多项式核次数 2, 3, 4, 5 与 kernel='poly' 配合

5.2 参数交互

text 复制代码
C 大 + gamma 大 = 复杂边界(过拟合风险高)
C 小 + gamma 小 = 平滑边界(欠拟合风险高)
C 大 + gamma 小 = 间隔小但平滑
C 小 + gamma 大 = 间隔大但复杂

5.3 数据预处理

SVM 对特征缩放极其敏感,必须进行标准化!

python 复制代码
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

原因:SVM 基于距离计算,不同量纲的特征会主导决策边界。


第六部分:SVM 优缺点与应用场景

6.1 优点

优点 说明
高维有效 特征维度 > 样本数时表现好
内存高效 只使用支持向量
鲁棒性强 对异常值不敏感
核技巧 处理非线性问题

6.2 缺点

缺点 说明
计算量大 O(n2)O(n^2)O(n2) 到 O(n3)O(n^3)O(n3)
解释性差 核映射后难以解释
参数敏感 C 和 gamma 需要仔细调参
概率输出差 不如逻辑回归自然

6.3 量化交易应用场景

场景 适用性 说明
涨跌预测 中等 需要调参,特征标准化
市场状态分类 较好 区分牛/熊/震荡
配对交易 较好 识别价格背离
高频交易 训练速度慢
相关推荐
凌波粒18 分钟前
LeetCode--108.将有序数组转换为二叉搜索树(二叉树)
算法·leetcode·职场和发展
liulilittle18 分钟前
KCC:在 BBR 思路上的一次探索
网络·tcp/ip·算法·bbr·通信·拥塞控制·kcc
浦信仿真大讲堂40 分钟前
达索系统SIMULIA Abaqus 2026接触和约束的增强新功能介绍
人工智能·python·算法·仿真软件·达索软件
点云侠1 小时前
PCL 生成三棱锥点云
c++·算法·最小二乘法
兰令水1 小时前
leecodecode【面试150】【2026.6.13打卡-java版本】
java·算法·leetcode
临沂堇1 小时前
刷题日志 | Leetcode Hot 100 哈希
算法·leetcode·哈希算法
安逸sgr1 小时前
《图解机器学习-第四章》:损失函数和梯度下降:模型是怎么被训练出来的?
人工智能·机器学习·图解机器学习
玉小格1 小时前
一次关于Python的总结
算法
伊甸32 小时前
从企业级项目学敏感词过滤:DFA算法与双层缓存实战
java·算法·缓存
bIo7lyA8v2 小时前
算法中的随机化思想及其复杂度收益评估的技术8
算法