news 2026/4/23 13:35:55

数学建模优秀论文算法-高斯过程回归

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
数学建模优秀论文算法-高斯过程回归

高斯过程回归(GPR)小白入门教程

0. 引言:为什么需要高斯过程回归?

在机器学习中,回归任务的目标是用已知数据拟合一个函数,预测新输入的输出。传统方法(如线性回归、多项式回归)存在明显局限:

  • 线性回归假设输入输出是线性关系,无法拟合非线性数据;
  • 多项式回归需要手动选择次数,次数过高易过拟合、过低易欠拟合;
  • 大多数方法只能给出点估计(如y^\hat{y}y^),无法量化预测的不确定性(比如“预测值y^=5\hat{y}=5y^=5,但有95%的概率在[3,7]之间”)。

高斯过程回归(Gaussian Process Regression, GPR)是一种非参数概率模型,完美解决了上述问题:

  • 天生支持非线性拟合,无需手动设计特征;
  • 输出概率分布(均值+方差),直接给出不确定性;
  • 基于贝叶斯框架,能结合先验知识(通过核函数)。

本文将从基础概念出发,一步步讲解GPR的原理与应用。

1. 背景溯源:从“确定函数”到“随机过程”

在传统回归中,我们认为“函数是确定的”——给定x,f(x)是一个固定值。但现实中,很多现象存在随机性(比如测量误差、未观测到的变量),因此更合理的假设是:每个x对应一个随机变量f(x),整个函数f(·)是这些随机变量的集合

高斯过程(Gaussian Process, GP)是这类“函数随机过程”的典型代表:它假设任意有限个x对应的f(x)都服从联合高斯分布。换句话说,GPR用高斯分布描述“函数的不确定性”,通过观测到的训练数据(带噪声的f(x)),用条件高斯分布预测新x的输出分布。

2. 前置知识:高斯分布的“联合-条件”变换

GPR的核心是条件高斯分布,需先掌握单变量、联合、条件高斯的基本公式。

2.1 单变量高斯分布

若随机变量z∼N(μ,σ2)z \sim \mathcal{N}(\mu, \sigma^2)zN(μ,σ2),则其概率密度函数(PDF)为:
p(z)=12πσ2exp⁡(−(z−μ)22σ2) p(z) = \frac{1}{\sqrt{2\pi\sigma^2}} \exp\left(-\frac{(z-\mu)^2}{2\sigma^2}\right)p(z)=2πσ21exp(2σ2(zμ)2)
其中μ\muμ是均值(中心位置),σ2\sigma^2σ2是方差(离散程度)。

2.2 联合高斯分布

若两个随机变量z1,z2z_1, z_2z1,z2服从联合高斯分布,记为:
[z1z2]∼N([μ1μ2],[Σ11Σ12Σ21Σ22]) \begin{bmatrix} z_1 \\ z_2 \end{bmatrix} \sim \mathcal{N}\left( \begin{bmatrix} \mu_1 \\ \mu_2 \end{bmatrix}, \begin{bmatrix} \Sigma_{11} & \Sigma_{12} \\ \Sigma_{21} & \Sigma_{22} \end{bmatrix} \right)[z1z2]N([μ1μ2],[Σ11Σ21Σ12Σ22])
其中:

  • μ=[μ1,μ2]T\mu = [\mu_1, \mu_2]^Tμ=[μ1,μ2]T均值向量z1z_1z1的均值是μ1\mu_1μ1z2z_2z2的均值是μ2\mu_2μ2);
  • Σ\SigmaΣ协方差矩阵Σ11=Var(z1)\Sigma_{11} = \text{Var}(z_1)Σ11=Var(z1)Σ22=Var(z2)\Sigma_{22} = \text{Var}(z_2)Σ22=Var(z2)Σ12=Cov(z1,z2)=E[(z1−μ1)(z2−μ2)]\Sigma_{12} = \text{Cov}(z_1,z_2) = \mathbb{E}[(z_1-\mu_1)(z_2-\mu_2)]Σ12=Cov(z1,z2)=E[(z1μ1)(z2μ2)]);
  • 协方差矩阵满足对称性Σ12=Σ21\Sigma_{12} = \Sigma_{21}Σ12=Σ21)和半正定性(保证PDF非负)。

2.3 条件高斯分布(关键!)

若已知z2z_2z2的观测值z2=az_2 = az2=a,求z1z_1z1的条件分布z1∣z2=az_1 | z_2=az1z2=a。根据高斯分布的性质,条件分布仍为高斯分布,公式为:
z1∣z2=a∼N(μ1∣2,Σ1∣2) z_1 | z_2=a \sim \mathcal{N}\left( \mu_{1|2}, \Sigma_{1|2} \right)z1z2=aN(μ1∣2,Σ1∣2)
其中:

  • 条件均值:μ1∣2=μ1+Σ12Σ22−1(a−μ2)\mu_{1|2} = \mu_1 + \Sigma_{12} \Sigma_{22}^{-1} (a - \mu_2)μ1∣2=μ1+Σ12Σ221(aμ2)(用z2z_2z2的观测值修正z1z_1z1的先验均值)
  • 条件方差:Σ1∣2=Σ11−Σ12Σ22−1Σ21\Sigma_{1|2} = \Sigma_{11} - \Sigma_{12} \Sigma_{22}^{-1} \Sigma_{21}Σ1∣2=Σ11Σ12Σ221Σ21(观测z2z_2z2后,z1z_1z1的不确定性降低)

记住这个公式!GPR的预测就是用训练数据(对应z2z_2z2)修正预测点(对应z1z_1z1)的分布。

3. 高斯过程的数学定义

有了高斯分布的基础,我们可以正式定义高斯过程

3.1 定义

