为什么Kriging 与高斯过程回归出自同一数学框架,但实际效果却差很远

简介: 本文对比Kriging与高斯过程回归(GPR)在SPE9渗透率空间插值任务中的性能,涵盖多种变体与交叉验证。结果揭示:GPR精度更高但计算昂贵;嵌套Kriging以极低成本提升稳定性;R²为负并非异常,而是模型劣于均值预测的明确警示。

做过地质统计学、储层建模或空间机器学习的人,大概都面对过这个选择:Kriging(经典地质统计学的主力工具),还是高斯过程回归(Gaussian Process Regression,GPR,其机器学习更加接近)。两者在数学上是相通的——都是基于协方差/核函数构建的"最佳线性无偏预测器"——但实际使用起来像是两个完全不同的世界。Kriging 快、可解释、有几十年积累;GPR 慢、更灵活、有 sklearn 的精良封装。

本文将在 SPE9 数据集上跑了一套正面对比,覆盖多种 Kriging 变体、GPR 以及几个 ML 基线,还包括用 5 折和 20 折交叉验证重复了一遍,看稳定性。

结果出乎意料。期间还碰到一个让不少人(包括我自己)困惑的问题:R² 名字里有"平方",怎么会出现负数?这个问题值得认真讲,因为搞清楚它之前,上面那些数字都没法正确解读。

数据集:SPE9

SPE9 是经典的 Benchmark——一个合成但具有现实意义的 3D 渗透率网格,几十年来用于测试模拟器和建模工作流。本次实验将其视为空间插值问题:

  • 输入:储层网格内归一化的 (x, y, z) 坐标
  • 目标:该位置的渗透率
  • 任务:给定一批已知点,预测未知位置的渗透率

从网格中采样 1,500 个点,分别用于单次划分(1,200/300 训练/测试)、5 折交叉验证(每折 1,200/300)和 20 折交叉验证(每折 1,425/75)。

对比模型如下

普通 Kriging(Ordinary Kriging,OK)

Kriging 将未采样位置的值预测为附近已知值的加权平均,权重来自变差函数(variogram)——描述两点之间相似度随距离变化规律的函数。变差函数拟合一次,之后对每个预测点用

k

个最近邻解一个小型线性方程组。

测试了两种配置:自动选择变差函数模型(球形/指数/高斯/线性,通过交叉验证拟合选优)和固定球形模型。

泛 Kriging(Universal Kriging)

思路与普通 Kriging 相同,但额外在残差之上拟合一个多项式"漂移"(drift)项——线性或二次。漂移项负责捕捉大尺度趋势,变差函数则只需解释局部小尺度变异。

嵌套变差函数 Kriging(Nested Variogram Kriging)

这是最有意思的变体,也是专门为本次研究实现的。标准变差函数只有一套 nugget/sill/range,只能描述单一尺度的空间结构;而真实空间场往往同时存在多个尺度的变异:短程局部噪声,加上大范围缓变的区域趋势。

嵌套变差函数把两个(或多个)协方差结构叠加在一起:

 gamma(h) = nugget + ps1 * structure_1(h, range_1) + ps2 * structure_2(h, range_2)

这与高斯过程中叠加两个核函数的做法直接类似,例如

RBF(short_length_scale) + RBF(long_length_scale)

。用 Rust 实现,采用广义 N 参数 Levenberg-Marquardt 拟合器,接入局部 Kriging 引擎,测试了球形+高斯和球形+球形两种组合。

高斯过程回归(GPR)

sklearn 的

GaussianProcessRegressor

。底层数学与 Kriging 相同,区别在于:核函数超参数通过最大化边际似然(marginal likelihood)来优化,而非拟合经验变差函数;复杂度是训练点数量的 O(N³)——没有最近邻这类快捷方式。

随机森林(及"回归 Kriging"混合版)

作为非空间基线,加入了一个普通的

RandomForestRegressor

,直接以 (x, y, z) 为输入训练渗透率预测。还尝试了回归 Kriging(Regression Kriging)混合方案:先用 ML 模型拟合大尺度趋势,再对残差做 Kriging,试图捕捉剩余的空间结构。

