第六章 机器学习 -- 支持向量机

一、SVM 原理

1.1 最大间隔

支持向量机(Support Vector Machine, SVM)是一类基于几何间隔最大化的判别分类器。它在 1990 年代由 Vapnik 等人系统化,是核方法的代表。

二分类设定

数据 (xi,yi)(\mathbf{x}_i, y_i)(xi,yi),yi∈{−1,+1}y_i \in \{-1, +1\}yi∈{−1,+1}。超平面 w⊤x+b=0\mathbf{w}^\top \mathbf{x} + b = 0w⊤x+b=0 把两类分开。预测:

y^=sign(w⊤x+b)\hat{y} = \text{sign}(\mathbf{w}^\top \mathbf{x} + b)y^=sign(w⊤x+b)

点到超平面的距离(函数间隔与几何间隔)

  • 函数间隔 :γ^i=yi(w⊤xi+b)\hat{\gamma}_i = y_i (\mathbf{w}^\top \mathbf{x}_i + b)γ^i=yi(w⊤xi+b)。仅当 w,b\mathbf{w}, bw,b 等比例缩放时可任意放大------不是"距离"的几何度量。
  • 几何间隔 :γi=yi⋅w⊤xi+b∣w∣2\gamma_i = y_i \cdot \frac{\mathbf{w}^\top \mathbf{x}_i + b}{|\mathbf{w}|_2}γi=yi⋅∣w∣2w⊤xi+b。∣w∣|\mathbf{w}|∣w∣ 归一化后即真实距离。

最大间隔思想

选使最小几何间隔(最差点到超平面的距离)最大化的超平面:

max⁡w,bmin⁡iγi=max⁡w,bmin⁡iyiw⊤xi+b∣w∣2\max_{\mathbf{w}, b} \quad \min_i \gamma_i = \max_{\mathbf{w}, b} \min_i y_i \frac{\mathbf{w}^\top \mathbf{x}_i + b}{|\mathbf{w}|_2}w,bmaximinγi=w,bmaximinyi∣w∣2w⊤xi+b

固定 ∣w∣|\mathbf{w}|∣w∣ 为 1 后等价表述:

max⁡w,bγs.t.yi(w⊤xi+b)≥γ, ∀i\max_{\mathbf{w}, b} \quad \gamma \quad \text{s.t.} \quad y_i(\mathbf{w}^\top \mathbf{x}_i + b) \ge \gamma,\ \forall iw,bmaxγs.t.yi(w⊤xi+b)≥γ, ∀i

放缩 w,b\mathbf{w}, bw,b 可让 γ=1/∣w∣\gamma = 1 / |\mathbf{w}|γ=1/∣w∣,得到标准形式:

min⁡w,b12∣w∣22s.t.yi(w⊤xi+b)≥1, ∀i\min_{\mathbf{w}, b} \quad \frac{1}{2}|\mathbf{w}|_2^2 \quad \text{s.t.} \quad y_i(\mathbf{w}^\top \mathbf{x}_i + b) \ge 1,\ \forall iw,bmin21∣w∣22s.t.yi(w⊤xi+b)≥1, ∀i

这是一个凸二次规划(QP)问题。

支持向量(Support Vectors)

间隔边界上的样本:yi(w⊤xi+b)=1y_i (\mathbf{w}^\top \mathbf{x}_i + b) = 1yi(w⊤xi+b)=1。它们"撑"住超平面,决定最优解。其它非边界样本对 w\mathbf{w}w 无影响------SVM 解的稀疏性来源。

为什么最大间隔?

  1. 统计学习理论 :Vapnik 证明,间隔 γ\gammaγ 越大,VC 维越小,泛化误差上界越紧。
  2. 几何直觉:把"决策边界"放在最宽敞的位置上,对噪声与未见过样本最鲁棒。
  3. 唯一性 :严格可分时最优超平面唯一(强凸二次规划)。

可视化

二维例子:黑/白两类点,最大间隔超平面就是距两类最近点距离都最远的那条线。距超平面最近的两点(每类一个)就是支持向量。

不可分情况

实际数据常线性不可分------两类点无法用一条直线分开。两种处理:

  • 软间隔 SVM(§1.2):允许部分样本违反约束,用松弛变量容忍错误。
  • 核技巧(§2.1):把数据映射到高维空间,使在新空间中线性可分。

scikit-learn 默认接口

python 复制代码
from sklearn.svm import SVC
clf = SVC(C=1.0, kernel="rbf", gamma="scale").fit(X_train, y_train)
# C:软间隔惩罚(见 §1.2);kernel:核函数(见 §2);gamma:RBF 核带宽

易错点

  • 未标准化 :SVM 对特征量级敏感(与 KNN 类似),必须先 StandardScaler。
  • 核函数与 C、gamma 联动 :C 越大越不容忍错误(可能过拟合);gamma 越大单个样本影响范围越小(可能过拟合)。gamma="scale" 是 sklearn 默认(γ=1/(d⋅Var(X))\gamma = 1 / (d \cdot \text{Var}(X))γ=1/(d⋅Var(X)))。
  • 数据规模大时训练慢 :SVM 训练复杂度 O(N2∼N3)O(N^2 \sim N^3)O(N2∼N3),10 万样本以上建议用 LinearSVC 或近似(如 SGDClassifier + hinge loss)。
  • 多分类默认 OvO :sklearn 的 SVC 训练阶段按 OvO((K2)\binom{K}{2}(2K) 个二分类器)训练,但 decision_function_shape 默认 'ovr',因此 decision_function / predict_proba 输出形状为 (N,K)(N, K)(N,K)。多分类需求大时用 LinearSVC + OvR 更高效。

1.2 软间隔

硬间隔 SVM 要求所有样本被正确分类,这在噪声数据或重叠数据上不可行。软间隔 SVM 引入松弛变量 ξi≥0\xi_i \ge 0ξi≥0,允许部分样本违反约束:

min⁡w,b,ξ12∣w∣22+C∑i=1Nξi\min_{\mathbf{w}, b, \boldsymbol{\xi}} \quad \frac{1}{2}|\mathbf{w}|2^2 + C \sum{i=1}^N \xi_iw,b,ξmin21∣w∣22+Ci=1∑Nξi

