重庆智能网站建设公司,小雨wordpress,用php 如何做网站,排名优化是什么意思高斯过程回归#xff08;GPR#xff09;入门教程#xff1a;从概念到实践
一、背景溯源#xff1a;为什么需要高斯过程回归#xff1f;
在机器学习中#xff0c;回归问题的核心是“从数据中学习输入 xxx 到输出 yyy 的映射关系 f(x)f(x)f(x)”。传统方法#xff08;如线…高斯过程回归GPR入门教程从概念到实践一、背景溯源为什么需要高斯过程回归在机器学习中回归问题的核心是“从数据中学习输入xxx到输出yyy的映射关系f(x)f(x)f(x)”。传统方法如线性回归、多项式回归的局限性很明显需要预先假设函数形式比如线性回归假设f(x)wxbf(x) wx bf(x)wxb多项式回归假设f(x)a0a1xa2x2…f(x) a_0 a_1x a_2x^2 \dotsf(x)a0a1xa2x2…但现实中很多数据的规律是非线性、未知的强行假设形式会导致欠拟合或过拟合无法量化不确定性传统模型只能给出单点预测值如y∗f(x∗)y^* f(x^*)y∗f(x∗)但无法告诉我们“这个预测有多可靠”——而在医疗、金融、机器人等领域不确定性估计往往比预测值更重要。高斯过程回归Gaussian Process Regression, GPR作为非参数贝叶斯模型完美解决了这两个问题它不需要假设函数形式而是直接从数据中学习函数的分布它能输出预测值的概率分布均值标准差自然量化不确定性它是贝叶斯框架下的模型能灵活结合先验知识如“函数是光滑的”“数据有周期性”。GPR的理论基础是高斯过程Gaussian Process, GP这一概念由统计学家Geoffrey Box和George Jenkins在1970年代提出后来被机器学习社区如Carl Edward Rasmussen推广到回归任务中成为小样本、高价值数据场景的“瑞士军刀”。二、核心思想把“函数”当作“随机变量”要理解GPR首先要打破“函数是固定公式”的思维定式——GPR把所有可能的函数 $ f(x) $ 看作一个“函数空间”里的随机变量。具体来说对于任意一个输入点xxx函数值f(x)f(x)f(x)是一个随机变量对于任意kkk个输入点x1,x2,…,xkx_1, x_2, \dots, x_kx1,x2,…,xk对应的函数值f(x1),f(x2),…,f(xk)f(x_1), f(x_2), \dots, f(x_k)f(x1),f(x2),…,f(xk)的联合分布是k维高斯分布。这种“任意有限点的联合分布都是高斯”的性质就是高斯过程的定义。换句话说高斯过程是“函数的分布”由均值函数和协方差函数完全描述。1. 高斯过程的数学定义一个高斯过程记为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}\left[ f(x) \right]m(x)E[f(x)]描述所有可能函数在点 $ x $ 处的平均取值比如“大多数函数在 $ x0 $ 处的值接近0”协方差函数k(x,x′)Cov[f(x),f(x′)]E[(f(x)−m(x))(f(x′)−m(x′))]k(x, x) \text{Cov}\left[ f(x), f(x) \right] \mathbb{E}\left[ (f(x)-m(x))(f(x)-m(x)) \right]k(x,x′)Cov[f(x),f(x′)]E[(f(x)−m(x))(f(x′)−m(x′))]描述两个点xxx和x′xx′处函数值的相关性比如“相邻点的函数值更接近”。2. 关键类比从“有限维高斯”到“无限维高斯”我们已经熟悉有限维高斯分布比如一维的N(μ,σ2)N(\mu, \sigma^2)N(μ,σ2)二维的N(μ,Σ)N(\boldsymbol{\mu}, \boldsymbol{\Sigma})N(μ,Σ)而高斯过程是无限维的高斯分布——它覆盖了所有可能的输入点xxx对应的函数值f(x)f(x)f(x)构成一个无限长的随机向量。但高斯过程的“无限性”并不难处理因为我们只需要关注有限个点的联合分布比如训练集的NNN个点X{x1,…,xN}X \{x_1, \dots, x_N\}X{x1,…,xN}对应的函数值f(X)[f(x1),…,f(xN)]Tf(X) [f(x_1), \dots, f(x_N)]^Tf(X)[f(x1),…,f(xN)]T的分布是f(X)∼N(m(X),K(X,X)) f(X) \sim \mathcal{N}\left( m(X), K(X, X) \right)f(X)∼N(m(X),K(X,X))其中m(X)[m(x1),…,m(xN)]Tm(X) [m(x_1), \dots, m(x_N)]^Tm(X)[m(x1),…,m(xN)]T是均值向量K(X,X)K(X, X)K(X,X)是N×NN \times NN×N的协方差矩阵也叫Gram矩阵元素为Ki,jk(xi,xj)K_{i,j} k(x_i, x_j)Ki,jk(xi,xj)。三、算法原理从先验到后验的贝叶斯更新GPR的核心流程是贝叶斯推断用训练数据更新对函数f(x)f(x)f(x)的先验分布得到后验分布再用后验分布预测新点。1. 步骤1定义先验分布先验分布是我们对函数f(x)f(x)f(x)的初始假设由均值函数和协方差函数决定。常见选择均值函数通常设为0m(x)0m(x) 0m(x)0因为数据可以通过中心化减去均值消除偏移协方差函数选择能刻画数据规律的形式如光滑性、周期性最常用的是平方指数Squared Exponential, 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(−2l2∥x−x′∥2)其中σf2\sigma_f^2σf2信号方差控制函数的波动幅度越大函数越“起伏”lll长度尺度控制函数随 $ x $ 变化的快慢越小函数变化越“剧烈”∥x−x′∥2\|x - x\|^2∥x−x′∥2输入点 $ x $ 和 $ x’ $ 的欧氏距离平方。SE协方差函数的特点是光滑性相邻点的函数值高度相关因此先验中的函数都是光滑曲线。2. 步骤2加入观测噪声训练数据中的输出yiy_iyi不是纯函数值f(xi)f(x_i)f(xi)而是带有噪声yif(xi)ϵi y_i f(x_i) \epsilon_iyif(xi)ϵi其中ϵi∼N(0,σn2)\epsilon_i \sim \mathcal{N}(0, \sigma_n^2)ϵi∼N(0,σn2)是独立同分布的高斯噪声σn2\sigma_n^2σn2是噪声方差。因此训练集的输出向量y[y1,…,yN]T\boldsymbol{y} [y_1, \dots, y_N]^Ty[y1,…,yN]T的分布是y∼N(m(X),K(X,X)σn2I) \boldsymbol{y} \sim \mathcal{N}\left( m(X), K(X, X) \sigma_n^2 I \right)y∼N(m(X),K(X,X)σn2I)其中III是N×NN \times NN×N单位矩阵噪声独立协方差矩阵对角线为σn2\sigma_n^2σn2。3. 步骤3计算后验分布核心推导根据贝叶斯定理后验分布p(f∣X,y)p(f | X, \boldsymbol{y})p(f∣X,y)满足p(f∣X,y)∝p(y∣f,X)⋅p(f∣X) p(f | X, \boldsymbol{y}) \propto p(\boldsymbol{y} | f, X) \cdot p(f | X)p(f∣X,y)∝p(y∣f,X)⋅p(f∣X)其中p(f∣X)p(f | X)p(f∣X)先验分布高斯p(y∣f,X)p(\boldsymbol{y} | f, X)p(y∣f,X)似然高斯因为噪声是高斯的。关键性质高斯分布的共轭性——先验和似然都是高斯后验也一定是高斯我们需要预测新点x∗x^*x∗的函数值f(x∗)f(x^*)f(x∗)因此考虑联合分布[yf(x∗)]∼N([m(X)m(x∗)],[K(X,X)σn2IK(X,x∗)K(x∗,X)k(x∗,x∗)]) \begin{bmatrix} \boldsymbol{y} \\ f(x^*) \end{bmatrix} \sim \mathcal{N}\left( \begin{bmatrix} m(X) \\ m(x^*) \end{bmatrix}, \begin{bmatrix} K(X,X) \sigma_n^2 I K(X, x^*) \\ K(x^*, X) k(x^*, x^*) \end{bmatrix} \right)[yf(x∗)]∼N([m(X)m(x∗)],[K(X,X)σn2IK(x∗,X)K(X,x∗)k(x∗,x∗)])其中K(X,x∗)[k(x1,x∗),…,k(xN,x∗)]TK(X, x^*) [k(x_1, x^*), \dots, k(x_N, x^*)]^TK(X,x∗)[k(x1,x∗),…,k(xN,x∗)]T训练点与新点的协方差向量K(x∗,X)K(X,x∗)TK(x^*, X) K(X, x^*)^TK(x∗,X)K(X,x∗)T转置k(x∗,x∗)k(x^*, x^*)k(x∗,x∗)新点自身的协方差即σf2\sigma_f^2σf2因为x∗x′x^* xx∗x′。根据高斯分布的条件概率公式若联合分布[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])则条件分布Z2∣Z1z1Z_2 | Z_1 z_1Z2∣Z1z1为Z2∣Z1z1∼N(μ2Σ21Σ11−1(z1−μ1),Σ22−Σ21Σ11−1Σ12) Z_2 | Z_1 z_1 \sim \mathcal{N}\left( \mu_2 \Sigma_{21} \Sigma_{11}^{-1} (z_1 - \mu_1), \Sigma_{22} - \Sigma_{21} \Sigma_{11}^{-1} \Sigma_{12} \right)Z2∣Z1z1∼N(μ2Σ21Σ11−1(z1−μ1),Σ22−Σ21Σ11−1Σ12)将此公式应用到我们的联合分布中令Z1y,Z2f(x∗)Z_1 \boldsymbol{y}, Z_2 f(x^*)Z1y,Z2f(x∗)可得到后验分布的均值和协方差1后验均值预测值mpost(x∗)m(x∗)K(x∗,X)(K(X,X)σn2I)−1(y−m(X)) m_{\text{post}}(x^*) m(x^*) K(x^*, X) \left( K(X,X) \sigma_n^2 I \right)^{-1} \left( \boldsymbol{y} - m(X) \right)mpost(x∗)m(x∗)K(x∗,X)(K(X,X)σn2I)−1(y−m(X))2后验协方差不确定性kpost(x∗,x∗)k(x∗,x∗)−K(x∗,X)(K(X,X)σn2I)−1K(X,x∗) k_{\text{post}}(x^*, x^*) k(x^*, x^*) - K(x^*, X) \left( K(X,X) \sigma_n^2 I \right)^{-1} K(X, x^*)kpost(x∗,x∗)k(x∗,x∗)−K(x∗,X)(K(X,X)σn2I)−1K(X,x∗)4. 步骤4预测输出含噪声如果要预测新点的输出y∗y^*y∗而非纯函数值f(x∗)f(x^*)f(x∗)需要加上新的噪声ϵ∗∼N(0,σn2)\epsilon^* \sim \mathcal{N}(0, \sigma_n^2)ϵ∗∼N(0,σn2)因此y∗∣X,y,x∗∼N(mpost(x∗),kpost(x∗,x∗)σn2) y^* | X, \boldsymbol{y}, x^* \sim \mathcal{N}\left( m_{\text{post}}(x^*), k_{\text{post}}(x^*, x^*) \sigma_n^2 \right)y∗∣X,y,x∗∼N(mpost(x∗),kpost(x∗,x∗)σn2)解释预测值是后验均值mpost(x∗)m_{\text{post}}(x^*)mpost(x∗)预测的不确定性是后验标准差kpost(x∗,x∗)σn2\sqrt{k_{\text{post}}(x^*, x^*) \sigma_n^2}kpost(x∗,x∗)σn2——这个值越大预测越不可靠。四、完整模型求解步骤小白可落地GPR的求解过程可拆分为7个具体步骤每一步都有明确的操作指南步骤1数据准备收集训练数据D{(x1,y1),(x2,y2),…,(xN,yN)}D \{(x_1, y_1), (x_2, y_2), \dots, (x_N, y_N)\}D{(x1,y1),(x2,y2),…,(xN,yN)}其中xix_ixi是输入特征可以是一维或多维yiy_iyi是输出标签对输入特征进行标准化如xi′(xi−μx)/σxx_i (x_i - \mu_x)/\sigma_xxi′(xi−μx)/σx因为协方差函数如SE对特征尺度敏感标准化后能加速超参数优化对输出标签进行中心化如yi′yi−μyy_i y_i - \mu_yyi′yi−μy方便后续设均值函数m(x)0m(x) 0m(x)0预测时再还原均值。步骤2选择均值函数与协方差函数均值函数优先选m(x)0m(x) 0m(x)0若数据已中心化或简单线性函数如m(x)abxm(x) a bxm(x)abx协方差函数根据数据规律选择以下为常见类型步骤3初始化超参数协方差函数和噪声的参数称为超参数如SE的 $ \sigma_f^2, l $噪声的 $ \sigma_n^2 $。初始值可根据数据经验设置σf2\sigma_f^2σf2设为输出数据的方差$ \sigma_f^2 \text{Var}(y) $lll设为输入特征的标准差$ l \sigma_x $σn2\sigma_n^2σn2设为小正数如 $ 0.1 $避免过拟合。步骤4优化超参数关键超参数直接决定模型性能需通过最大化边际似然Marginal Likelihood优化。边际似然是对函数fff积分后的似然消除了fff的影响p(y∣X,θ)∫p(y∣f,X,θ)p(f∣X,θ)df p(\boldsymbol{y} | X, \theta) \int p(\boldsymbol{y} | f, X, \theta) p(f | X, \theta) dfp(y∣X,θ)∫p(y∣f,X,θ)p(f∣X,θ)df其中θ\thetaθ是超参数集合如 $ \theta {\sigma_f^2, l, \sigma_n^2} $。对高斯分布边际似然的对数形式更易计算为logp(y∣X,θ)−12(y−m(X))TΣ−1(y−m(X))−12log∣Σ∣−N2log(2π) \log p(\boldsymbol{y} | X, \theta) -\frac{1}{2} (\boldsymbol{y} - m(X))^T \Sigma^{-1} (\boldsymbol{y} - m(X)) - \frac{1}{2} \log|\Sigma| - \frac{N}{2} \log(2\pi)logp(y∣X,θ)−21(y−m(X))TΣ−1(y−m(X))−21log∣Σ∣−2Nlog(2π)其中ΣK(X,X;θ)σn2I\Sigma K(X,X; \theta) \sigma_n^2 IΣK(X,X;θ)σn2I训练集的协方差矩阵噪声。优化方法用数值优化算法如L-BFGS、梯度下降最大化logp(y∣X,θ)\log p(\boldsymbol{y} | X, \theta)logp(y∣X,θ)计算对数边际似然对每个超参数的梯度需用矩阵求导规则指导优化方向。步骤5计算后验均值与协方差用优化后的超参数θ∗\theta^*θ∗计算3. 训练集协方差矩阵K(X,X;θ∗)K(X,X; \theta^*)K(X,X;θ∗)4. 新点与训练集的协方差向量K(x∗,X;θ∗)K(x^*, X; \theta^*)K(x∗,X;θ∗)5. 后验均值预测值mpost(x∗)K(x∗,X;θ∗)Σ−1ym_{\text{post}}(x^*) K(x^*, X; \theta^*) \Sigma^{-1} \boldsymbol{y}mpost(x∗)K(x∗,X;θ∗)Σ−1y若m(x)0m(x)0m(x)06. 后验协方差不确定性kpost(x∗,x∗)k(x∗,x∗;θ∗)−K(x∗,X;θ∗)Σ−1K(X,x∗;θ∗)k_{\text{post}}(x^*, x^*) k(x^*, x^*; \theta^*) - K(x^*, X; \theta^*) \Sigma^{-1} K(X, x^*; \theta^*)kpost(x∗,x∗)k(x∗,x∗;θ∗)−K(x∗,X;θ∗)Σ−1K(X,x∗;θ∗)。步骤6预测新点对每个新输入x∗x^*x∗输出点预测y^∗mpost(x∗)μy\hat{y}^* m_{\text{post}}(x^*) \mu_yy^∗mpost(x∗)μy还原中心化的均值不确定性区间y^∗±2kpost(x∗,x∗)σn2\hat{y}^* \pm 2\sqrt{k_{\text{post}}(x^*, x^*) \sigma_n^2}y^∗±2kpost(x∗,x∗)σn295%置信区间。步骤7评估模型性能用验证集如将训练集按8:2拆分评估模型回归指标均方误差MSE、平均绝对误差MAE不确定性指标负对数概率NLL——衡量预测分布与真实值的匹配程度越小越好NLL−1M∑i1Mlogp(yi∗∣X,y,xi∗) \text{NLL} -\frac{1}{M} \sum_{i1}^M \log p(y_i^* | X, \boldsymbol{y}, x_i^*)NLL−M1i1∑Mlogp(yi∗∣X,y,xi∗)其中 $ M $ 是验证集大小。五、适用边界GPR的“能”与“不能”GPR是强大的工具但并非万能需明确其适用场景和局限性。1. 优势适用场景小数据集计算复杂度为O(N3)O(N^3)O(N3)协方差矩阵求逆小样本N1000N 1000N1000时快速且准确需要不确定性估计如医疗诊断“预测患者康复率为70%置信区间60%-80%”、金融风险“股票涨幅预测的标准差为2%”非线性关系无需假设函数形式能拟合复杂曲线如正弦函数、指数函数结合先验知识通过协方差函数融入领域知识如“数据有周期性”“相邻点相关”。2. 局限性不适用场景大数据集当N104N 10^4N104时O(N3)O(N^3)O(N3)的计算量会导致内存溢出或计算超时高维数据输入特征维度d20d 20d20时“维度灾难”会让协方差函数无法捕捉相关性高维空间中所有点的距离都很大非高斯噪声GPR假设噪声是高斯的若噪声是重尾如 outliers 多或非对称的性能会下降超参数敏感协方差函数选择或超参数优化不当会导致过拟合如lll太小函数波动过大或欠拟合如lll太大函数太光滑。六、总结GPR的核心逻辑高斯过程回归的本质是用高斯分布描述函数的不确定性通过贝叶斯更新从先验到后验最终输出“预测值不确定性”。对小白来说最关键的是理解高斯过程是“函数的分布”由均值和协方差函数定义后验分布是条件高斯分布均值是预测值协方差是不确定性协方差函数和超参数决定了模型的“先验假设”是性能的关键。通过一个简单的一维曲线拟合例子如用SE协方差函数拟合ysin(x)噪声y \sin(x) \text{噪声}ysin(x)噪声你可以直观看到GPR的效果先验是一组光滑曲线训练数据后后验曲线会“收缩”到训练点附近且预测点的不确定性随远离训练数据而增大——这正是GPR的魅力所在案例解析importnumpyasnpimportmatplotlib.pyplotaspltfromscipy.optimizeimportminimize# ------------------------------# 数据生成函数生成带噪声的正弦曲线数据# ------------------------------defgenerate_data(n_samples50,noise_std0.1):# 生成输入x在0到4π之间均匀采样Xnp.linspace(0,4*np.pi,n_samples)[:,np.newaxis]# 生成真实函数值y sin(x)y_truenp.sin(X).flatten()# 生成带高斯噪声的观测值y_noisyy_truenp.random.normal(0,noise_std,sizen_samples)returnX,y_noisy,y_true# ------------------------------# 平方指数(SE)协方差函数# ------------------------------defse_covariance(X1,X2,sigma_f,length_scale):# 计算欧氏距离的平方distancenp.sum(X1**2,1)[:,np.newaxis]np.sum(X2**2,1)-2*np.dot(X1,X2.T)# 平方指数协方差矩阵Ksigma_f**2*np.exp(-0.5*distance/(length_scale**2))returnK# ------------------------------# 对数边际似然函数用于超参数优化# ------------------------------deflog_marginal_likelihood(theta,X,y,sigma_n):# 解析超参数sigma_f和length_scalesigma_fnp.exp(theta[0])length_scalenp.exp(theta[1])# 计算训练集协方差矩阵K σn²IKse_covariance(X,X,sigma_f,length_scale)sigma_n**2*np.eye(X.shape[0])# 计算K的逆和行列式K_invnp.linalg.inv(K)log_det_Knp.linalg.slogdet(K)[1]# 对数边际似然公式lml-0.5*y.T K_inv y-0.5*log_det_K-0.5*X.shape[0]*np.log(2*np.pi)# 返回负的lml因为优化器默认最小化return-lml# ------------------------------# 高斯过程回归预测函数# ------------------------------defgpr_predict(X_train,y_train,X_test,theta_opt,sigma_n):# 解析优化后的超参数sigma_f_optnp.exp(theta_opt[0])length_scale_optnp.exp(theta_opt[1])# 计算训练集协方差矩阵K_trainse_covariance(X_train,X_train,sigma_f_opt,length_scale_opt)sigma_n**2*np.eye(X_train.shape[0])# 计算测试集与训练集的协方差向量K_test_trainse_covariance(X_test,X_train,sigma_f_opt,length_scale_opt)# 计算测试集自身的协方差矩阵K_testse_covariance(X_test,X_test,sigma_f_opt,length_scale_opt)# 计算后验均值和协方差K_train_invnp.linalg.inv(K_train)mu_postK_test_train K_train_inv y_train cov_postK_test-K_test_train K_train_inv K_test_train.T# 预测值的方差对角线元素var_postnp.diag(cov_post)# 带噪声的预测方差用于置信区间var_post_noisyvar_postsigma_n**2returnmu_post,np.sqrt(var_post_noisy)# ------------------------------# 主程序数据生成、模型训练与预测# ------------------------------if__name____main__:# 步骤1生成训练数据X_train,y_train,y_true_traingenerate_data(n_samples50,noise_std0.1)# 步骤2数据预处理# 输入标准化X_meannp.mean(X_train)X_stdnp.std(X_train)X_train_scaled(X_train-X_mean)/X_std# 输出中心化y_meannp.mean(y_train)y_train_centeredy_train-y_mean# 步骤3初始化超参数取对数后的值便于优化initial_theta[np.log(np.std(y_train)),np.log(np.std(X_train))]# [log(sigma_f), log(length_scale)]sigma_n0.1# 噪声方差初始值# 步骤4优化超参数resultminimize(funlambdatheta:log_marginal_likelihood(theta,X_train_scaled,y_train_centered,sigma_n),x0initial_theta,methodL-BFGS-B)theta_optresult.x# 步骤5生成测试数据用于预测X_testnp.linspace(0,4*np.pi,200)[:,np.newaxis]X_test_scaled(X_test-X_mean)/X_std# 步骤6进行预测mu_post_centered,std_postgpr_predict(X_train_scaled,y_train_centered,X_test_scaled,theta_opt,sigma_n)# 还原中心化的预测值mu_postmu_post_centeredy_mean# 步骤7可视化结果plt.figure(figsize(10,6))# 真实函数曲线plt.plot(X_test,np.sin(X_test).flatten(),r--,labelTrue Function (sin(x)))# 训练数据点plt.scatter(X_train,y_train,colorb,labelTraining Data (Noisy))# GPR预测均值plt.plot(X_test,mu_post,k-,labelGPR Prediction Mean)# 95%置信区间均值±2倍标准差plt.fill_between(X_test.flatten(),mu_post-2*std_post,mu_post2*std_post,alpha0.1,colork,label95% Confidence Interval)plt.xlabel(Input x)plt.ylabel(Output y)plt.title(Gaussian Process Regression - Sinusoidal Curve Fitting)plt.legend()plt.grid(True)plt.show()OK今天数学建模算法分享就到这里结束了若内容对大家有所帮助,可以收藏慢慢看,感谢大家支持本文有若有不足之处希望各位帅哥美女们能给出宝贵的意见。谢谢大家初来乍到本期制作不易希望各位帅哥美女们能动动小手三连走一走如果大家觉得主播写的还不错的话可以关注一下每日都会有推文的期待一下明天的干货把嘿嘿~