第一轮:单次 1,200/300 划分

先做最简单的对比——在 1,200 个点上训练,对 300 个留出点评估,只跑一次。

  • GPR 以大幅优势胜出——R² 0.646,Kriging 各变体为 0.18–0.24。
  • GPR 的拟合速度慢约 1,000 倍,预测速度慢约 200 倍。
  • 嵌套变差函数将与 GPR 的差距缩小了约三分之一(0.177 → 0.244),计算代价几乎为零。
  • 泛 Kriging 的多项式漂移几乎没有帮助(0.177 → 0.19),计算开销却比普通 Kriging 高 30–100 倍。

为什么 GPR 在这里赢得这么彻底?

看一下 GPR 实际拟合出的核函数:

 0.96² · RBF([0.294, 2.91e-05, 0.0183])  
   + 0.072² · Matern([4.47e-05, 3.08e+04, 4.53e+04], nu=1.5)  
   + WhiteKernel(0.0293)

关键在 Matérn 项:它在 y 和 z 维度的长度尺度极大(约 30,000–45,000),在大多数域范围内等效于一个近线性的大尺度趋势。GPR 的优化器发现了渗透率场的结构:x 方向存在短程局部变异,叠加了一个大范围、平滑、近乎线性的区域模式——于是自动组合出 RBF(局部结构)加近线性 Matérn 项(区域趋势)的核函数。

嵌套变差函数试图表达的正是同一回事——短程结构加长程结构。效果不如 GPR,原因有两点:一是嵌套拟合中第二个结构只支持有界协方差形状(球形、指数、高斯),无法像长度尺度极大的 Matérn 项那样干净地表达无界的近线性趋势;二是 GPR 的超参数通过最大化边际似然做全局联合优化,而变差函数先独立拟合经验曲线再用于预测,两步解耦精度自然有损。

如果进行修正:按各轴变差函数范围对坐标重缩放,以校正几何各向异性(该场在 x、y、z 三个方向的相关长度差异很大)。结果反而更差(R² 降至 -0.03 到 0.07)——某一轴上估计的范围极小(约 0.005),把距离放大到如此程度,几乎所有点对在重缩放空间中都变得"无限远",彻底破坏了 Kriging 依赖的空间相关性。"更复杂"不等于"更好",所以各向异性校正需要比逐轴重缩放谨慎得多的处理。

第二轮:交叉验证下结论还成立吗?

单次 80/20 划分只反映数据的一个切面。在同一 1,500 个点的数据池上,跑了 5 折交叉验证(每折 1,200 训练 / 300 测试)和 20 折交叉验证(每折 1,425 训练 / 75 测试)。

5 折结果(5 折均值 ± 标准差)

交叉验证中使用的 GPR 核函数较简单(ARD RBF + 白噪声,重启两次),而非第一轮中完全优化的核函数——平均 R²(0.342)低于单次划分的 0.646。单次划分碰巧是对 GPR 特别有利的一次。

两个问题:

  1. GPR 自身的精度也不稳定——标准差 0.374 极大。第 3 折的 R² 实际为负(-0.351),第 4 折又高达 0.694。同一模型、同样的超参数搜索,仅因留出的 300 个点不同,结果便天差地别。
  2. 嵌套变差函数是所有纯空间方法中最稳定的——标准差(0.050)在所有方法(包括 GPR)中最低,从未跌入负 R²;而普通 Kriging 和泛 Kriging 在第 3 折时都出现了约 -0.20 的负值。

20 折结果(20 折均值 ± 标准差,每折 75 个测试点)

测试集缩小到每折 75 个点后,情况更加清晰:除 GPR 外,所有方法的平均 R² 均为负,即在 20 个不同留出集上平均下来,这些方法还不如直接在每处预测平均渗透率。GPR 是唯一稳定超越均值预测基线的方法,平均 R²(0.497)最高,方差(0.236)也最低。嵌套变差函数再次是纯空间方法中"最不差"的,均值最接近零(-0.018、-0.035),标准差约 0.49,而普通 Kriging 为 0.83–0.91。随机森林和随机森林 Kriging 则成了最差的选手——单次灾难性折叠(R² 分别为 -4.55 和 -4.92)将平均值拖入深度负区间。