s.t.yi(w⊤xi+b)≥1−ξi,ξi≥0\text{s.t.} \quad y_i(\mathbf{w}^\top \mathbf{x}_i + b) \ge 1 - \xi_i, \quad \xi_i \ge 0s.t.yi(w⊤xi+b)≥1−ξi,ξi≥0

  • ξi=0\xi_i = 0ξi=0:样本在间隔边界外(正确且远离边界)。
  • 0<ξi≤10 < \xi_i \le 10<ξi≤1:样本在间隔内部(正确但在边界之间)。
  • ξi>1\xi_i > 1ξi>1:样本被错误分类(在超平面错误侧)。

正则化参数 CCC

L=12∣w∣22+C∑iξiL = \frac{1}{2}|\mathbf{w}|_2^2 + C \sum_i \xi_iL=21∣w∣22+Ci∑ξi

CCC 越大,对错误的惩罚越重 → 模型越倾向完美拟合训练集(可能过拟合)。C→∞C \to \inftyC→∞ 退化为硬间隔。CCC 越小,容错越强 → 模型越简单(可能欠拟合)。

直觉上,CCC 是"误分类"与"间隔宽度"的权衡系数------与第四章正则化中的 1/λ1/\lambda1/λ 同等角色。

Hinge 损失等价形式

软间隔 SVM 等价于带 hinge 损失的优化:

min⁡w,b12∣w∣22+C∑i=1Nmax⁡(0,1−yi(w⊤xi+b))\min_{\mathbf{w}, b} \quad \frac{1}{2}|\mathbf{w}|2^2 + C \sum{i=1}^N \max(0, 1 - y_i(\mathbf{w}^\top \mathbf{x}_i + b))w,bmin21∣w∣22+Ci=1∑Nmax(0,1−yi(w⊤xi+b))

定义 hinge loss:ℓ(z)=max⁡(0,1−z)\ell(z) = \max(0, 1 - z)ℓ(z)=max(0,1−z),其中 z=yi(w⊤xi+b)z = y_i(\mathbf{w}^\top \mathbf{x}_i + b)z=yi(w⊤xi+b)。z≥1z \ge 1z≥1 时损失为 0,z<1z < 1z<1 时线性增长。

  • hinge 损失是 0-1 损失的上界(凸、连续),便于优化。
  • 与对数损失(logistic regression)相比,hinge 损失对远离边界的正确样本无奖励(损失严格为 0),更稀疏。

合页损失 vs 交叉熵

维度 hinge 交叉熵(log loss)
严格 0 损失 边界外严格 0 永远 > 0
概率输出 ✗(需 Platt scaling) ✓(直接)
鲁棒性 对远离边界正确样本不再优化 仍会被"过度自信"梯度推动
稀疏解 ✓ ✗

scikit-learn 中的 CCC 参数

python 复制代码
from sklearn.svm import SVC, LinearSVC

# 通用接口:O(N²) 训练复杂度
clf = SVC(C=1.0, kernel="linear").fit(X_train, y_train)

# 线性核专用:O(N) 训练复杂度(用 liblinear)
clf = LinearSVC(C=1.0, loss="squared_hinge", max_iter=1000).fit(X_train, y_train)

注意 LinearSVC 的 C 是软间隔参数,与 LogisticRegression(C=...) 的 C 同等含义。

ν\nuν-SVM(替代参数化)

sklearn 提供 NuSVC(与 SVC 并列的经典接口),用 ν∈(0,1]\nu \in (0, 1]ν∈(0,1] 替代 CCC:

  • ν\nuν 是支持向量比例的下界 (即支持向量占总样本比例 ≥ν\ge \nu≥ν)。
  • ν\nuν 是间隔误差(margin error)比例的上界 ------间隔误差包含被错分类样本与落在间隔内(ξi>0\xi_i > 0ξi>0)的样本两类。
  • 与 CCC 互为单调映射,但 ν\nuν 的几何/统计意义更直观。

SVM 的概率输出

SVM 原始输出是 w⊤x+b\mathbf{w}^\top \mathbf{x} + bw⊤x+b(实数)。要概率需后处理:

  • Platt scaling :在 SVM 输出上拟合 sigmoid P(y=1∣x)=σ(Af(x)+B)P(y=1 | x) = \sigma(A f(x) + B)P(y=1∣x)=σ(Af(x)+B),A,BA, BA,B 通过最大似然估计。
  • sklearn 的 SVC(probability=True).predict_proba(X) 内部已做 Platt scaling(用 5 折 CV 训练额外的 sigmoid)。
  • 代价:训练时间增加(额外 CV 拟合)。

易错点

  • CCC 与误分类权衡混淆 :CCC 大 → 严格;CCC 小 → 宽松。与 KNN 的 kkk 选择是相反的直觉(kkk 大 → 平滑;CCC 大 → 严格)。
  • LinearSVC vs SVC(kernel="linear") :两者等价但实现不同,LinearSVC 用 liblinear 快很多;SVC(kernel="linear") 用 libsvm,支持 probability=True 与 decision_function_shape。
  • 稀疏数据 :SVM 对稀疏高维数据(如文本)效果很好,但要确保 kernel 适合------稀疏向量间的线性核或 χ2\chi^2χ2 核更合适。
  • 类别不平衡 :软间隔的 CCC 对所有类别同权;可设 class_weight="balanced" 让模型关注少数类。

1.3 对偶问题

凸二次规划可转化为对偶问题 求解------这对 SVM 至关重要,因为它引出核方法 和支持向量的稀疏性。

Lagrange 形式

对软间隔 SVM,引入拉格朗日乘子 αi≥0\alpha_i \ge 0αi≥0(对应 yif(xi)≥1−ξiy_i f(\mathbf{x}_i) \ge 1 - \xi_iyif(xi)≥1−ξi 约束)和 μi≥0\mu_i \ge 0μi≥0(对应 ξi≥0\xi_i \ge 0ξi≥0),Lagrangian:

L=12∣w∣22+C∑iξi−∑iαiyi(w⊤xi+b)−1+ξi−∑iμiξiL = \frac{1}{2}|\mathbf{w}|_2^2 + C \sum_i \xi_i - \sum_i \alpha_i y_i(\\mathbf{w}\^\\top \\mathbf{x}_i + b) - 1 + \\xi_i - \sum_i \mu_i \xi_iL=21∣w∣22+Ci∑ξi−i∑αiyi(w⊤xi+b)−1+ξi−i∑μiξi

对 w,b,ξi\mathbf{w}, b, \xi_iw,b,ξi 求偏导并令为 0(KKT 条件的一部分):

∂L∂w=w−∑iαiyixi=0  ⟹  w=∑iαiyixi\frac{\partial L}{\partial \mathbf{w}} = \mathbf{w} - \sum_i \alpha_i y_i \mathbf{x}_i = 0 \implies \mathbf{w} = \sum_i \alpha_i y_i \mathbf{x}_i∂w∂L=w−i∑αiyixi=0⟹w=i∑αiyixi

∂L∂b=−∑iαiyi=0  ⟹  ∑iαiyi=0\frac{\partial L}{\partial b} = -\sum_i \alpha_i y_i = 0 \implies \sum_i \alpha_i y_i = 0∂b∂L=−i∑αiyi=0⟹i∑αiyi=0

∂L∂ξi=C−αi−μi=0  ⟹  0≤αi≤C\frac{\partial L}{\partial \xi_i} = C - \alpha_i - \mu_i = 0 \implies 0 \le \alpha_i \le C∂ξi∂L=C−αi−μi=0⟹0≤αi≤C

代回 Lagrangian,消去 w,b,ξi\mathbf{w}, b, \xi_iw,b,ξi 得对偶问题:

max⁡α∑iαi−12∑i,jαiαjyiyjxi⊤xj\max_{\boldsymbol{\alpha}} \quad \sum_i \alpha_i - \frac{1}{2} \sum_{i,j} \alpha_i \alpha_j y_i y_j \mathbf{x}_i^\top \mathbf{x}_jαmaxi∑αi−21i,j∑αiαjyiyjxi⊤xj

s.t.0≤αi≤C,∑iαiyi=0\text{s.t.} \quad 0 \le \alpha_i \le C, \quad \sum_i \alpha_i y_i = 0s.t.0≤αi≤C,i∑αiyi=0

对偶解的含义

  • αi=0\alpha_i = 0αi=0:样本在间隔边界外(正确且远离),不影响 w\mathbf{w}w。
  • 0<αi<C0 < \alpha_i < C0<αi<C:由互补松弛 ξi=0\xi_i = 0ξi=0,样本恰好在间隔边界上(yif(xi)=1y_i f(\mathbf{x}_i) = 1yif(xi)=1),是支持向量。
  • αi=C\alpha_i = Cαi=C:此时 μi=0\mu_i = 0μi=0 对 ξi\xi_iξi 不再约束(仅 ξi≥0\xi_i \ge 0ξi≥0),样本是支持向量但不保证 在边界上------可能落在间隔内(0<ξi≤10 < \xi_i \le 10<ξi≤1)、被错分(ξi>1\xi_i > 1ξi>1),也可能恰好 ξi=0\xi_i = 0ξi=0 停在边界上。

最优 w\mathbf{w}w 写成支持向量的线性组合:w∗=∑αi>0αiyixi\mathbf{w}^* = \sum_{\alpha_i > 0} \alpha_i y_i \mathbf{x}_iw∗=∑αi>0αiyixi。

对偶带来的好处

  1. 稀疏性 :只有支持向量(αi>0\alpha_i > 0αi>0)的 xi\mathbf{x}_ixi 影响 w\mathbf{w}w;训练后丢弃非支持向量。
  2. 核化入口 :对偶问题只出现 xi⊤xj\mathbf{x}_i^\top \mathbf{x}_jxi⊤xj------可以替换为核函数 K(xi,xj)K(\mathbf{x}_i, \mathbf{x}_j)K(xi,xj) 而无需知道 ϕ(x)\phi(\mathbf{x})ϕ(x) 显式形式。这是核技巧的数学基础(§2.1)。
  3. 求解算法(SMO) :对偶是 QP,规模 N×NN \times NN×N,但有特殊结构(变量被约束 0≤αi≤C0 \le \alpha_i \le C0≤αi≤C 且 ∑αiyi=0\sum \alpha_i y_i = 0∑αiyi=0),可用高效分块优化(§1.4)。

KKT 条件(最优性判据)

对偶问题最优时,原问题与对偶问题都满足 KKT 条件:

  • αi≥0\alpha_i \ge 0αi≥0,αiyif(xi)−1+ξi=0\alpha_i y_i f(\\mathbf{x}_i) - 1 + \\xi_i = 0αiyif(xi)−1+ξi=0(互补松弛)
  • C−αi−μi=0C - \alpha_i - \mu_i = 0C−αi−μi=0
  • yif(xi)≥1−ξiy_i f(\mathbf{x}_i) \ge 1 - \xi_iyif(xi)≥1−ξi,ξi≥0\xi_i \ge 0ξi≥0

KKT 残差常用于判断 SMO 是否收敛。

稀疏性的代价

对偶的稀疏性使预测只依赖支持向量,但训练仍需访问全部样本(w\mathbf{w}w 不再显式存储但 K(xi,xj)K(\mathbf{x}_i, \mathbf{x}_j)K(xi,xj) 仍要算)。预测复杂度 O(∣SV∣⋅d)O(|SV| \cdot d)O(∣SV∣⋅d),∣SV∣|SV|∣SV∣ 远小于 NNN。

与原始问题的对比

维度 原始 对偶
变量 w,b,ξi\mathbf{w}, b, \xi_iw,b,ξi(d+1+Nd + 1 + Nd+1+N 维) αi\alpha_iαi(NNN 维)
约束 2N2N2N 个不等式 2N2N2N 个 box + 1 个等式
高维时 w\mathbf{w}w 维度大 α\alphaα 维度 = NNN(独立)
核化 不直接 xi⊤xj\mathbf{x}_i^\top \mathbf{x}_jxi⊤xj 可替换为 K(xi,xj)K(\mathbf{x}_i, \mathbf{x}_j)K(xi,xj)
稀疏性 无 αi=0\alpha_i = 0αi=0 大量