一个随机过程{f(x)∣x∈X}\{f(x) | x \in \mathcal{X}\}{f(x)xX}X\mathcal{X}X是输入空间,如Rd\mathbb{R}^dRd)是高斯过程,当且仅当:对任意有限个输入x1,x2,...,xn∈Xx_1, x_2, ..., x_n \in \mathcal{X}x1,x2,...,xnX,对应的随机向量[f(x1),f(x2),...,f(xn)]T[f(x_1), f(x_2), ..., f(x_n)]^T[f(x1),f(x2),...,f(xn)]T服从n维联合高斯分布

高斯过程可简记为:
f(x)∼GP(m(x),k(x,x′)) f(x) \sim \mathcal{GP}\left( m(x), k(x, x') \right)f(x)GP(m(x),k(x,x))
其中:

  • m(x)=E[f(x)]m(x) = \mathbb{E}[f(x)]m(x)=E[f(x)]均值函数(每个x对应f(x)的先验均值);
  • k(x,x′)=Cov[f(x),f(x′)]=E[(f(x)−m(x))(f(x′)−m(x′))]k(x, x') = \text{Cov}[f(x), f(x')] = \mathbb{E}[(f(x)-m(x))(f(x')-m(x'))]k(x,x)=Cov[f(x),f(x)]=E[(f(x)m(x))(f(x)m(x))]协方差函数(也叫核函数,描述两个输入x,x′x, x'x,x对应的f(x)、f(x’)的相关性)。

3.2 核心结论:均值+核函数=高斯过程

高斯过程的所有性质都由均值函数核函数完全决定!因为:

  • 任意n个输入的联合均值向量是[m(x1),m(x2),...,m(xn)]T[m(x_1), m(x_2), ..., m(x_n)]^T[m(x1),m(x2),...,m(xn)]T
  • 联合协方差矩阵是Kn×nK_{n \times n}Kn×n,其中Kij=k(xi,xj)K_{ij} = k(x_i, x_j)Kij=k(xi,xj)(第i行j列是xix_ixixjx_jxj的协方差)。

3.3 常用核函数(协方差函数)

核函数是GPR的“灵魂”,它决定了函数f(x)的光滑性、周期性、局部性等性质。以下是最常用的核函数:

(1)平方指数(SE)核(光滑函数首选)

kSE(x,x′)=σf2exp⁡(−∥x−x′∥22l2) k_{\text{SE}}(x, x') = \sigma_f^2 \exp\left( -\frac{\|x - x'\|^2}{2l^2} \right)kSE(x,x)=σf2exp(2l2xx2)
参数解释:

  • σf2\sigma_f^2σf2信号方差(控制f(x)的波动幅度,σf2\sigma_f^2σf2越大,函数越“起伏”);
  • lll长度尺度(控制f(x)的“局部性”,lll越小,函数越“敏感”于输入变化;lll越大,函数越“平坦”);
  • ∥x−x′∥\|x - x'\|xx:输入xxxx′x'x的欧氏距离(衡量相似度)。

SE核的特点:

  • x=x′x = x'x=x时,k(x,x′)=σf2k(x,x') = \sigma_f^2k(x,x)=σf2(f(x)自身的方差);
  • xxxx′x'x距离增大时,k(x,x′)k(x,x')k(x,x)指数衰减(输入越相似,f(x)与f(x’)的相关性越高);
  • 对应光滑函数(因为协方差函数的光滑性等价于f(x)的光滑性)。
(2)其他常用核
  • Matérn核:控制函数的光滑度(如Matérn 3/2对应一次可导,Matérn 5/2对应二次可导);
  • 周期核:用于拟合周期性数据(如正弦曲线);
  • 线性核:对应线性函数(退化为线性回归);
  • ARD核:每个输入维度有独立的长度尺度(处理高维数据)。

3.4 核函数的性质

所有核函数必须满足:

  1. 对称性k(x,x′)=k(x′,x)k(x, x') = k(x', x)k(x,x)=k(x,x)(协方差矩阵对称);
  2. 半正定性:对任意输入x1,...,xnx_1,...,x_nx1,...,xn,协方差矩阵Kij=k(xi,xj)K_{ij}=k(x_i,x_j)Kij=k(xi,xj)是半正定的(保证联合高斯分布合法)。

4. 高斯过程回归的完整推导

现在进入核心:用高斯过程解决带噪声的回归问题

4.1 问题设定