R² 怎么会是负数?

"R 的平方"这个名字让人自然地以为它是某个量的平方,平方不可能是负数。但实际计算的公式是:

 R² = 1 - (SS_res / SS_tot)

其中:

  • SS_res = Σ(y_true - y_pred)² ——模型的总平方误差
  • SS_tot = Σ(y_true - ȳ)² ——最笨基线(对每个点都预测 y_true 均值)的总平方误差

两个求和项都非负,但它们的比值没有上界约束。模型预测比猜均值还差时,

SS_res > SS_tot

,比值超过 1,

1 - 比值

就成了负数。

"相关系数的平方"并不是凭空而来,需要一个前提:带截距的普通最小二乘线性回归,在训练数据上评估。这种情况下拟合直线被保证至少不比均值差——"零斜率、截距=均值"本身就是 OLS 优化器考虑过的合法候选,它只会选更好或相等的结果。这个保证把 R² 锁定在 [0, 1] 内,而它恰恰不适用于留出测试集,也不适用于 Kriging 和 GPR 这类空间/非线性模型。

测试集上出现负 R² 不是 Bug,也不是指标失灵——而是指标在正确地告诉你:模型对空间结构的过拟合或误设定已经严重到"什么都不预测"反而更好的程度。在 20 折结果里,除 GPR 之外的所有方法平均如此。这是一个真实、有据可查的发现,只是结果很差罢了。

选 Kriging 还是 GPR?

答案和数据科学里大多数问题一样,取决于样本量和时间预算——但可以说得更具体些。

选 GPR 的场景:

  • 数据量只有几千个点或更少(O(N³) 的复杂度决定了它无法扩展)
  • 精度优先于延迟
  • 能接受超参数搜索的时间成本(本 Benchmark 中每次拟合需要几十秒;N=4,000 训练点时,GPR 拟合 11 分钟没有跑完)
  • 希望通过核函数组合自动发现多尺度结构

选(嵌套)Kriging 的场景:

  • 需要对 50K–1M+ 个点打分(GPR 根本做不到)
  • 需要毫秒级预测
  • 能接受精度上的明显折损,但想要折损范围内最稳定的那个版本
  • 已有领域知识表明存在多空间尺度(局部非均质性 + 区域趋势)——嵌套变差函数能以极低代价捕捉 GPR 核组合捕捉到的部分信息

所以,在大网格主体上用 Kriging(尤其是嵌套版),在感兴趣的小区域或验证/校准场景中保留 GPR,让更高的精度在值得的地方发挥作用。

总结

Kriging 看起来是用约 0.47 个 R² 单位换取了 1,000 倍的加速。20 折交叉验证下,每种 Kriging 变体(以及随机森林和随机森林 Kriging)的平均 R² 均为负——平均下来还不如一条水平线。只有 GPR 稳定地超越了这条基线。

嵌套变差函数通过叠加两个协方差结构来模拟 GPR 的核组合,没有补上这个差距,但让失败变得不那么严重、不那么随机。这是真实、有用的改进,只是不是当初期望的那种。

如果只带走一条结论:永远做交叉验证,永远把 R² 与均值预测基线对照。单次训练/测试划分可能让一个既快又脆弱的模型看起来像是白捡来的午餐。

https://avoid.overfit.cn/post/4abdaa4957fd40d0833f2064c7560181

作者:Kyle Jones

