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 分钟前
华为机试题 :两数之和
c++·算法·华为
默默开发18 分钟前
物流行业可用算法方向
算法
垆边人似月.30 分钟前
华为机试题 :有效的括号
c++·算法·华为
joopthd37 分钟前
工业在线 TDLAS 器件源头厂商|连续监测场景器件选型要点
机器学习·激光气体检测·tdlas分析模块·仪器集成开发·工业在线监测
方方洛1 小时前
ray教程-00-前言与导读
人工智能·分布式·机器学习
方方洛1 小时前
ray教程-01-认识Ray
人工智能·分布式·机器学习
A加ITIL教练长河achotsao1 小时前
ITIL Master 战略领导者课后系列分享:AI编程正在重新划分研发与运维的边界
算法
hahaha60161 小时前
FPGA+ARM实现AWB的全流程
人工智能·嵌入式硬件·算法·计算机视觉·fpga开发
李洱1 小时前
LangChain 和 LangGraph 的区别:核心原理与使用场景
算法
夏幻灵1 小时前
每日一题:LeetCode 206:反转链表——三指针与原地反转详解
算法·leetcode·链表