我们有训练数据D={(xi,yi)}i=1n\mathcal{D} = \{(x_i, y_i)\}_{i=1}^nD={(xi,yi)}i=1n,其中:

  • xix_ixi:d维输入(如“温度”“湿度”);
  • yiy_iyi:观测输出(如“销量”“血压”);
  • 噪声假设yi=f(xi)+ϵiy_i = f(x_i) + \epsilon_iyi=f(xi)+ϵi,其中ϵi∼N(0,σn2)\epsilon_i \sim \mathcal{N}(0, \sigma_n^2)ϵiN(0,σn2)(独立同分布的高斯噪声,σn2\sigma_n^2σn2是噪声方差);
  • 先验假设f(x)∼GP(m(x),k(x,x′))f(x) \sim \mathcal{GP}(m(x), k(x, x'))f(x)GP(m(x),k(x,x))(f(x)服从高斯过程)。

我们的目标是:给定新输入x∗x^*x,预测对应的输出y∗=f(x∗)+ϵ∗y^* = f(x^*) + \epsilon^*y=f(x)+ϵ的概率分布ϵ∗\epsilon^*ϵ是新噪声,与ϵi\epsilon_iϵi独立)。

4.2 关键联合分布

首先,考虑训练数据的f向量f=[f(x1),f(x2),...,f(xn)]Tf = [f(x_1), f(x_2), ..., f(x_n)]^Tf=[f(x1),f(x2),...,f(xn)]T预测点的f值f∗=f(x∗)f^* = f(x^*)f=f(x)。根据高斯过程的定义,它们的联合分布是高斯的:
[ff∗]∼N([mm∗],[KK∗K∗Tk∗∗]) \begin{bmatrix} f \\ f^* \end{bmatrix} \sim \mathcal{N}\left( \begin{bmatrix} m \\ m^* \end{bmatrix}, \begin{bmatrix} K & K_* \\ K_*^T & k_{**} \end{bmatrix} \right)[ff]N([mm],[KKTKk∗∗])
符号解释:

  • m=[m(x1),m(x2),...,m(xn)]Tm = [m(x_1), m(x_2), ..., m(x_n)]^Tm=[m(x1),m(x2),...,m(xn)]T:训练点的先验均值向量;
  • m∗=m(x∗)m^* = m(x^*)m=m(x):预测点的先验均值;
  • KKK:训练点的协方差矩阵(Kij=k(xi,xj)K_{ij} = k(x_i, x_j)Kij=k(xi,xj)n×nn \times nn×n);
  • K∗K_*K:训练点与预测点的协方差向量(K∗=[k(x1,x∗),k(x2,x∗),...,k(xn,x∗)]TK_* = [k(x_1, x^*), k(x_2, x^*), ..., k(x_n, x^*)]^TK=[k(x1,x),k(x2,x),...,k(xn,x)]Tn×1n \times 1n×1);
  • k∗∗=k(x∗,x∗)k_{**} = k(x^*, x^*)k∗∗=k(x,x):预测点的自协方差(f∗f^*f的先验方差)。

4.3 观测值y的分布

由于y=f+ϵy = f + \epsilony=f+ϵϵ=[ϵ1,...,ϵn]T\epsilon = [\epsilon_1, ..., \epsilon_n]^Tϵ=[ϵ1,...,ϵn]T),且ϵ∼N(0,σn2I)\epsilon \sim \mathcal{N}(0, \sigma_n^2 I)ϵN(0,σn2I)III是n阶单位矩阵),因此y的联合分布为:
y∼N(m,K+σn2I) y \sim \mathcal{N}\left( m, K + \sigma_n^2 I \right)yN(m,K+σn2I)
推导:

  • 均值:E[y]=E[f+ϵ]=E[f]=m\mathbb{E}[y] = \mathbb{E}[f + \epsilon] = \mathbb{E}[f] = mE[y]=E[f+ϵ]=E[f]=m(噪声均值为0);
  • 方差:Var(y)=Var(f)+Var(ϵ)=K+σn2I\text{Var}(y) = \text{Var}(f) + \text{Var}(\epsilon) = K + \sigma_n^2 IVar(y)=Var(f)+Var(ϵ)=K+σn2I(f与ϵ\epsilonϵ独立,方差相加)。

4.4 预测分布推导(核心步骤!)

我们需要求*预测点的f*和y的分布,即f∗∣D,x∗f^* | \mathcal{D}, x^*fD,xy∗∣D,x∗y^* | \mathcal{D}, x^*yD,x

步骤1:构造y与f^*的联合分布

由于y=f+ϵy = f + \epsilony=f+ϵ,且ffff∗f^*f联合高斯,因此yyyf∗f^*f的联合分布也是高斯的:
[yf∗]∼N([mm∗],[K+σn2IK∗K∗Tk∗∗]) \begin{bmatrix} y \\ f^* \end{bmatrix} \sim \mathcal{N}\left( \begin{bmatrix} m \\ m^* \end{bmatrix}, \begin{bmatrix} K + \sigma_n^2 I & K_* \\ K_*^T & k_{**} \end{bmatrix} \right)[yf]N([mm],[K+σn2IKTKk∗∗])
推导:

  • 均值:E[y]=m\mathbb{E}[y] = mE[y]=mE[f∗]=m∗\mathbb{E}[f^*] = m^*E[f]=m(不变);
  • 协方差:Cov(y,f∗)=Cov(f+ϵ,f∗)=Cov(f,f∗)=K∗\text{Cov}(y, f^*) = \text{Cov}(f + \epsilon, f^*) = \text{Cov}(f, f^*) = K_*Cov(y,f)=Cov(f+ϵ,f)=Cov(f,f)=Kϵ\epsilonϵf∗f^*f独立,协方差为0);
  • Var(y)=K+σn2I\text{Var}(y) = K + \sigma_n^2 IVar(y)=K+σn2I(已推导),Var(f∗)=k∗∗\text{Var}(f^*) = k_{**}Var(f)=k∗∗(不变)。
步骤2:求f^*的条件分布(用条件高斯公式)

根据2.3节的条件高斯公式,将yyy视为“观测变量”(对应z2z_2z2),f∗f^*f视为“待预测变量”(对应z1z_1z1),则:
f∗∣D,x∗∼N(μ∗,Var∗) f^* | \mathcal{D}, x^* \sim \mathcal{N}\left( \mu^*, \text{Var}^* \right)fD,xN(μ,Var)
其中:

  • 预测均值(后验均值):μ∗=m∗+K∗T(K+σn2I)−1(y−m)\mu^* = m^* + K_*^T \left( K + \sigma_n^2 I \right)^{-1} (y - m)μ=m+KT(K+σn2I)1(ym)(用训练数据yyy修正预测点的先验均值m∗m^*m);
  • 预测方差(后验方差):Var∗=k∗∗−K∗T(K+σn2I)−1K∗\text{Var}^* = k_{**} - K_*^T \left( K + \sigma_n^2 I \right)^{-1} K_*Var=k∗∗KT(K+σn2I)1K(观测训练数据后,f^*的不确定性降低)。
步骤3:求y^*的分布(带噪声)

