从零实现高斯过程回归Gaussian-Process-Regression-Tutorial核心代码逐行解析附Cholesky分解与后验采样【免费下载链接】Gaussian-Process-Regression-TutorialAn Intuitive Tutorial to Gaussian Processes Regression项目地址: https://gitcode.com/gh_mirrors/ga/Gaussian-Process-Regression-Tutorial高斯过程回归Gaussian Process RegressionGPR是机器学习中少数既能给出预测值、又能给出不确定性区间的非参数回归方法。开源项目Gaussian-Process-Regression-Tutorial用一个 Jupyter Notebookgpr_tutorial.ipynb带你从高斯分布、核函数讲起最终用不到 30 行核心代码实现完整的高斯过程回归并手把手解析其中的 Cholesky 分解与后验采样技巧。本文就跟随这个教程逐行拆解核心代码让你真正理解高斯过程回归的原理与实现。什么是高斯过程回归为什么预测还要带不确定性回归任务可以简单描述为给定一批观测数据点找到一条尽可能贴合这些数据的函数曲线并用它在新数据点上做预测。但传统回归方法只给一个答案无法回答这个答案有多可靠。如下图所示同样的观测点可以拟合出无数条合理的函数曲线高斯过程回归的优雅之处在于它把函数本身当作随机变量给出的是一个关于函数的概率分布。预测时不仅输出均值作为预测曲线还输出方差作为置信区间不确定性大的区域会自然暴露出来——这正是贝叶斯优化、主动学习等领域极其看重的特性。如果你还没接触过这个项目可以这样获取完整教程git clone https://gitcode.com/gh_mirrors/ga/Gaussian-Process-Regression-Tutorial高斯过程回归的核心思想从多元高斯到函数的分布理解高斯过程回归需要抓住一条主线先建立函数集合上的先验分布再根据观测数据更新为后验分布。多元高斯分布与条件分布 教程从一维高斯分布讲起逐步推广到多元高斯分布MVN。多元高斯的关键是协方差矩阵——它刻画了不同变量之间的相关性。而高斯过程回归用到的核心数学工具正是多元高斯的条件分布已知一部分变量的值推断另一部分变量的分布。下图展示了二维高斯在切一刀之后得到的条件分布依然是一个高斯核函数塑造先验函数的形状把每个输入点上的函数值看成多维高斯的一个维度函数就变成了一个无限维的高斯样本。为了让采样出来的函数平滑合理输入相近的点函数值也应该相近需要用核函数协方差函数来定义点与点之间的相关性。教程中使用的正是最经典的平方指数核RBF/高斯核def kernel(a, b): kernelParameter_l 0.1 # 长度尺度超参数 kernelParameter_sigma 1.0 # 信号方差超参数 sqdist np.sum(a**2,axis1).reshape(-1,1) np.sum(b**2,1) - 2*np.dot(a, b.T) return kernelParameter_sigma*np.exp(-.5 * (1/kernelParameter_l) * sqdist)sqdist一行利用广播技巧一次性算出所有点对之间的平方距离矩阵再用高斯核函数将其转换为协方差矩阵。从高斯过程先验中采样出来的函数曲线平滑自然高斯过程回归核心代码逐行解析从数据到预测教程第四部分gpr_tutorial.ipynb的 Simple Implementation Example 章节给出了完整实现。我们把它拆成四步来看。第一步构造真实函数与带噪观测数据 f lambda x: np.sin(0.9*x).flatten() # 我们试图逼近的未知真实函数 N, n, s 20, 200, 0.00005 # 20个观测点200个测试点噪声方差 X np.random.uniform(-5, 5, size(N,1)) # 在[-5,5]均匀采样观测点 y f(X) s*np.random.randn(N) # 观测值 真值 高斯噪声注意s很小0.00005意味着观测数据几乎无噪声后验函数会精确穿过所有观测点。第二步Cholesky 分解——数值稳定的关键 ⚙️K kernel(X, X) # 观测点之间的协方差矩阵 L np.linalg.cholesky(K s*np.eye(N)) # Cholesky 分解K σ²I L·Lᵀ这是全教程最值得琢磨的一行。求解高斯过程需要反复计算K的逆与行列式直接求逆数值上不稳定且低效。Cholesky 分解把对称正定矩阵分解成下三角矩阵L与其转置的乘积之后所有线性方程求解都变成高效稳定的三角回代。为什么加s*np.eye(N)一方面把观测噪声融入协方差另一方面给矩阵对角线加上微小扰动确保其正定性避免分解失败。第三步计算后验均值与后验方差 Lk np.linalg.solve(L, kernel(X, Xtest)) # v : L \ k*先解一个三角方程组 mu np.dot(Lk.T, np.linalg.solve(L, y)) # 后验均值alpha L \ ymu k*ᵀ·alpha K_ kernel(Xtest, Xtest) # 测试点自身的协方差 s2 np.diag(K_) - np.sum(Lk**2, axis0) # 后验方差k** - vᵀ·v s np.sqrt(s2) # 标准差np.linalg.solve利用前面分解出的三角矩阵L用两次回代forward/back substitution高效求解线性系统全程没有显式计算矩阵逆。后验方差公式中np.sum(Lk**2, axis0)是vᵀv的逐元素实现从先验方差中扣掉观测数据带来的信息增益后得到的就是预测点上的不确定性。绘制出来就是这样一张经典的预测均值 2倍标准差置信带图黑色十字是观测点曲线精确穿过它们远离观测点的区域置信带变宽直观地反映了不确定性的增长。第四步后验采样——画出可能的函数 有了后验分布还可以直接从其中采样可能的函数L np.linalg.cholesky(K_ 1e-6*np.eye(n) - np.dot(Lk.T, Lk)) f_post mu.reshape(-1,1) np.dot(L, np.random.normal(size(n,40))) # 采样40条函数这里再次使用 Cholesky 分解后验协方差矩阵为K_ - vᵀv同样加了1e-6小扰动保证正定分解出L后把标准正态随机向量左乘L并加上均值mu就得到了符合后验分布的函数样本。生成随机样本的方法先生成不相关样本再乘以协方差的 Cholesky 因子正是教程此前铺垫的技巧可以看到40 条采样曲线在观测点处全部收敛到同一位置因为噪声极小而在观测点之间则呈现丰富的不确定性——这正是高斯过程回归后验采样的直观体现。算法对照教科书伪代码与代码实现一一对应 教程中还贴出了两个经典版本的算法伪代码方便你把代码和公式对上号两版算法结构完全一致都是四步Cholesky 分解 → 求解 alpha → 计算预测均值 → 计算预测方差。你在上面看到的每行代码都能在伪代码中找到对应位置。RBF 核的超参数l 与 σ 如何影响函数形状真正使用高斯过程回归时核函数的超参数至关重要。RBF 核有两个超参数长度尺度l和信号方差σ_f。l控制函数的平滑程度l越小函数越剧烈抖动l越大函数越平缓。σ_f控制函数值的整体波动幅度。下图直观展示了不同超参数下核函数与置信区间的差异在实际应用中超参数通常通过最大化对数边缘似然Maximum Likelihood Estimate自动学习而不是手工指定。教程也提到更进阶的场景可以选用 GPyTorch、GPflow 等框架但在动手调包之前先把这份核心实现吃透你会对高斯过程回归有本质的理解。总结一条从入门到掌握的路径 ✅Gaussian-Process-Regression-Tutorial 的编排非常符合认知规律一维高斯 → 多元高斯 → 条件分布 → 核函数 → 先验采样 → 后验预测 → 后验采样环环相扣。你只需要一个 Notebookgpr_tutorial.ipynb和 NumPy就能完成一次完整的高斯过程回归实现。回顾本文拆解的核心代码真正需要记住的就三件事Cholesky 分解是把高斯过程回归落到实处的高效稳定手段所有求解都基于三角回代后验均值 方差构成了预测的完整答案均值给曲线方差给置信区间后验采样让你直接看到函数的分布验证模型行为是否合理。动手跑一遍gpr_tutorial.ipynb再回头对照本文的逐行解析你就能自信地回答高斯过程回归到底是什么、代码是怎么写的、为什么它能给出不确定性。【免费下载链接】Gaussian-Process-Regression-TutorialAn Intuitive Tutorial to Gaussian Processes Regression项目地址: https://gitcode.com/gh_mirrors/ga/Gaussian-Process-Regression-Tutorial创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考