目录
相关文章
|
2月前
|
人工智能 监控 机器人
十个 AI Agent 工作流模板,照着搭就能用
AI Agent 不是高级聊天机器人,而是能自动执行完整工作流的智能协作者:读取、核对、决策、起草、更新,仅高风险环节交由人工拍板。文末分享10个开箱即用的模板——从邮件分类、研究简报到CRM补全、QA审查,聚焦解决重复性数字劳动,强调“先设计工作流,再写Prompt”,兼顾效率与可控性。
558 1
十个 AI Agent 工作流模板,照着搭就能用
|
3月前
|
JSON Rust API
Pydantic v2 入门教程:模型、字段、验证器
本文详解 Pydantic v2(Python 3.10+)核心用法:模型定义、字段约束、自定义验证器(field/model)、嵌套/递归结构、序列化控制及 JSON Schema 生成,所有示例完整可运行,助你构建健壮数据验证与序列化逻辑。
246 1
Pydantic v2 入门教程:模型、字段、验证器
|
2月前
|
前端开发 安全 JavaScript
Harness Engineering 实践案例:如何Agent 写一份行为规范
本文展示Harness Engineering落地实践:通过`AGENTS.md`(行为总纲)、`ARCHITECTURE.md`(系统骨架)等结构化文档,为编码Agent建立可追溯、可审计、防幻觉的工作规范,实现RAG+微调系统的可控开发。
368 4
Harness Engineering 实践案例:如何Agent 写一份行为规范
|
15天前
|
机器学习/深度学习 缓存 人工智能
Claude Fable 5.1 发布解读:科研智能体跑分翻倍,Agent 成本降45%
Claude Fable 5.1 于 2026 年 9 月发布:科研智能体基准翻倍、缓存降价 75%,Agent 成本最高降 45%,一文讲清升级点与价格。
241 1
Claude Fable 5.1 发布解读:科研智能体跑分翻倍,Agent 成本降45%
|
7天前
|
人工智能 Ubuntu 数据可视化
Ubuntu 本地部署Ollama+OpenWebUI教程
本文详解Ubuntu下零基础部署Ollama+OpenWebUI:一键安装Ollama(支持CPU/GPU)、拉取轻量qwen3.5:0.8b模型、虚拟环境隔离安装OpenWebUI、配置systemd自启服务,最终建成可远程访问、离线运行、稳定易用的本地AI对话网页。
186 2
|
10天前
|
JavaScript 开发者
DSH plugin 从零怎么写?最小插件目录、本地构建与装进 profile 调试的完整起步流程
写第一个 DSH plugin 只需要一个导出 apply 函数的模块:先用 patch 覆盖层把本地文件插进 Web 界面验证,再做成包用 dsh plugin --profile add 装进 profile,最后用 --dump-config 与日志排错。
127 2
|
22天前
|
人工智能 安全 API
阿里云Token Plan 个人版Quick Start:最低39 元/月,主流AI工具直接接入,Credits 统一计量
阿里云百炼 Token Plan 个人版是面向个人开发者的 AI 大模型订阅服务,采用 Credits 统一计量,支持在 Claude Code、Cursor、Qwen Code 等主流 AI 编程和智能体工具中使用。目前提供 Lite、Standard、Pro 三档套餐及用量包,限时价格分别为 39 元/月、139 元/月、499 元/月。
阿里云Token Plan 个人版Quick Start:最低39 元/月,主流AI工具直接接入,Credits 统一计量
|
14天前
|
缓存 编解码 测试技术
GPT Image 2.5 图片生成费用详解:Flare 与 Sunburst 两种模式定价解析
OpenAI发布GPT-Image 2.5双模型:Flare(重速度)与Sunburst(重精度),均按token计费——文字输入$5M、图片输入$8M、输出$30M/百万token,缓存另计。单价统一,但实际单图成本因用量而异,官方提供输出token估算器。
|
3月前
|
数据采集 人工智能 分布式计算
多Agent集群中的"情报官"设计:为什么系统需要一个RDD
在多Agent系统中,信息采集环节的失误往往是级联错误的根源。本文从行业实践和学术研究两个维度,论证了专职情报采集Agent的必要性,并详细解析了枢衡RDD(资源探测)的五大架构设计原则,包括与CAD的对抗性协作机制等。最后提供了一套可落地的自检清单,帮助开发者判断自己的Agent集群是否需要引入专职情报官角色。
|
3月前
|
人工智能 自然语言处理 安全
多AI聚合的五个常见误区:你以为的“交叉验证”可能只是“重复犯错”
本文剖析多AI聚合系统五大常见误区:盲目追求数量、迷信“少数服从多数”、误信数据天然独立、将分歧视为缺陷、幻想彻底消除幻觉。强调模型独立性、分歧价值与用户主动判别才是发挥聚合效能的关键。
368 5