由于y∗=f∗+ϵ∗y^* = f^* + \epsilon^*y=f+ϵϵ∗∼N(0,σn2)\epsilon^* \sim \mathcal{N}(0, \sigma_n^2)ϵN(0,σn2),与ϵi\epsilon_iϵi独立),因此y∗y^*y的分布是f∗f^*f的分布加噪声
y∗∣D,x∗∼N(μ∗,Var∗+σn2) y^* | \mathcal{D}, x^* \sim \mathcal{N}\left( \mu^*, \text{Var}^* + \sigma_n^2 \right)yD,xN(μ,Var+σn2)
推导:

  • 均值:E[y∗]=E[f∗]+E[ϵ∗]=μ∗\mathbb{E}[y^*] = \mathbb{E}[f^*] + \mathbb{E}[\epsilon^*] = \mu^*E[y]=E[f]+E[ϵ]=μ(噪声均值为0);
  • 方差:Var(y∗)=Var(f∗)+Var(ϵ∗)=Var∗+σn2\text{Var}(y^*) = \text{Var}(f^*) + \text{Var}(\epsilon^*) = \text{Var}^* + \sigma_n^2Var(y)=Var(f)+Var(ϵ)=Var+σn2(独立变量方差相加)。

4.5 简化:零均值假设

通常,我们会假设先验均值函数m(x)=0m(x) = 0m(x)=0(理由:核函数已能捕捉函数的主要形状,且数据可通过中心化消除均值偏移)。此时,预测公式简化为:

  • 预测均值:μ∗=K∗T(K+σn2I)−1y\mu^* = K_*^T \left( K + \sigma_n^2 I \right)^{-1} yμ=KT(K+σn2I)1y
  • 预测方差:Var∗=k∗∗−K∗T(K+σn2I)−1K∗\text{Var}^* = k_{**} - K_*^T \left( K + \sigma_n^2 I \right)^{-1} K_*Var=k∗∗KT(K+σn2I)1K
  • y^*的分布:N(μ∗,Var∗+σn2)\mathcal{N}(\mu^*, \text{Var}^* + \sigma_n^2)N(μ,Var+σn2)

4.6 直观解释

  • 预测均值μ∗\mu^*μ:可视为“训练数据的加权平均”,权重由核函数决定——离x∗x^*x越近的训练点,权重越高(因为K∗K_*K中的元素越大);
  • 预测方差Var∗\text{Var}^*Var:反映预测的不确定性——当x∗x^*x离训练数据越远,K∗K_*K中的元素越小,Var∗\text{Var}^*Var越大(不确定性越高);当x∗x^*x与某训练点重合时,Var∗=k∗∗−k∗∗=0\text{Var}^* = k_{**} - k_{**} = 0Var=k∗∗k∗∗=0(但加上噪声后Var∗+σn2=σn2\text{Var}^* + \sigma_n^2 = \sigma_n^2Var+σn2=σn2,符合观测噪声的假设)。

5. 高斯过程回归的完整求解步骤

现在将推导转化为可操作的步骤,小白可按此流程实现GPR(无需代码,理解逻辑即可):

步骤1:数据准备

  • 输入:训练数据D={(xi,yi)}i=1n\mathcal{D} = \{(x_i, y_i)\}_{i=1}^nD={(xi,yi)}i=1n,测试点x∗x^*x
  • 预处理:对输入xix_ixi和输出yiy_iyi进行标准化(均值0、方差1),避免核函数的超参数因尺度差异难以优化。

步骤2:选择先验函数

  • 均值函数:通常选m(x)=0m(x) = 0m(x)=0(简化问题);
  • 协方差函数:根据数据特性选择(如光滑数据选SE核,周期性数据选周期核)。

步骤3:计算核心矩阵/向量

根据选择的核函数,计算:

  • 训练点协方差矩阵KKKn×nn \times nn×nKij=k(xi,xj)K_{ij} = k(x_i, x_j)Kij=k(xi,xj));
  • 训练点-预测点协方差向量K∗K_*Kn×1n \times 1n×1KaTeX parse error: Double subscript at position 4: K_*_̲i = k(x_i, x^*));
  • 预测点自协方差k∗∗k_{**}k∗∗k∗∗=k(x∗,x∗)k_{**} = k(x^*, x^*)k∗∗=k(x,x))。

步骤4:计算预测分布(初始)

用零均值假设下的公式计算:

  • 预测均值μ∗=K∗T(K+σn2I)−1y\mu^* = K_*^T (K + \sigma_n^2 I)^{-1} yμ=KT(K+σn2I)1y
  • 预测方差Var∗=k∗∗−K∗T(K+σn2I)−1K∗\text{Var}^* = k_{**} - K_*^T (K + \sigma_n^2 I)^{-1} K_*Var=k∗∗KT(K+σn2I)1K
  • y^*的分布:N(μ∗,Var∗+σn2)\mathcal{N}(\mu^*, \text{Var}^* + \sigma_n^2)N(μ,Var+σn2)

步骤5:超参数优化(关键!)

核函数和噪声的参数(如SE核的σf2,l\sigma_f^2, lσf2,l,噪声方差σn2\sigma_n^2σn2)称为超参数,需通过**极大似然估计(MLE)**优化。

(1)边际似然函数

超参数θ\thetaθ(如θ=[σf2,l,σn2]\theta = [\sigma_f^2, l, \sigma_n^2]θ=[σf2,l,σn2])的优化目标是最大化边际似然p(y∣X,θ)p(y | X, \theta)p(yX,θ)(积分掉隐变量f后的似然,即“观测数据y在超参数θ\thetaθ下的概率”)。