易错点

  • 忘记 ∑αiyi=0\sum \alpha_i y_i = 0∑αiyi=0:对偶问题的等式约束,常被 SMO 用来同时选两个变量配对更新。
  • 核函数正定性 :要让对偶 QP 有最优解,核矩阵 KKK 必须半正定。核矩阵非半正定时对偶问题失去凸性(一般非凸 QP,无全局最优保证)。常见核(RBF、poly 等)满足 Mercer 条件;sigmoid 核需校验。
  • 支持向量与训练样本的比例:在强过拟合时几乎所有样本都是支持向量,稀疏性消失。

1.4 SMO 求解

SMO(Sequential Minimal Optimization, Platt 1998)是 SVM 对偶问题的标准求解算法。

SMO 思想

每次只优化 2 个变量 (αi,αj\alpha_i, \alpha_jαi,αj),其它 αk\alpha_kαk 固定。固定后,∑kαkyk=0\sum_k \alpha_k y_k = 0∑kαkyk=0 给出两个变量间的线性关系,2 维子问题可解析求解。

为什么 2 个?

只优化 1 个变量时,∑αkyk=0\sum \alpha_k y_k = 0∑αkyk=0 与 αi\alpha_iαi 单变量更新矛盾(无法在约束下调整)。至少 2 个才能保持约束。所以 2 是"最小可行更新块"。

两步迭代

  1. 启发式选对 :选 αi,αj\alpha_i, \alpha_jαi,αj。常用启发式:
    • 外层循环 :遍历所有 αi\alpha_iαi(或违反 KKT 条件的 αi\alpha_iαi)。
    • 内层循环 :对每个 αi\alpha_iαi 选 αj\alpha_jαj 使 ∣Ei−Ej∣|E_i - E_j|∣Ei−Ej∣ 最大(Ei=f(xi)−yiE_i = f(\mathbf{x}_i) - y_iEi=f(xi)−yi 是当前预测误差),可让目标函数下降最快。
  2. 联合优化 :固定其它 αk\alpha_kαk,对 αi,αj\alpha_i, \alpha_jαi,αj 求最优。子问题:
    • 二次函数 aαi2+bαi+ca\alpha_i^2 + b\alpha_i + caαi2+bαi+c 在 box 约束 L≤αi≤HL \le \alpha_i \le HL≤αi≤H 上的最优解(裁剪到边界)。
    • αj\alpha_jαj 由 αi\alpha_iαi 与等式约束算出。

子问题解析

设选定的两个变量是 α1,α2\alpha_1, \alpha_2α1,α2,固定 α3,...,αN\alpha_3, \dots, \alpha_Nα3,...,αN。记 Kij=xi⊤xjK_{ij} = \mathbf{x}_i^\top \mathbf{x}jKij=xi⊤xj(核化时 Kij=K(xi,xj)K{ij} = K(\mathbf{x}_i, \mathbf{x}_j)Kij=K(xi,xj)),Ei=f(xi)−yiE_i = f(\mathbf{x}_i) - y_iEi=f(xi)−yi(其中 f(xi)=∑jαjyjKij+bf(\mathbf{x}i) = \sum_j \alpha_j y_j K{ij} + bf(xi)=∑jαjyjKij+b)。

无约束最优 α2new=α2+y2(E1−E2)/η\alpha_2^{\text{new}} = \alpha_2 + y_2 (E_1 - E_2) / \etaα2new=α2+y2(E1−E2)/η,其中 η=K11+K22−2K12\eta = K_{11} + K_{22} - 2K_{12}η=K11+K22−2K12(是 KKK 在这两个样本上的"曲率")。

裁剪到 L≤α2new≤HL \le \alpha_2^{\text{new}} \le HL≤α2new≤H(L,HL, HL,H 由 CCC 与 y1,y2y_1, y_2y1,y2 决定),再算 α1new=α1+y1y2(α2old−α2new)\alpha_1^{\text{new}} = \alpha_1 + y_1 y_2 (\alpha_2^{\text{old}} - \alpha_2^{\text{new}})α1new=α1+y1y2(α2old−α2new)。

收敛判据

KKT 残差 ≤ϵ\le \epsilon≤ϵ(如 10−310^{-3}10−3)且迭代次数达到上限。SVC(tol=1e-3, max_iter=-1) 控制。

实际性能

  • SMO 在中小数据集(N<104N < 10^4N<104)上极快。
  • N>104N > 10^4N>104 时 SMO 仍可工作但慢,工业上改用 LinearSVC(liblinear 对偶坐标下降)或 SGDClassifier(loss="hinge") 等线性/近似方案。

对线性核的简化

线性核时 Kij=xi⊤xjK_{ij} = \mathbf{x}_i^\top \mathbf{x}_jKij=xi⊤xj,可把 w\mathbf{w}w 显式存为稠密向量,跳过核矩阵计算 → 训练复杂度约 O(Nd)O(N d)O(Nd),预测 O(d)O(d)O(d),与对偶/原始无关。LinearSVC 用 liblinear 库实现此路径:默认 loss="squared_hinge",dual="auto"(sklearn ≥1.3 引入,≥1.5 默认)按 NNN 与 ddd 比例自动选 primal / dual 形式。SGDClassifier(loss="hinge") 是大规模场景下的 SGD 近似解。

易错点

  • 收敛后仍有 αi\alpha_iαi 在边界 :αi∈(0,C)\alpha_i \in (0, C)αi∈(0,C) 才是间隔边界上的支持向量;αi=0\alpha_i = 0αi=0 不影响 w\mathbf{w}w;αi=C\alpha_i = Cαi=C 是违反约束的样本。
  • max_iter 不够 :大数据 + 强 CCC 时可能不收敛,报 ConvergenceWarning。调大到 5000--10000。
  • tol 设过小:收敛到 1e-5 在百万样本上极慢;通常 1e-3 已足够。
  • 核矩阵大到内存放不下 :NNN 很大时 KKK 是 N×NN \times NN×N,可能 OOM;用 LinearSVC 或核近似(§2.2)。

