Skip to content

知识点卡片:支持向量机 (SVM)

基本信息

属性内容
知识点支持向量机 (SVM)
掌握程度★★★★☆
学习优先级P1
预估时间8小时
面试频率★★★★☆

核心原理

SVM找最大间隔的分类超平面:

硬间隔SVM:
min ½‖w‖²  s.t.  y_i(w^T x_i + b) ≥ 1

软间隔SVM(允许一些错误):
min ½‖w‖² + C Σ ξ_i  s.t.  y_i(w^T x_i + b) ≥ 1 - ξ_i, ξ_i ≥ 0

对偶问题

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

max Σ α_i - ½ Σ Σ α_i α_j y_i y_j (x_i^T x_j)
s.t. α_i ≥ 0, Σ α_i y_i = 0

核技巧:将内积 x_i^T x_j 替换为 K(x_i, x_j)

核函数

python
# 线性核:K(x,z) = x^T z(原始空间)
# 多项式核:K(x,z) = (γ x^T z + r)^d
# RBF核:K(x,z) = exp(-γ‖x-z‖²)(最常用,能拟合任意边界)
# Sigmoid核:K(x,z) = tanh(γ x^T z + r)

sklearn实现

python
from sklearn.svm import SVC, LinearSVC, SVR
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline

# SVM对特征缩放敏感,必须先标准化!
pipeline = Pipeline([
    ('scaler', StandardScaler()),
    ('svm', SVC(kernel='rbf', C=1.0, gamma='scale', probability=True))
])

# 线性SVM(数据量大时更快)
svm_linear = LinearSVC(C=1.0, max_iter=10000, dual=False)

# 参数说明
# C: 惩罚系数,C越大→过拟合风险大;C越小→欠拟合风险大
# gamma: RBF核的宽度,gamma越大→决策边界越复杂
# kernel: 'linear'/'poly'/'rbf'/'sigmoid'

SVM vs 逻辑回归

方面逻辑回归SVM
损失函数交叉熵Hinge Loss
输出概率分类边界
对异常值敏感(所有点都有影响)鲁棒(仅支持向量影响)
核方法不天然支持天然支持(核技巧)
大规模数据更快(线性时间)O(n²)或O(n³)
多分类天然支持需要OvR/OvO

面试高频问题

Q1: SVM为什么用Hinge Loss?

: Hinge Loss: L = max(0, 1 - y(w^T x + b))

  • 正确分类且间隔大于1时loss为0(稀疏性)
  • 只关注"难分"样本(支持向量)
  • 这是SVM"最大间隔"目标的直接翻译

Q2: 核技巧的核心思想?

: 不需要显式地将数据映射到高维空间,只需计算低维空间中的核函数值 K(x,z)。这使得可以在无限维空间中进行分类(如RBF核),同时保持计算在低维进行。

Q3: C参数的作用?

: C控制"间隔最大化"和"分类错误最小化"之间的权衡:

  • C大:严格要求正确分类 → 更小的间隔 → 容易过拟合
  • C小:允许更多错误 → 更大的间隔 → 更好的泛化

相关知识点