根据y的分布y∼N(0,K+σn2I)y \sim \mathcal{N}(0, K + \sigma_n^2 I)yN(0,K+σn2I)(零均值假设),边际似然的对数形式(更易计算)为:
log⁡p(y∣X,θ)=−12yT(K+σn2I)−1y−12log⁡∣K+σn2I∣−n2log⁡(2π) \log p(y | X, \theta) = -\frac{1}{2} y^T (K + \sigma_n^2 I)^{-1} y - \frac{1}{2} \log |K + \sigma_n^2 I| - \frac{n}{2} \log(2\pi)logp(yX,θ)=21yT(K+σn2I)1y21logK+σn2I2nlog(2π)
项解释:

  • 第一项:拟合度(y与模型预测的偏差,越小越好);
  • 第二项:模型复杂度(协方差矩阵的行列式,越大表示模型越复杂,需惩罚);
  • 第三项:常数项(不影响优化)。
(2)优化方法

超参数θ\thetaθ的优化是非线性无约束优化(边际似然函数非凸),常用方法:

  • 梯度下降(需计算边际似然对θ\thetaθ的梯度);
  • L-BFGS(拟牛顿法,适合中小规模数据);
  • 贝叶斯优化(针对黑箱函数,适合超参数多的情况)。

步骤6:最终预测

用优化后的超参数θ∗\theta^*θ重新计算K,K∗,k∗∗K, K_*, k_{**}K,K,k∗∗,再用步骤4的公式得到最终预测分布

  • 点估计:取预测均值μ∗\mu^*μ(对应“最可能的输出”);
  • 不确定性:用预测方差Var∗+σn2\text{Var}^* + \sigma_n^2Var+σn2(如95%置信区间为μ∗±1.96Var∗+σn2\mu^* \pm 1.96\sqrt{\text{Var}^* + \sigma_n^2}μ±1.96Var+σn2)。

6. 高斯过程回归的适用边界与局限性

GPR是强大的工具,但并非万能,需明确其适用场景局限性

6.1 适用场景

  1. 需要不确定性估计:如医疗诊断(预测病情的风险)、金融(预测股票收益的波动)、机器人学(路径规划中的避障);
  2. 非线性小样本数据:GPR的计算复杂度为O(n3)O(n^3)O(n3)(协方差矩阵的逆),小样本(n<1000n < 1000n<1000)时高效,且能拟合非线性关系;
  3. 光滑函数拟合:SE核等光滑核适合拟合连续、光滑的曲线;
  4. 先验知识融入:通过选择核函数(如周期核)或调整超参数,可将领域知识(如“数据有周期性”)融入模型。

6.2 局限性

  1. 计算复杂度高:当n>1000n > 1000n>1000时,O(n3)O(n^3)O(n3)的时间复杂度和O(n2)O(n^2)O(n2)的空间复杂度会导致计算崩溃(需用稀疏GP、变分GP等近似方法);
  2. 高维输入困境:当输入维度d>20d > 20d>20时,“维度灾难”会导致核函数的长度尺度参数失效(输入空间的距离变得无意义),需用ARD核或降维(如PCA);
  3. 核函数选择敏感:GPR的性能高度依赖核函数的选择,若核函数与数据特性不匹配(如用SE核拟合阶跃数据),模型会严重欠拟合;
  4. 非平稳数据挑战:SE核等平稳核(仅依赖输入差x−x′x - x'xx)无法处理非平稳数据(如趋势性数据),需用非平稳核(如多项式核)。

7. 示例:用GPR拟合正弦曲线

为帮助理解,我们用GPR拟合一个简单的正弦曲线:

(1)数据生成

  • 真实函数:f(x)=sin⁡(x)f(x) = \sin(x)f(x)=sin(x)x∈[0,4π]x \in [0, 4\pi]x[0,4π]);
  • 训练数据:随机选5个点,添加噪声yi=sin⁡(xi)+0.1ϵiy_i = \sin(x_i) + 0.1\epsilon_iyi=sin(xi)+0.1ϵiϵi∼N(0,1)\epsilon_i \sim \mathcal{N}(0,1)ϵiN(0,1));
  • 核函数:SE核k(x,x′)=1⋅exp⁡(−(x−x′)22⋅12)k(x,x') = 1 \cdot \exp(-\frac{(x-x')^2}{2 \cdot 1^2})k(x,x)=1exp(212(xx)2)σf2=1\sigma_f^2=1σf2=1l=1l=1l=1);
  • 噪声方差:σn2=0.01\sigma_n^2 = 0.01σn2=0.01

(2)预测结果

  • 均值曲线μ∗(x)\mu^*(x)μ(x)会贴合训练数据,且在训练点附近与sin⁡(x)\sin(x)sin(x)几乎重合;
  • 置信区间:在训练点附近,方差小(置信区间窄);在训练点之间或远离训练数据的区域,方差大(置信区间宽);
  • 不确定性直观:当xxx接近4π4\pi4π(训练数据未覆盖的区域),方差急剧增大,说明模型对未观测区域的预测不确定性高。

8. 总结

高斯过程回归是概率性、非参数、非线性的回归方法,核心是用高斯分布描述函数的不确定性,通过条件高斯分布实现预测。其优势在于:

  • 自然输出不确定性估计;
  • 无需手动设计特征;
  • 结合先验知识灵活。

小白入门的关键是:

  1. 掌握高斯分布的“联合-条件”变换;
  2. 理解均值函数和核函数的作用;
  3. 记住预测分布的推导逻辑;
  4. 明确超参数优化的重要性。

若想深入,可进一步学习:

  • 稀疏高斯过程(处理大数据);
  • 变分高斯过程(近似推断);
  • 深度高斯过程(结合神经网络)。

希望本教程能帮助小白迈出GPR的第一步!

案例介绍