二、核方法

2.1 核技巧

核心思想

对偶 SVM 中 xi⊤xj\mathbf{x}_i^\top \mathbf{x}_jxi⊤xj 可替换为 K(xi,xj)K(\mathbf{x}_i, \mathbf{x}_j)K(xi,xj)------只要 KKK 是正定核 (Mercer 核),就等价于"在某个高维空间 H\mathcal{H}H 中做内积"。

  • 显式映射 :ϕ:Rd→H\phi: \mathbb{R}^d \to \mathcal{H}ϕ:Rd→H,K(xi,xj)=⟨ϕ(xi),ϕ(xj)⟩HK(\mathbf{x}_i, \mathbf{x}_j) = \langle \phi(\mathbf{x}_i), \phi(\mathbf{x}j) \rangle{\mathcal{H}}K(xi,xj)=⟨ϕ(xi),ϕ(xj)⟩H。
  • 隐式映射 :不需要显式知道 ϕ\phiϕ,只关心 KKK。当 H\mathcal{H}H 维数极高甚至无穷维时,避免显式映射的代价。

为什么能解决非线性问题

原始空间不可分的数据,在高维特征空间中可能线性可分。例如:ϕ(x1,x2)=(x12,2x1x2,x22)\phi(x_1, x_2) = (x_1^2, \sqrt{2} x_1 x_2, x_2^2)ϕ(x1,x2)=(x12,2 x1x2,x22) 把平面二次曲线映射到三维空间的内积------对偶 SVM 用 K(x,z)=(x⊤z)2K(\mathbf{x}, \mathbf{z}) = (\mathbf{x}^\top \mathbf{z})^2K(x,z)=(x⊤z)2 即等价于在那个三维空间做线性 SVM。

示例:二次多项式核的手算验证

取 x=(1,2)\mathbf{x} = (1, 2)x=(1,2),z=(3,4)\mathbf{z} = (3, 4)z=(3,4):

  • 核侧:K(x,z)=(x⊤z)2=(1×3+2×4)2=112=121K(\mathbf{x}, \mathbf{z}) = (\mathbf{x}^\top \mathbf{z})^2 = (1 \times 3 + 2 \times 4)^2 = 11^2 = 121K(x,z)=(x⊤z)2=(1×3+2×4)2=112=121。
  • 映射侧:ϕ(x)=(1,22,4)\phi(\mathbf{x}) = (1, 2\sqrt{2}, 4)ϕ(x)=(1,22 ,4),ϕ(z)=(9,122,16)\phi(\mathbf{z}) = (9, 12\sqrt{2}, 16)ϕ(z)=(9,122 ,16),内积 =9+(22)(122)+64=9+48+64=121= 9 + (2\sqrt{2})(12\sqrt{2}) + 64 = 9 + 48 + 64 = 121=9+(22 )(122 )+64=9+48+64=121。

两条路径结果一致------核函数"偷偷"完成了高维内积,且代价只有一次 ddd 维点积加平方。维度更高时差距更悬殊(见下文"多项式核的复杂度")。

Mercer 条件(正定核)

KKK 是正定核当且仅当对任意 NNN 个点,KKK 矩阵(Gram 矩阵)是半正定:

Kij=K(xi,xj),∀v∈RN, v⊤Kv≥0K_{ij} = K(\mathbf{x}_i, \mathbf{x}_j), \quad \forall \mathbf{v} \in \mathbb{R}^N,\ \mathbf{v}^\top K \mathbf{v} \ge 0Kij=K(xi,xj),∀v∈RN, v⊤Kv≥0

  • 这等价于存在某个 H\mathcal{H}H 中的 ϕ\phiϕ 使 K(x,z)=⟨ϕ(x),ϕ(z)⟩K(\mathbf{x}, \mathbf{z}) = \langle \phi(\mathbf{x}), \phi(\mathbf{z}) \rangleK(x,z)=⟨ϕ(x),ϕ(z)⟩。
  • Mercer 条件是充分必要的,验证方法:检查 Gram 矩阵是否半正定。
  • 违反 Mercer 条件(核矩阵非半正定)→ 对偶 QP 失去凸性 → 算法可能不收敛或解无意义。

常用核函数

