资讯详情

numpy-ml 高斯过程回归指南:GPRegression 完整实现、预测与采样原理

📅 2026/9/21 1:42:47 | 华诺云谱 👁 阅读
numpy-ml 高斯过程回归指南:GPRegression 完整实现、预测与采样原理
机器学习人工智能【免费下载链接】numpy-mlMachine learning, in numpy项目地址https://gitcode.com/gh_mirrors/nu/numpy-ml点击查看免费下载高斯过程回归Gaussian Process RegressionGPR是一种非参数贝叶斯回归方法它通过在函数空间上定义先验分布并借助高斯似然的共轭性得到闭式解析的后验分布。本文以 numpy-ml 仓库的GPRegression类docs/numpy_ml.nonparametric.gp.rst为核心完整讲解其数学模型、构造参数、fit/predict/marginal_log_likelihood/sample四个核心方法的底层实现并结合 numpy_ml/nonparametric/gp.py 与 numpy_ml/utils/kernels.py 的源码给出可直接运行的实战示例。读完本文你将能够独立使用该仓库完成 GP 回归建模、置信区间估计、边际似然计算与函数采样并理解其与 scikit-learnGaussianProcessRegressor等价性的验证方式。一、高斯过程回归的数学基础1.1 高斯过程函数空间上的先验高斯过程定义了一个关于函数f: X → ℝ的先验分布其中X可以是任意有限维甚至无限维集合。设f(x_k)是函数f在点x_k ∈ X处取值的随机变量对任意有限点集{x_1, …, x_N} ⊂ X定义随机向量z [f(x_1), …, f(x_N)]若f服从高斯过程则有z ~ (μ, K)其中μᵢ mean(xᵢ) Kᵢⱼ kernel(xᵢ, xⱼ)mean为均值函数——在 GP 回归中通常取mean(x) 0kernel为核函数协方差函数它决定了先验p(f)的整体形状。上述推导可见于 docs/numpy_ml.nonparametric.rst 的 Gaussian Process Regression 一节。1.2 回归模型与后验的闭式解在 GP 回归又称简单克里金Simple Kriging中高斯过程被用作函数的先验并与线性模型的高斯似然通过贝叶斯规则结合得到关于函数f的后验y | X, f ~ ([f(x₁), …, f(xₙ)], αI) f | X ~ GP(0, K)其中Kᵢⱼ kernel(xᵢ, xⱼ)。由于高斯过程先验与回归模型的高斯似然共轭后验同样是高斯分布且可写成闭式形式。这正是 numpy_ml/nonparametric/gp.py 中GPRegression类所实现的模型y在给定X与f时以[f(x₁),…,f(xₙ)]为均值、αI为协方差而f先验为均值为 0、协方差为K的高斯过程。二、GPRegression 类速览GPRegression类位于 numpy_ml/nonparametric/gp.py并在 numpy_ml/nonparametric/init.py 中通过from .gp import *导出因此可直接从numpy_ml.nonparametric导入。2.1 构造函数参数参数类型默认值含义kernelstrRBFKernel拟合 GP 先验所使用的核函数通过KernelInitializer实例化alphafloat1e-10GP 协方差矩阵K对角线上的各向同性噪声项取值越大表示观测数据点中预期的噪声越大从源码看构造函数的核心逻辑为self.kernel KernelInitializer(kernel)() self.parameters {GP_mean: None, GP_cov: None, X: None} self.hyperparameters {kernel: str(self.kernel), alpha: alpha}kernel参数支持三种写法详见 numpy_ml/utils/kernels.py 的KernelInitializer核类实例、核类的__str__字符串如RBFKernel(sigma1)或由summary()方法生成的参数字典。若传None则默认返回LinearKernel。parameters字典在fit后存放训练数据X、目标y、先验协方差GP_cov与先验均值GP_mean。hyperparameters记录核的字符串表示与噪声项alpha供predict、marginal_log_likelihood读取。2.2 支持的核函数GP 先验的形状由核函数决定。当前仓库的 numpy_ml/utils/kernels.py 提供三种内置核核公式关键参数与默认值LinearKernelk(x, y) xᵀy c₀c00非齐次参数PolynomialKernelk(x, y) (γ·xᵀy c₀)ᵈd3gammaNone默认1/Cc01RBFKernelk(x, y) exp(-0.5·‖(x−y)/σ‖₂²)sigmaNone默认√(C/2)标量时为各向同性核其中RBFKernel是 GP 回归的默认选择核值随距离递减当x y时取 1其隐含特征空间具有无限维。注意RBFKernel的默认sigma由输入维度推导np.sqrt(X.shape[1] / 2)见 numpy_ml/utils/kernels.py。三、核心 API 深度解析3.1 fit拟合 GP 先验fit(X, y)只做两件事计算零均值向量与训练数据上的 Gram 矩阵K并存入parametersnumpy_ml/nonparametric/gp.pymu np.zeros(X.shape[0]) K self.kernel(X, X) self.parameters[X] X self.parameters[y] y self.parameters[GP_cov] K self.parameters[GP_mean] muX形状(N, M)的训练数据集共N个样本、每个样本M维。y形状(N, O)的实值训练目标支持多维目标每个样本O维。注意fit阶段并不做矩阵求逆真正的计算发生在predict与marginal_log_likelihood中因此fit的代价主要是O(N²·M)的核矩阵计算。3.2 predict后验预测分布与置信区间predict(X, conf_interval0.95, return_covFalse)返回后验预测分布p(y* | x*, X, y)的均值即 MAP 估计与置信区间numpy_ml/nonparametric/gp.py。数学形式后验预测分布为y* | x*, X, y ~ (μ*, cov*)其中μ* K*(K αI)⁻¹ y cov* K** − K*ᵀ(K αI)⁻¹ K* K kernel(X, X) K* kernel(X, X*) K** kernel(X*, X*)实现要点对应源码第 134–154 行sig np.eye(K.shape[0]) * alpha K_y_inv inv(K sig) pp_mean K_star K_y_inv y pp_cov K_star_star - K_star K_y_inv K_star.T percentile 1.96 if not _SCIPY else norm.ppf(conf_interval) conf percentile * np.sqrt(np.diag(pp_cov)) return (pp_mean, conf) if not return_cov else (pp_mean, conf, pp_cov)返回值y_pred形状(N, O)的预测值conf形状(N, O)的置信区间半宽第i个预测的conf%置信区间为[y[i] − conf[i], y[i] conf[i]]cov形状(N, N)的后验预测协方差仅当return_covTrue时返回。置信区间计算默认用norm.ppf(0.95) ≈ 1.96倍标准差。若未安装scipy.stats_SCIPY为False此时conf_interval参数被忽略、强制返回 95% 区间并打印警告见 numpy_ml/nonparametric/gp.py。效率说明源码注释明确指出该实现使用通用的np.linalg.inv求(K αI)的逆属于低效但通用的做法。更高效的方式是利用K αI的对称正半定性质通过 Cholesky 分解计算Q⁻¹ cholesky(Q)⁻¹ᵀ · cholesky(Q)⁻¹生产级实现细节参见 Rasmussen Williams2006的 Algorithm 2.1。3.3 marginal_log_likelihood边际似然模型证据marginal_log_likelihood(kernel_paramsNone)计算对数边际似然log p(y | X, kernel_params)numpy_ml/nonparametric/gp.py。数学形式在 GP 回归模型下边际似然服从正态分布y | X, θ ~ (0, K αI)因此log p(y | X, θ) −0.5·log det(K αI) − 0.5·yᵀ(K αI)⁻¹y (n/2)·log 2π其中K kernel(X, X)θ为核参数集合n为K的维度。实现要点K np.eye(K.shape[0]) * alpha # 对角线加入各向同性噪声 Kinv inv(K) Klogdet -0.5 * slogdet(K)[1] # 用 slogdet 求 log|K|数值更稳定 const K.shape[0] / 2 * np.log(2 * np.pi)kernel_params为None时使用模型初始化时定义的核参数否则会调用self.kernel.summary_dict()获取当前核参数将kernel_params合并后经KernelInitializer重建新核并基于新核重新计算K对应第 200–206 行。代码同时处理一维与多维目标若y.ndim 1先扩充为列向量再对y的每一维求和得到总边际对数似然。该值可用于核超参数选择在多个候选kernel_params之间比较边际似然选取最大者对应的核参数。3.4 sample从先验或后验预测分布采样sample(X, n_samples1, distposterior_predictive)从 GP 先验或后验预测分布中抽取函数样本numpy_ml/nonparametric/gp.pydistprior均值取零向量协方差为kernel(X, X)对应未观测数据时的高斯过程先验distposterior_predictive内部调用predict(X, return_covTrue)得到后验均值与协方差后采样其他取值抛出ValueError。返回samples形状为(n_samples, O, N)其中N为X中点的个数、O为目标维度。实现使用np.random.multivariate_normal按目标维度逐列采样后交换轴swapaxes(0, 1)。四、实战完整使用示例以下示例复刻 numpy_ml/plots/nonparametric_plots.py 中plot_gp的核心流程以y sin(x)为真实函数在少量带噪观测点上拟合 GP 并预测。import numpy as np from numpy_ml.nonparametric import GPRegression # 1. 构造数据真实函数为 sin(x)训练点稀疏且带噪声 X_train np.array([-3, 0, 7, 1, -9]).reshape(-1, 1) y_train np.sin(X_train).ravel() 0.05 * np.random.randn(5) # 2. 初始化模型RBF 核 噪声项 alpha gp GPRegression(kernelRBFKernel(sigma1), alpha1e-5) # 3. 拟合先验 gp.fit(X_train, y_train) # 4. 在密集网格上预测得到 MAP 估计与 95% 置信区间 X_test np.linspace(-10, 10, 100).reshape(-1, 1) y_pred, conf gp.predict(X_test, conf_interval0.95) # 5. 计算边际对数似然模型证据 mll gp.marginal_log_likelihood() print(marginal log-likelihood:, mll) # 6. 从后验预测分布采样 3 条函数曲线 samples gp.sample(X_test, n_samples3, distposterior_predictive)对应地仓库在 numpy_ml/plots/nonparametric_plots.py 的plot_gp_dist中还演示了从先验distprior与后验预测分布分别采样并绘制 MAP 估计与置信带可直接运行生成numpy_ml/nonparametric/img/gp_dist.png风格的对比图。4.1 alpha 对结果的影响plot_gpnumpy_ml/plots/nonparametric_plots.py遍历alphas [0, 1e-10, 1e-5, 1]观察拟合效果alpha 0完全插值预测曲线精确穿过每个训练点但置信区间极窄、易过拟合alpha较小如1e-10、1e-5在插值与平滑之间取得平衡与真实函数贴合良好alpha 1噪声假设过大预测曲线明显偏离训练点、更趋平滑置信区间相应变宽。这一现象印证了构造参数表中alpha越大表示观测数据中预期噪声越大的语义。五、正确性验证与 scikit-learn 的等价性仓库在 numpy_ml/tests/test_nonparametric.py 中提供了test_gp_regression测试将本实现与 scikit-learn 的GaussianProcessRegressor进行对照gp GPRegression(kernelRBFKernel(sigma1), alphaalpha) gold GaussianProcessRegressor(kernelNone, alphaalpha, optimizerNone, normalize_yFalse) gp.fit(X, y) gold.fit(X, y) preds, _ gp.predict(X_test) gold_preds gold.predict(X_test) np.testing.assert_almost_equal(preds, gold_preds) mll gp.marginal_log_likelihood() gold_mll gold.log_marginal_likelihood() np.testing.assert_almost_equal(mll, gold_mll)测试要点随机生成N ∈ [2, 100)个样本、M ∈ [2, 100)维输入、多维目标y ∈ ℝ^{N×J}J ∈ {1, 2}使用相同的alpha与sigma1的 RBF 核关闭 sklearn 的内核优化optimizerNone与目标归一化保证两者处于同一设定断言预测均值与边际对数似然在数值上近似相等。这说明当前实现与业界标准实现的预测、证据计算在数值上等价可直接作为交叉验证手段。六、安装与运行环境核心依赖numpy。置信区间计算在安装了scipy时支持任意conf_interval缺少scipy.stats时功能降级为固定的 95% 区间并发出警告见 numpy_ml/nonparametric/gp.py。测试依赖pytest、scikit-learn仅用于test_nonparametric.py的对照验证见 requirements-test.txt 与 requirements-dev.txt。运行方式在仓库根目录安装后执行pip install -e .随后即可from numpy_ml.nonparametric import GPRegression。七、总结与延伸阅读GPRegression以约 260 行 NumPy 代码完整实现了高斯过程回归的核心闭环核函数驱动的先验拟合fit、闭式后验预测与置信区间predict、模型证据计算marginal_log_likelihood以及先验/后验函数采样sample并经测试验证与 scikit-learn 数值等价。其非参数特性——模型复杂度随数据量增长、无需预设函数形式——使其非常适合小样本、带不确定度估计的回归任务。进一步探索可参考类级 API 文档docs/numpy_ml.nonparametric.gp.rst非参数模块总览含 KNN、核回归与 GP 的数学推导docs/numpy_ml.nonparametric.rst核函数实现与KernelInitializer用法numpy_ml/utils/kernels.py可视化示例脚本numpy_ml/plots/nonparametric_plots.py与 scikit-learn 的等价性测试numpy_ml/tests/test_nonparametric.py。理论背景可参阅 Rasmussen Williams2006《Gaussian Processes for Machine Learning》及 Krige1951、Matheron1963关于克里金法的经典文献这些参考文献亦在 docs/numpy_ml.nonparametric.rst 中列出。赞分享机器学习人工智能【免费下载链接】numpy-mlMachine learning, in numpy项目地址https://gitcode.com/gh_mirrors/nu/numpy-ml点击查看免费下载相关推荐numpy-ml 非参数模型实战KNN、高斯过程回归与 Nadaraya-Watson 核回归numpy ml 非参数模型实战KNN、高斯过程回归与 Nadaraya Watson 核回归 本文以 numpy ml 仓库的 docs/numpy_ml.机器学习人工智能Gemma4-26B-A4B-PRISM-PRO-DQ-GGUF服务部署教程llama-server文本推理与API调用最佳实践Gemma4 26B A4B PRISM PRO DQ GGUF服务部署教程llama server文本推理与API调用最佳实践 Gemma4 26B A4BXingo集群部署指南从单机到分布式游戏服务器的完整迁移方案Xingo集群部署指南从单机到分布式游戏服务器的完整迁移方案 Xingo作为高性能Golang网络库和游戏开发脚手架提供了从单机到分布式架构的完整解决方案。机器学习人工智能上一篇MailCore核心组件解析CTCoreAccount、CTCoreMessage和CTCoreFolder深度解析下一篇Omarchy系统恢复从备份到紧急模式创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。