模拟温度随时间变化数据:输入为时间点(0到1小时,间隔0.05小时),输出为带噪声的正弦曲线模拟温度值(真实温度为sin(2πx),添加方差为0.01的高斯噪声)。使用高斯过程回归拟合数据,并输出预测值与95%置信区间。

Python代码

importnumpyasnpimportmatplotlib.pyplotaspltfromscipy.linalgimportinv# 导入矩阵求逆函数# 自定义RBF协方差函数defrbf_cov(x1,x2,sigma_f=1.0,l=0.1):""" RBF(平方指数)协方差函数 参数: x1: 输入向量1,形状为(n, 1) x2: 输入向量2,形状为(m, 1) sigma_f: 振幅参数,控制函数波动范围 l: 长度尺度,控制函数光滑度 返回: 协方差矩阵,形状为(n, m) """# 计算欧氏距离的平方dist_sq=np.sum(x1**2,1).reshape(-1,1)+np.sum(x2**2,1)-2*np.dot(x1,x2.T)# RBF协方差函数公式returnsigma_f**2*np.exp(-0.5*dist_sq/l**2)# 高斯过程回归预测函数defgp_regression(x_train,y_train,x_test,sigma_f=1.0,l=0.1,sigma_n=0.1):""" 高斯过程回归预测 参数: x_train: 训练输入数据,形状为(n, 1) y_train: 训练输出数据,形状为(n, 1) x_test: 测试输入数据,形状为(m, 1) sigma_f: RBF协方差函数的振幅参数 l: RBF协方差函数的长度尺度 sigma_n: 观测噪声的标准差 返回: mu: 测试输出的后验均值,形状为(m, 1) sigma: 测试输出的后验标准差,形状为(m, 1) """# 计算训练数据的协方差矩阵KK=rbf_cov(x_train,x_train,sigma_f,l)# 加入观测噪声的协方差矩阵K_noiseK_noise=K+sigma_n**2*np.eye(len(x_train))# 计算训练与测试数据的协方差矩阵K_*K_star=rbf_cov(x_train,x_test,sigma_f,l)# 计算测试数据的协方差矩阵K_**K_star_star=rbf_cov(x_test,x_test,sigma_f,l)# 计算后验均值mu# 步骤: K_* 乘以 K_noise的逆 乘以 y_trainmu=np.dot(np.dot(K_star.T,inv(K_noise)),y_train)# 计算后验协方差Sigma# 步骤: K_** 减去 K_* 乘以 K_noise的逆 乘以 K_*的转置Sigma=K_star_star-np.dot(np.dot(K_star.T,inv(K_noise)),K_star)# 提取对角线元素得到每个测试点的方差,再开方得到标准差sigma=np.sqrt(np.diag(Sigma)).reshape(-1,1)returnmu,sigma# 主程序if__name__=="__main__":# 1. 生成模拟数据# 训练数据: 生成20个随机时间点(0到1小时)np.random.seed(42)# 设置随机种子以确保结果可复现x_train=np.random.rand(20,1)# 20个训练输入点,形状(20,1)# 真实温度为sin(2πx),添加方差0.01的高斯噪声y_train=np.sin(2*np.pi*x_train)+0.1*np.random.randn(20,1)# 测试数据: 生成100个均匀分布的时间点(0到1小时,间隔0.01)x_test=np.linspace(0,1,100).reshape(-1,1)# 形状(100,1)# 2. 进行高斯过程回归预测# 设置超参数: sigma_f=1.0, l=0.1, sigma_n=0.1mu_pred,sigma_pred=gp_regression(x_train,y_train,x_test,sigma_f=1.0,l=0.1,sigma_n=0.1)# 3. 可视化结果plt.figure(figsize=(10,6))# 绘制训练数据点plt.scatter(x_train,y_train,label="Training Data",color="red")# 绘制预测均值曲线plt.plot(x_test,mu_pred,label="GP Prediction Mean",color="blue",linewidth=2)# 绘制95%置信区间(均值±2倍标准差)plt.fill_between(x_test.flatten(),(mu_pred-2*sigma_pred).flatten(),(mu_pred+2*sigma_pred).flatten(),alpha=0.3,label="95% Confidence Interval",color="lightblue")# 添加标题和坐标轴标签plt.title("Gaussian Process Regression - Temperature Prediction")plt.xlabel("Time (hour)")plt.ylabel("Temperature (°C)")# 显示图例plt.legend()# 显示网格线plt.grid(True)# 保存或显示图像plt.savefig("gp_regression_temperature.png")plt.show()

代码深度解析:高斯过程回归(GP)温度预测


一、代码整体框架与数学背景

这段代码实现了高斯过程回归(Gaussian Process Regression, GPR)在模拟温度数据上的应用。高斯过程是一种强大的非参数回归方法,核心是通过核函数(协方差函数)捕捉数据的相关性,并给出预测值及其不确定性区间


二、模块导入与功能说明

importnumpyasnpimportmatplotlib.pyplotaspltfromscipy.linalgimportinv# 导入矩阵求逆函数
  • numpy:用于数值计算(矩阵运算、随机数生成)
  • matplotlib:用于结果可视化
  • scipy.linalg.inv:用于计算矩阵逆(GP后验推导的核心运算)

三、RBF(平方指数)协方差函数实现

数学背景:RBF核是最常用的协方差函数,用于描述“越近的点相关性越强”的光滑过程,公式为:k(x1,x2)=σf2exp⁡(−∣∣x1−x2∣∣22l2) k(x_1, x_2) = \sigma_f^2 \exp\left( -\frac{||x_1 - x_2||^2}{2l^2} \right)k(x1,x2)=σf2exp(2l2∣∣x1x22)其中,σf\sigma_fσf振幅(控制函数波动范围),lll长度尺度(控制函数光滑度:lll越小,函数越“崎岖”;lll越大,函数越“平滑”)。