核 公式 含义
线性核 K(x,z)=x⊤zK(\mathbf{x}, \mathbf{z}) = \mathbf{x}^\top \mathbf{z}K(x,z)=x⊤z 不做升维(等价于线性 SVM)
多项式核 K(x,z)=(γx⊤z+c)dK(\mathbf{x}, \mathbf{z}) = (\gamma \mathbf{x}^\top \mathbf{z} + c)^dK(x,z)=(γx⊤z+c)d ddd 次多项式特征映射(c=0c=0c=0 时齐次)
RBF(高斯)核 $K(\mathbf{x}, \mathbf{z}) = \exp(-\gamma \mathbf{x} - \mathbf{z}
Sigmoid 核 K(x,z)=tanh⁡(γx⊤z+c)K(\mathbf{x}, \mathbf{z}) = \tanh(\gamma \mathbf{x}^\top \mathbf{z} + c)K(x,z)=tanh(γx⊤z+c) 仅在某些参数下正定,需校验
χ2\chi^2χ2 核 K(x,z)=exp⁡(−γ∑i(xi−zi)2/(xi+zi))K(\mathbf{x}, \mathbf{z}) = \exp(-\gamma \sum_i (x_i - z_i)^2 / (x_i + z_i))K(x,z)=exp(−γ∑i(xi−zi)2/(xi+zi)) 直方图、图像特征常用

RBF 核的细节

K(x,z)=exp⁡(−γ∣x−z∣22)K(\mathbf{x}, \mathbf{z}) = \exp(-\gamma |\mathbf{x} - \mathbf{z}|_2^2)K(x,z)=exp(−γ∣x−z∣22)

  • γ>0\gamma > 0γ>0 是带宽参数。γ\gammaγ 越大 → 核衰减越快 → 局部性强 → 易过拟合。
  • 等价于无穷维特征空间中的内积(泰勒展开对应无穷多项),可拟合任意复杂决策边界。
  • 是 sklearn SVC 的默认核。

多项式核的复杂度

非齐次多项式核 K(x,z)=(γx⊤z+c)dK(\mathbf{x}, \mathbf{z}) = (\gamma \mathbf{x}^\top \mathbf{z} + c)^dK(x,z)=(γx⊤z+c)d(c>0c > 0c>0)等价于 (d+d′d)\binom{d + d'}{d}(dd+d′) 维特征空间(d′d'd′ 是原始维度);齐次核 (x⊤z)d(\mathbf{x}^\top \mathbf{z})^d(x⊤z)d 对应 (d+d′−1d)\binom{d + d' - 1}{d}(dd+d′−1) 维。d=2,d′=100d = 2, d' = 100d=2,d′=100 时非齐次已是 ~5000 维。显式映射不可行,核技巧是唯一实用办法。

特征空间视角的边界

SVM 在核空间 H\mathcal{H}H 学得线性超平面 f(x)=w⊤ϕ(x)+b=0f(\mathbf{x}) = \mathbf{w}^\top \phi(\mathbf{x}) + b = 0f(x)=w⊤ϕ(x)+b=0,在原空间是非线性曲面(圆、椭圆、高阶多项式等)。这就是 SVM 处理非线性问题的本质。

核函数的选择

经验性原则:

  • 先试 RBF :通用性强,参数少(γ\gammaγ)。
  • 特征数 >> 样本数:用线性核(避免 RBF 的过拟合与高计算成本)。
  • 样本数 >> 特征数:RBF 效果通常更好。
  • 领域知识 :图像/文本用 χ2\chi^2χ2、字符串用字符串核、图用 graph kernel。

自定义核

python 复制代码
def my_kernel(X, Y):
    # X: (n1, d), Y: (n2, d),返回 (n1, n2) Gram 矩阵
    return X @ Y.T  # 线性核示例

clf = SVC(kernel=my_kernel).fit(X_train, y_train)

核技巧的局限

  • 计算成本 :预测时仍需算 K(x,xi)K(\mathbf{x}, \mathbf{x}_i)K(x,xi) 对每个支持向量;∣SV∣×d|SV| \times d∣SV∣×d 的复杂度。
  • 核矩阵内存 :对偶 QP 在 KKK 上求解,NNN 大时 O(N2)O(N^2)O(N2) 内存。
  • 可解释性 :核空间高维或无穷维,ϕ(x)\phi(\mathbf{x})ϕ(x) 不可解释。
  • 核选择依赖经验:理论上"通用核"存在但难构造。

易错点

  • 忘记先 StandardScaler :核值受量级影响大;RBF 核 γ=1\gamma = 1γ=1 在 0--1 数据上与在 0--1000 数据上效果截然不同。
  • gamma 与 C 联动 :gamma 控局部性,C 控严格性,两者常需一起调。
  • 核非正定:自定义核必须验证 Gram 矩阵半正定。
  • RBF 在高维稀疏数据上失效 :RBF 的 exp⁡(−γ∣x−z∣2)\exp(-\gamma |\mathbf{x} - \mathbf{z}|^2)exp(−γ∣x−z∣2) 依赖样本间的欧氏距离;在高维稀疏向量上,所有样本间的距离集中在一个较窄的区间(curse of dimensionality),核矩阵各元素趋于相同值,模型失去区分度,RBF 失效。

2.2 核函数选择

线性核

K(x,z)=x⊤zK(\mathbf{x}, \mathbf{z}) = \mathbf{x}^\top \mathbf{z}K(x,z)=x⊤z

  • 不做升维,等价于线性 SVM。
  • 适用:高维稀疏数据(文本 TF-IDF)、特征数 >> 样本数。
  • 优势:可解释、训练极快(LinearSVC)、可扩展到百万级样本。
  • 限制:只能学线性决策边界。

多项式核

K(x,z)=(γx⊤z+c)dK(\mathbf{x}, \mathbf{z}) = (\gamma \mathbf{x}^\top \mathbf{z} + c)^dK(x,z)=(γx⊤z+c)d

  • γ\gammaγ:缩放系数(>0);ccc:常数项;ddd:多项式阶数。
  • d=2d = 2d=2:椭圆/抛物线决策边界。
  • d=3d = 3d=3:三次曲线。
  • 经验:ddd 通常取 2 或 3,再大易数值不稳定(γx⊤z\gamma \mathbf{x}^\top \mathbf{z}γx⊤z 很大时 γd\gamma^dγd 指数增长)。

RBF(径向基函数 / 高斯)核

K(x,z)=exp⁡(−γ∣x−z∣22)K(\mathbf{x}, \mathbf{z}) = \exp(-\gamma |\mathbf{x} - \mathbf{z}|_2^2)K(x,z)=exp(−γ∣x−z∣22)

  • 最常用,对多数数据效果好。
  • γ\gammaγ 的"经验法则":
    • gamma="scale"(sklearn 默认)= 1/(d⋅Var(X))1 / (d \cdot \text{Var}(X))1/(d⋅Var(X))
    • gamma="auto" = 1/d1 / d1/d
    • 手动扫描:γ∈{0.001,0.01,0.1,1,10,100}\gamma \in \{0.001, 0.01, 0.1, 1, 10, 100\}γ∈{0.001,0.01,0.1,1,10,100}
  • γ\gammaγ 越大 → 单个样本影响范围越小 → 模型越复杂。

Sigmoid 核

K(x,z)=tanh⁡(γx⊤z+c)K(\mathbf{x}, \mathbf{z}) = \tanh(\gamma \mathbf{x}^\top \mathbf{z} + c)K(x,z)=tanh(γx⊤z+c)

  • 与神经网络激活函数形式相似。
  • 非 Mercer 核 (仅在某些 γ,c\gamma, cγ,c 组合下半正定)。工程上用时必须验证。
  • 实践上很少用,效果不如 RBF。

χ2\chi^2χ2 核

K(x,z)=exp⁡(−γ∑i(xi−zi)2xi+zi)K(\mathbf{x}, \mathbf{z}) = \exp\left(-\gamma \sum_i \frac{(x_i - z_i)^2}{x_i + z_i}\right)K(x,z)=exp(−γi∑xi+zi(xi−zi)2)

  • 直方图(图像特征、词频)上常用。
  • 加权欧氏距离,照顾计数/频率型特征的尺度。

字符串核 / 图核

  • 字符串子序列核:文本中公共子串的数量加权。
  • 图核:图的子图同构计数。
  • 领域专用核。

多个核的组合

  • 多核学习(MKL) :学习多个核的加权和,∑mβmKm\sum_m \beta_m K_m∑mβmKm,βm≥0\beta_m \ge 0βm≥0。
  • 直和 :K=K1⊕K2K = K_1 \oplus K_2K=K1⊕K2(特征拼接)。
  • 直积 :K=K1⊗K2K = K_1 \otimes K_2K=K1⊗K2(特征张量积)。

核选择流程
#mermaid-svg-s18nHeLKeSq3Lumh{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-s18nHeLKeSq3Lumh .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-s18nHeLKeSq3Lumh .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-s18nHeLKeSq3Lumh .error-icon{fill:#552222;}#mermaid-svg-s18nHeLKeSq3Lumh .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-s18nHeLKeSq3Lumh .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-s18nHeLKeSq3Lumh .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-s18nHeLKeSq3Lumh .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-s18nHeLKeSq3Lumh .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-s18nHeLKeSq3Lumh .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-s18nHeLKeSq3Lumh .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-s18nHeLKeSq3Lumh .marker{fill:#333333;stroke:#333333;}#mermaid-svg-s18nHeLKeSq3Lumh .marker.cross{stroke:#333333;}#mermaid-svg-s18nHeLKeSq3Lumh svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-s18nHeLKeSq3Lumh p{margin:0;}#mermaid-svg-s18nHeLKeSq3Lumh .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-s18nHeLKeSq3Lumh .cluster-label text{fill:#333;}#mermaid-svg-s18nHeLKeSq3Lumh .cluster-label span{color:#333;}#mermaid-svg-s18nHeLKeSq3Lumh .cluster-label span p{background-color:transparent;}#mermaid-svg-s18nHeLKeSq3Lumh .label text,#mermaid-svg-s18nHeLKeSq3Lumh span{fill:#333;color:#333;}#mermaid-svg-s18nHeLKeSq3Lumh .node rect,#mermaid-svg-s18nHeLKeSq3Lumh .node circle,#mermaid-svg-s18nHeLKeSq3Lumh .node ellipse,#mermaid-svg-s18nHeLKeSq3Lumh .node polygon,#mermaid-svg-s18nHeLKeSq3Lumh .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-s18nHeLKeSq3Lumh .rough-node .label text,#mermaid-svg-s18nHeLKeSq3Lumh .node .label text,#mermaid-svg-s18nHeLKeSq3Lumh .image-shape .label,#mermaid-svg-s18nHeLKeSq3Lumh .icon-shape .label{text-anchor:middle;}#mermaid-svg-s18nHeLKeSq3Lumh .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-s18nHeLKeSq3Lumh .rough-node .label,#mermaid-svg-s18nHeLKeSq3Lumh .node .label,#mermaid-svg-s18nHeLKeSq3Lumh .image-shape .label,#mermaid-svg-s18nHeLKeSq3Lumh .icon-shape .label{text-align:center;}#mermaid-svg-s18nHeLKeSq3Lumh .node.clickable{cursor:pointer;}#mermaid-svg-s18nHeLKeSq3Lumh .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-s18nHeLKeSq3Lumh .arrowheadPath{fill:#333333;}#mermaid-svg-s18nHeLKeSq3Lumh .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-s18nHeLKeSq3Lumh .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-s18nHeLKeSq3Lumh .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-s18nHeLKeSq3Lumh .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-s18nHeLKeSq3Lumh .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-s18nHeLKeSq3Lumh .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-s18nHeLKeSq3Lumh .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-s18nHeLKeSq3Lumh .cluster text{fill:#333;}#mermaid-svg-s18nHeLKeSq3Lumh .cluster span{color:#333;}#mermaid-svg-s18nHeLKeSq3Lumh div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-s18nHeLKeSq3Lumh .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-s18nHeLKeSq3Lumh rect.text{fill:none;stroke-width:0;}#mermaid-svg-s18nHeLKeSq3Lumh .icon-shape,#mermaid-svg-s18nHeLKeSq3Lumh .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-s18nHeLKeSq3Lumh .icon-shape p,#mermaid-svg-s18nHeLKeSq3Lumh .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-s18nHeLKeSq3Lumh .icon-shape .label rect,#mermaid-svg-s18nHeLKeSq3Lumh .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-s18nHeLKeSq3Lumh .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-s18nHeLKeSq3Lumh .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-s18nHeLKeSq3Lumh :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} d >> N
d ≈ N
d << N
N < 10^4
N >= 10^4
欠拟合
过拟合
开始
特征维度
线性核
线性核或 RBF
样本数
RBF 调参
线性核 or 核近似
gamma 网格扫描
效果
增大 gamma 或增大 C 或换 poly 核
减小 gamma 或减小 C

核近似(Nyström / Random Fourier Features)

当 NNN 太大核矩阵放不下时,用低秩近似:

  • Nyström 方法 :从 NNN 个样本中抽 m≪Nm \ll Nm≪N 个基点 ,构造 K~=KN,mKm−1KN,m⊤\tilde K = K_{N, m} K_m^{-1} K_{N, m}^\topK~=KN,mKm−1KN,m⊤。
  • Random Fourier Features (RFF) :基于 Bochner 定理,对平移不变核 K(x,z)=K(x−z)K(\mathbf{x}, \mathbf{z}) = K(\mathbf{x} - \mathbf{z})K(x,z)=K(x−z),有
    K(x,z)=Eω∼p(ω)2cos⁡(ω⊤x+b)2cos⁡(ω⊤z+b)K(\mathbf{x}, \mathbf{z}) = \mathbb{E}_{\omega \sim p(\omega)} \\sqrt{2} \\cos(\\omega\^\\top \\mathbf{x} + b)\\sqrt{2} \\cos(\\omega\^\\top \\mathbf{z} + b)K(x,z)=Eω∼p(ω)2 cos(ω⊤x+b)2 cos(ω⊤z+b)
    采 DDD 个 ω\omegaω 得到显式 ϕ~(x)∈RD\tilde\phi(\mathbf{x}) \in \mathbb{R}^Dϕ~(x)∈RD。sklearn 的 kernel_approximation.Nystroem(自 0.13)与 RBFSampler(自 0.18)长期提供。

核选择的工程原则

  1. 数据量小时 :用 RBF,γ\gammaγ 与 CCC 一起网格搜索。
  2. 数据量大时:用线性核或近似核。
  3. 先验知识强时:用领域核(如文本 → 字符串/线性核、图 → graph kernel)。
  4. 交叉验证选超参 :γ\gammaγ、CCC、核参数(多项式 ddd、RBF γ\gammaγ)一起用 GridSearchCV 或 RandomizedSearchCV。

scikit-learn 用例

python 复制代码
from sklearn.svm import SVC
from sklearn.model_selection import GridSearchCV

param_grid = {
    "C": [0.1, 1, 10],
    "gamma": [0.001, 0.01, 0.1, 1, 10],
}
grid = GridSearchCV(SVC(kernel="rbf"), param_grid, cv=5, scoring="accuracy")
grid.fit(X_train, y_train)
print(grid.best_params_, grid.best_score_)

易错点

  • gamma 越调越大 会出现"训练 100%、测试 50%"------过拟合。γ\gammaγ 太大时每个样本只影响自身附近的预测,决策边界高度扭曲。
  • 同时调 C 与 gamma:用网格搜索而非手动;两者常需同时调整。
  • 类别不平衡 + RBF :默认 class_weight=None 时模型偏向多数类;用 class_weight="balanced" 调整。
  • 核选择不交叉验证 :直接用默认 RBF + 默认 γ\gammaγ 在新数据上常常不是最优;至少做一次粗网格。
  • 核与数据不匹配:文本/稀疏高维 → RBF 几乎无效(理由见 §2.1),应改线性核。

2.3 SVR(支持向量回归)

SVM 的回归版本。核心变化:不再要求预测逐点贴合 yyy,而是容忍 ±ϵ\pm\epsilon±ϵ 的偏差------只有落在 ϵ\epsilonϵ-管道之外的样本才产生损失:

min⁡w,b 12∣w∣22+C∑i(ξi+ξi∗)s.t. {yi−w⊤xi−b≤ϵ+ξiw⊤xi+b−yi≤ϵ+ξi∗ξi,ξi∗≥0\min_{\mathbf{w}, b} \ \frac{1}{2}|\mathbf{w}|_2^2 + C \sum_i (\xi_i + \xi_i^*) \quad \text{s.t.} \ \begin{cases} y_i - \mathbf{w}^\top\mathbf{x}_i - b \le \epsilon + \xi_i \\ \mathbf{w}^\top\mathbf{x}_i + b - y_i \le \epsilon + \xi_i^* \\ \xi_i, \xi_i^* \ge 0 \end{cases}w,bmin 21∣w∣22+Ci∑(ξi+ξi∗)s.t. ⎩ ⎨ ⎧yi−w⊤xi−b≤ϵ+ξiw⊤xi+b−yi≤ϵ+ξi∗ξi,ξi∗≥0

  • ε-不敏感损失 :Lϵ(y,f)=max⁡(0, ∣y−f(x)∣−ϵ)L_\epsilon(y, f) = \max(0, \ |y - f(\mathbf{x})| - \epsilon)Lϵ(y,f)=max(0, ∣y−f(x)∣−ϵ)。残差在 −ϵ,ϵ-\\epsilon, \\epsilon−ϵ,ϵ 内损失严格为 0。
  • 管道之外(或恰在管道边界上)的样本才是支持向量 → 解依然稀疏,这是 SVR 与普通最小二乘的本质区别。
  • ϵ\epsilonϵ 越大 → 管道越宽 → 支持向量越少、模型越平滑;ϵ→0\epsilon \to 0ϵ→0 退化为对所有样本敏感。
  • 对偶形式与分类 SVM 同构(内积换成核)→ 核化 SVR 可拟合非线性回归,几何直觉是"在特征空间里用一条宽管道去套数据"。
  • 超参:CCC(管道外惩罚)、ϵ\epsilonϵ(管道宽度)、核参数(RBF 的 γ\gammaγ)。经验:先标准化特征;ϵ\epsilonϵ 从 yyy 标准差的 5%--10% 起步。
python 复制代码
from sklearn.svm import SVR
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler

reg = make_pipeline(
    StandardScaler(),
    SVR(kernel="rbf", C=1.0, epsilon=0.1, gamma="scale"),
)
reg.fit(X_train, y_train)

与第四章线性回归的对比:线性 SVR ≈ 用 ε-不敏感损失的线性回归(只惩罚管道外误差),最小二乘则对所有样本的平方误差都敏感。样本量大、或需要概率/分位数输出时,线性模型 / 树模型 / GBDT 通常是更省心的选择;SVR 的优势在中等规模、非线性、希望解稀疏的场景。

相关推荐
?abc!2 小时前
(数组)448. 找到所有数组中消失的数字
算法
淡海水2 小时前
05-03-源码-Boehm GC分配与碎片管理
开发语言·算法·unity·c#·游戏引擎·gc
青少儿编程课堂2 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C/C++考级:任意进制互转与大数多进制加法解析
c++·python·算法·bfs·信息学竞赛
多弗朗皮卡丘2 小时前
C++ 哈希(下)
c++·算法·哈希算法
有为少年2 小时前
容器内存显示 100%、进程莫名被 Killed 解决方案
机器学习·容器·模型训练·模型推理
硅谷秋水2 小时前
DynaHarness 方法总结
人工智能·机器学习·语言模型·机器人
aichitang20242 小时前
Meta Muse Spark Open:816B 巨型开放权重多模态 Agent 模型架构、部署实战与社区首测全解
大数据·人工智能·python·算法·ai·架构·spark
lucas_AI3 小时前
Muon 到底什么时候赢?等 token 全胜、等时间翻车:换优化器前先算的三本账
机器学习
Coder-magician3 小时前
图论总结篇
算法·图论