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 量化交易应用场景

场景 适用性 说明
涨跌预测 中等 需要调参,特征标准化
市场状态分类 较好 区分牛/熊/震荡
配对交易 较好 识别价格背离
高频交易 训练速度慢
相关推荐
Mr数据杨2 小时前
机载多光谱目标检测提升空中态势感知
人工智能·目标检测·机器学习·计算机视觉·数据分析·kaggle
郝学胜-神的一滴2 小时前
干货版《算法导论》 01:从问题定义到正确性证明
数据结构·人工智能·深度学习·神经网络·算法·机器学习
大肥羊学校懒羊羊2 小时前
特殊乘法的计算
数据结构·c++·算法
IronMurphy2 小时前
【算法四十一】763. 划分字母区间
算法
cpp_25012 小时前
P2430 严酷的训练
数据结构·c++·算法·动态规划·洛谷·背包dp
Rabitebla2 小时前
【数据结构】实现通讯录:基于C语言动态顺序表
c语言·开发语言·数据结构·算法
tankeven2 小时前
动态规划专题(06):树形动态规划(未完待续)
c++·算法·动态规划
米粒12 小时前
力扣算法刷题 Day 52
算法·leetcode·职场和发展
今儿敲了吗2 小时前
应用实战2:新闻列表
学习·算法