defrbf_cov(x1,x2,sigma_f=1.0,l=0.1):""" RBF(平方指数)协方差函数 参数: x1: 输入向量1,形状为(n, 1) x2: 输入向量2,形状为(m, 1) sigma_f: 振幅参数,控制函数波动范围 l: 长度尺度,控制函数光滑度 返回: 协方差矩阵,形状为(n, m) """# 计算欧氏距离的平方(广播技巧优化)dist_sq=np.sum(x1**2,1).reshape(-1,1)+np.sum(x2**2,1)-2*np.dot(x1,x2.T)# RBF协方差函数公式实现returnsigma_f**2*np.exp(-0.5*dist_sq/l**2)
关键代码解析:
  1. 欧氏距离平方的计算:利用矩阵运算和广播优化效率,避免双重循环。公式推导:∣∣x1[i]−x2[j]∣∣2=∣∣x1[i]∣∣2+∣∣x2[j]∣∣2−2x1[i]Tx2[j] ||x1[i] - x2[j]||^2 = ||x1[i]||^2 + ||x2[j]||^2 - 2x1[i]^T x2[j]∣∣x1[i]x2[j]2=∣∣x1[i]2+∣∣x2[j]22x1[i]Tx2[j]

    • np.sum(x1**2, 1).reshape(-1, 1):计算x1每个样本的平方和,结果为(n, 1)的列向量
    • np.sum(x2**2, 1):计算x2每个样本的平方和,结果为(1, m)的行向量
    • 2 * np.dot(x1, x2.T):计算x1与x2的内积矩阵,形状为(n, m)三者通过广播相加,最终得到所有样本对的欧氏距离平方矩阵dist_sq(形状(n, m))。
  2. RBF核值计算:将dist_sq代入RBF公式,返回(n, m)的协方差矩阵,描述x1和x2的样本间相关性。


四、高斯过程回归预测函数

数学背景:GP回归的核心是求解后验分布。给定训练数据(xtrain,ytrain)(x_{\text{train}}, y_{\text{train}})(xtrain,ytrain),测试数据xtestx_{\text{test}}xtest的后验分布为:fpost(xtest)∼N(μpost,Σpost) f_{\text{post}}(x_{\text{test}}) \sim \mathcal{N}( \mu_{\text{post}}, \Sigma_{\text{post}} )fpost(xtest)N(μpost,Σpost)其中:

  • 后验均值:μpost=K∗T(K+σn2I)−1ytrain\mu_{\text{post}} = K_{*}^T (K + \sigma_n^2 I)^{-1} y_{\text{train}}μpost=KT(K+σn2I)1ytrain
  • 后验协方差:Σpost=K∗∗−K∗T(K+σn2I)−1K∗\Sigma_{\text{post}} = K_{**} - K_{*}^T (K + \sigma_n^2 I)^{-1} K_{*}Σpost=K∗∗KT(K+σn2I)1K

