Skip to content

WARNING

🧪 Beta公测版本提示:教程主体已完成,正在优化细节,欢迎大家提Issue反馈问题或建议。

ml14 核方法与高斯过程 — exercise.py 练习指南

Download exercise.py

练习目标

通过实现 RBF 核函数、GP 回归的预测均值和方差、以及 GP 先验采样,从代码层面深入理解核方法和 GP 的数学原理。

预备知识

  • RBF 核:k(x,x)=σ2exp(xx2/22)
  • Cholesky 分解:K=LLT,用于数值稳定解线性方程组
  • GP 预测均值:f¯=kT(K+σn2I)1y
  • GP 预测方差:Var(f)=k(x,x)kT(K+σn2I)1k
  • GP 先验采样:f=LzzN(0,I)

任务清单

任务1:RBF 核函数 rbf_kernel_manual(X1, X2, lengthscale, variance)

  • 平方欧氏距离xy2=x2+y22xTy
  • 向量化实现:利用广播展开三个矩阵((n1,1)(1,n2)(n1,n2)
  • 验证k(x,x)=σ2(距离 0,核值 = 方差);k(0,1)=σ2exp(0.5)

任务2:GP 预测均值 gp_predict_mean(X_train, y_train, X_test, kernel_fn, noise_var)

  • 关键步骤
    1. 计算 K=k(X,X)(N,N) 矩阵)
    2. Cholesky 分解 K+σn2I=LLT
    3. α=LTL1y(两次三角求解)
    4. 计算 k=k(X,X)(M,N) 矩阵)
    5. 预测 f¯=kα
  • 为什么用 Cholesky 而非直接求逆?
    • 更稳定:Cholesky 是专门针对对称正定矩阵设计的高效分解
    • 更快:O(N3/6) vs O(N3)

任务3:GP 预测方差 gp_predict_variance(X_train, X_test, kernel_fn, L, noise_var)

  • 方差公式:对每个测试点 i
    • v=L1k(解三角方程)
    • Vari=k(xi,xi)v2
  • 不确定性行为:训练数据附近 → v2 大 → 方差小;远离数据 → v2 小 → 方差大

任务4:GP 先验采样 sample_gp_prior(X, kernel_fn, n_samples)

  • 采样方法f=LzK=LLT
  • 直观理解L 本质上是对核矩阵进行"平方根"分解,然后通过 Lz 将独立高斯噪声 z 转换为具有 K 协方差结构的函数值

源码位置

clone 后打开(相对仓库根目录):

docs/ml/advanced/kernel-gp/code/exercise.py