参数说明:

  • K=k(xtrain,xtrain)K = k(x_{\text{train}}, x_{\text{train}})K=k(xtrain,xtrain):训练数据的协方差矩阵
  • K∗=k(xtrain,xtest)K_{*} = k(x_{\text{train}}, x_{\text{test}})K=k(xtrain,xtest):训练与测试数据的协方差矩阵
  • K∗∗=k(xtest,xtest)K_{**} = k(x_{\text{test}}, x_{\text{test}})K∗∗=k(xtest,xtest):测试数据的协方差矩阵
  • σn2I\sigma_n^2 Iσn2I:观测噪声的协方差矩阵(假设噪声服从N(0,σn2)\mathcal{N}(0, \sigma_n^2)N(0,σn2)
defgp_regression(x_train,y_train,x_test,sigma_f=1.0,l=0.1,sigma_n=0.1):""" 高斯过程回归预测 参数: x_train: 训练输入数据,形状为(n, 1) y_train: 训练输出数据,形状为(n, 1) x_test: 测试输入数据,形状为(m, 1) sigma_f: RBF协方差函数的振幅参数 l: RBF协方差函数的长度尺度 sigma_n: 观测噪声的标准差 返回: mu: 测试输出的后验均值,形状为(m, 1) sigma: 测试输出的后验标准差,形状为(m, 1) """# 计算训练数据的协方差矩阵KK=rbf_cov(x_train,x_train,sigma_f,l)# 加入观测噪声的协方差矩阵K_noise(K + σₙ²I)K_noise=K+sigma_n**2*np.eye(len(x_train))# 计算训练与测试数据的协方差矩阵K_*K_star=rbf_cov(x_train,x_test,sigma_f,l)# 计算测试数据的协方差矩阵K_**K_star_star=rbf_cov(x_test,x_test,sigma_f,l)# 计算后验均值mumu=np.dot(np.dot(K_star.T,inv(K_noise)),y_train)# 计算后验协方差SigmaSigma=K_star_star-np.dot(np.dot(K_star.T,inv(K_noise)),K_star)# 提取对角线元素得到每个测试点的方差,开方为标准差sigma=np.sqrt(np.diag(Sigma)).reshape(-1,1)returnmu,sigma
关键代码解析:
  1. 协方差矩阵计算

    • K:训练数据的自协方差矩阵(n×n)
    • K_noise:加入噪声后的协方差矩阵(n×n),确保矩阵可逆
    • K_star:训练与测试的交叉协方差矩阵(n×m)
    • K_star_star:测试数据的自协方差矩阵(m×m)
  2. 后验均值与协方差计算

    • 后验均值:通过矩阵乘法直接实现数学公式,inv(K_noise)为噪声协方差矩阵的逆
    • 后验协方差:Sigma是(m×m)矩阵,描述测试样本间的相关性
    • 标准差:提取Sigma对角线元素(单个测试点的方差),开方后得到每个测试点的预测不确定性。

五、主程序:数据生成、预测与可视化

if__name__=="__main__":# 1. 生成模拟数据np.random.seed(42)# 设置随机种子,确保结果可复现x_train=np.random.rand(20,1)# 20个随机训练输入点(0~1小时),形状(20,1)y_train=np.sin(2*np.pi*x_train)+0.1*np.random.randn(20,1)# 带噪声的正弦曲线(真实温度+高斯噪声)# 2. 生成测试数据(100个均匀分布的时间点,0~1小时,间隔0.01)x_test=np.linspace(0,1,100).reshape(-1,1)# 形状(100,1)# 3. 进行高斯过程回归预测mu_pred,sigma_pred=gp_regression(x_train,y_train,x_test,sigma_f=1.0,l=0.1,sigma_n=0.1)# 4. 可视化结果plt.figure(figsize=(10,6))plt.scatter(x_train,y_train,label="Training Data",color="red")# 训练数据点plt.plot(x_test,mu_pred,label="GP Prediction Mean",color="blue",linewidth=2)# 预测均值曲线# 绘制95%置信区间(均值±2倍标准差,高斯分布的95%置信范围)plt.fill_between(x_test.flatten(),(mu_pred-2*sigma_pred).flatten(),(mu_pred+2*sigma_pred).flatten(),alpha=0.3,label="95% Confidence Interval",color="lightblue")# 图表装饰plt.title("Gaussian Process Regression - Temperature Prediction")plt.xlabel("Time (hour)")plt.ylabel("Temperature (°C)")plt.legend()plt.grid(True)plt.savefig("gp_regression_temperature.png")# 保存图像plt.show()# 显示图像
关键代码解析:
  1. 模拟数据生成

    • np.random.rand(20, 1):生成20个0~1之间的随机训练时间点
    • np.sin(2*np.pi*x_train):真实温度曲线(周期为1小时的正弦曲线)
    • 0.1*np.random.randn(20,1):添加方差为0.01的高斯噪声(因为randn的标准差为1,乘以0.1后标准差为0.1,方差=0.1²=0.01)
  2. 测试数据生成

    • np.linspace(0, 1, 100):生成100个均匀分布的测试时间点,覆盖0~1小时的完整范围,用于绘制连续的预测曲线。
  3. 可视化

    • plt.scatter:绘制训练数据点(红色)
    • plt.plot:绘制GP预测的均值曲线(蓝色)
    • plt.fill_between:绘制95%置信区间(均值±2σ,α=0.3表示半透明),反映预测的不确定性:
      • 靠近训练数据的区域,置信区间窄(不确定性小)
      • 远离训练数据的区域,置信区间宽(不确定性大)

六、数学建模思考

  1. 核函数选择:RBF核适合平滑过程(如温度随时间的连续变化),若数据有周期性可考虑周期性核(如Exponential Sinusoidal Kernel)。
  2. 超参数优化:代码中sigma_flsigma_n是手动设置的,实际建模中应通过极大似然估计交叉验证优化,以提升预测精度。
  3. 结果解读:GP的优势在于同时给出预测值和不确定性估计,这对数学建模中的“风险评估”(如预测温度异常的置信度)非常重要。

通过以上解析,结合数学公式与代码实现的对应关系,可清晰理解高斯过程回归的核心逻辑及代码细节。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 10:44:20

数学建模优秀论文算法-深度生存网络

深度生存网络入门教程&#xff1a;从生存分析到端到端建模 引言 在医疗、金融、工业等领域&#xff0c;我们常关注**“事件发生时间”**问题&#xff1a; 医疗&#xff1a;癌症患者的生存期&#xff08;“多久会去世”&#xff09;&#xff1b;金融&#xff1a;客户的违约时间&…

作者头像 李华
网站建设 2026/4/22 6:52:37

基于python的大众点评数据爬取分析和推荐系统

基于Python的大众点评数据爬取分析和推荐系统 第一章 系统开发背景与核心意义 大众点评作为本地生活服务核心平台&#xff0c;汇聚了餐饮、休闲、购物等海量商家信息与亿级用户评论&#xff0c;这些数据承载着用户消费偏好、商家服务质量等核心价值。但当前存在明显痛点&#x…

作者头像 李华
网站建设 2026/4/23 10:44:16

网络安全工程师只是“修防火墙”的幕后英雄?

你是否也曾以为&#xff0c;网络安全工程师只是“修防火墙”的幕后英雄&#xff1f; 很多人一提到这个职业&#xff0c;脑海中浮现的就是“敲代码、堵漏洞、防黑客”。 但实际上&#xff0c;网络安全的世界远比这广阔得多——它早已渗透到金融、医疗、能源、政府、军工等各行各…

作者头像 李华
网站建设 2026/4/23 12:11:42

44、gawk安装与配置全解析

gawk安装与配置全解析 1. 配置过程 如果你对使用C语言和类Unix操作系统有所了解,那么这部分内容会很有用。gawk的源代码通常会尽可能遵循正式标准,这意味着gawk使用的是ISO C标准和POSIX操作系统接口标准指定的库例程,其源代码需要使用ISO C编译器(1990标准)。 许多Uni…

作者头像 李华
网站建设 2026/4/23 12:11:11

45、开源 awk 实现及 GNU 通用公共许可证详解

开源 awk 实现及 GNU 通用公共许可证详解 1. gawk 问题反馈与维护人员 许多 GNU/Linux 发行版和基于 BSD 的操作系统都有自己的错误报告系统。当你使用发行版的错误报告系统报告 gawk 的错误时,应该同时发送一份报告到 bug-gawk@gnu.org。原因如下: - 部分发行版不会将错误…

作者头像 李华