十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

scikit-learn 高斯过程指南:GaussianProcessRegressor / GaussianProcessClassifier 与核函数全解析

scikit-learn 高斯过程指南:GaussianProcessRegressor / GaussianProcessClassifier 与核函数全解析 scikit-learn 高斯过程指南GaussianProcessRegressor / GaussianProcessClassifier 与核函数全解析【免费下载链接】scikit-learnscikit-learn: machine learning in Python项目地址: https://gitcode.com/gh_mirrors/sc/scikit-learn导读本文以 doc/modules/gaussian_process.rst 为骨架系统讲解 scikit-learn 中高斯过程Gaussian Processes, GP模块的三大组成部分——高斯过程回归GPR、高斯过程分类GPC以及核函数KernelAPI。你将掌握 GP 的建模原理与优缺点、GPR/GPC 的完整参数与调用方式、scikit-learn 内置核函数族的数学定义与组合技巧并了解底层实现对应的源码位置sklearn/gaussian_process/能够直接在项目中搭建带不确定性估计的回归与概率分类模型。1. 高斯过程概览非参数监督学习中的概率建模方法高斯过程是一种非参数nonparametric监督学习方法用于解决回归与概率分类问题。与在参数空间上做推断的传统模型不同GP 直接在函数空间上定义先验它将一组随机变量即待学习的函数在所有输入点上的取值建模为联合高斯分布任何一个有限输入集合上的函数值都服从多元正态分布。GP 的显著优势体现在三方面预测插值观测点至少在常规核函数下预测曲线会精确穿过训练样本点详见 test_gpr.py 中test_gpr_interpolation对插值性质的验证y_pred与y几乎一致且预测协方差的对角线为 0预测带概率高斯输出预测时同时给出均值与标准差从而可以计算经验置信区间据此判断是否需要在感兴趣的区域重新拟合在线拟合、自适应拟合核函数高度灵活可以指定不同的核见后文 第 5 节既可以使用内置核也可以自定义核。同时GP 也有两个明显的劣势scikit-learn 的实现不是稀疏的——预测会使用全部样本/特征的信息在高维空间中效率会下降——当特征数量超过几十个时尤其明显其复杂度对样本量呈立方级见后文分析。2. 高斯过程回归GPR2.1 模型原理与实现依据GaussianProcessRegressor实现了用于回归的高斯过程。其思路是先指定 GP 的先验再结合训练样本的似然函数得到后验从而给出均值与标准差形式的概率预测。先验均值被假设为常数且为 0normalize_yFalse时或在normalize_yTrue时取训练数据的均值实现见 fit归一化会在预测时反转回来先验协方差通过传入的核对象指定核的超参数在拟合时通过最大化对数边际似然log-marginal-likelihood, LML进行优化使用传入的optimizer。由于 LML 可能存在多个局部最优解可通过n_restarts_optimizer让优化器从多个起点重复启动第一次运行总是从核的初始超参数出发后续运行从允许取值范围内随机选出的超参数出发若希望固定初始超参数可把optimizer设为None。实现基于 Rasmussen Williams《Gaussian Processes for Machine Learning》[RW2006]中的Algorithm 2.1。在 fit 中可以看到与算法一一对应的步骤计算核矩阵K kernel(X_train)并叠加噪声K[diag] alpha对K做Cholesky 分解得到下三角矩阵L_对应 Alg. 2.1 第 2 行用cho_solve求解alpha_ L^T \ (L \ y)对应第 3 行。在 predict 中均值预测对应K(X_test, X_train) alpha_Alg. 2.1 第 4 行协方差/方差预测对应kernel(X_test) - V.T V第 5–6 行其中V L \ K(X_test, X_train)^T。若因数值问题出现负方差实现会将其截断为 0 并发出警告。2.2 完整参数说明GaussianProcessRegressor的构造参数与 源码签名 一致参数类型/默认值含义kernelkernel instance默认None指定 GP 的协方差函数。为None时使用默认核ConstantKernel() * RBF()见 fit。核超参数在拟合时会被优化除非其边界标记为fixed或optimizerNonealphafloat 或 shape(n_samples,)的数组默认1e-10拟合时加到核矩阵对角线的值。它既能保证矩阵正定、避免数值问题也可解释为训练观测上的附加高斯测量噪声方差数组形式可指定逐数据点的噪声。注意它不同于WhiteKernel后者由数据估计噪声水平。实现中即K[np.diag_indices_from(K)] self.alphafit本质是Tikhonov 正则化optimizerfmin_l_bfgs_b、callable 或None默认fmin_l_bfgs_b优化核参数的方式。默认为scipy.optimize.minimize的 L-BFGS-B 算法传 callable 需满足签名def optimizer(obj_func, initial_theta, bounds)返回(theta_opt, func_min)传None则固定核参数见 _constrained_optimizationn_restarts_optimizerint默认0优化器重启次数。0表示只运行一次从核初始参数出发大于 0 时额外运行从允许取值空间内对数均匀随机采样的 θ 出发且此时所有边界必须有限否则在 fit 中抛出ValueErrornormalize_ybool默认False是否对目标值 y 去均值并缩放为单位方差推荐用于零均值单位方差先验。预测时归一化会被反转predictcopy_X_trainbool默认True是否持久化复制训练数据False时仅存引用外部修改数据可能导致预测变化n_targetsint默认None目标值的维度数用于在fit之前从先验采样即未拟合时调用sample_y时确定输出数量fit之后被忽略versionadded 1.3random_stateint / RandomState / None控制优化重启时初始 θ 的随机采样传 int 可复现除标准 scikit-learn 估计器 API 外GaussianProcessRegressor还有三个扩展能力与 docstring 一致允许在未拟合时基于 GP 先验进行预测predict在无X_train_时直接使用核输出见 _gpr.py这是其requires_fitFalse的来源见sklearn_tags提供sample_y(X)方法从 GPR先验或后验中采样并在给定输入处求值。实现基于predict(X, return_covTrue)后做multivariate_normal采样_gpr.py暴露log_marginal_likelihood(theta)方法可被外部用于其他超参数选择方式如马尔可夫链蒙特卡洛 MCMC。实现见 _gpr.py支持eval_gradientTrue返回关于核超参数的梯度Eq. 5.9, p.114 of [RW2006]。2.3 实战示例噪声场景下的 GPR官方入门示例 examples/gaussian_process/plot_gpr_noisy_targets.py 完整演示了两种场景。核心代码如下噪声已知场景import numpy as np from sklearn.gaussian_process import GaussianProcessRegressor from sklearn.gaussian_process.kernels import RBF # 生成真实过程 f(x) x * sin(x) 的数据 X np.linspace(start0, stop10, num1_000).reshape(-1, 1) y np.squeeze(X * np.sin(X)) rng np.random.RandomState(1) training_indices rng.choice(np.arange(y.size), size6, replaceFalse) X_train, y_train X[training_indices], y[training_indices] # 噪声无界场景RBF 核 常数幅值 kernel 1 * RBF(length_scale1.0, length_scale_bounds(1e-2, 1e2)) gaussian_process GaussianProcessRegressor(kernelkernel, n_restarts_optimizer9) gaussian_process.fit(X_train, y_train) # 带噪声目标alpha 被解释为高斯噪声的方差 noise_std 0.75 y_train_noisy y_train rng.normal(loc0.0, scalenoise_std, sizey_train.shape) gaussian_process GaussianProcessRegressor( kernelkernel, alphanoise_std**2, n_restarts_optimizer9 ) gaussian_process.fit(X_train, y_train_noisy) # 概率预测均值 标准差构建 95% 置信区间 mean_prediction, std_prediction gaussian_process.predict(X, return_stdTrue)用plt.fill_between(X.ravel(), mean_prediction - 1.96 * std_prediction, mean_prediction 1.96 * std_prediction)即可绘制 95% 置信区间。运行后可以观察到靠近训练样本处置信区间很窄远离训练数据处预测不确定性显著增大——这正是 GP概率化预测的直观体现。文中插图对应的可运行示例还包括plot_gpr_noisy_targets.py无噪声 vs 已知噪声水平plot_gpr_noisy.py用WhiteKernel估计噪声水平plot_compare_gpr_krr.pyGPR 与核岭回归 KRR 的对比展示点估计与贝叶斯建模的差异plot_gpr_co2.py真实 CO2 浓度数据上的 GPR2.4 一个需要注意的细节alpha与WhiteKernel的区别alpha作为标量/数组直接加到核矩阵对角线fit提供的是已知/固定的噪声方差而把WhiteKernel作为Sum核的组成部分时其noise_level超参数会在拟合时由数据自动估计。两者都是处理噪声的常用手段选择依据是噪声水平已知则用alpha未知则用WhiteKernel。3. 高斯过程分类GPC3.1 模型原理拉普拉斯近似下的概率分类GaussianProcessClassifier实现用于概率分类的高斯过程测试预测以类别概率形式输出。其建模方式为在潜在函数latent function(f) 上放置 GP 先验再通过链接函数link function(\pi) 将 (f)压缩为概率分类结果。(f) 被称为麻烦函数nuisance function——它的取值本身不被观测、也不直接相关其作用是方便模型表述预测时会被积分消除。与回归不同分类中离散类别标签对应的似然不是高斯似然因此即使先验是高斯分布潜在函数 (f) 的后验也不是高斯的。scikit-learn 使用与 logistic 链接函数logit对应的非高斯似然并用拉普拉斯近似Laplace approximation将非高斯后验近似为高斯分布详见 [RW2006] 第 3 章。内部实现为_BinaryGaussianProcessClassifierLaplace_gpc.py其实现基于 [RW2006] 的 Algorithm 3.1、3.2 与 5.1。GPC 的先验均值假设为 0先验协方差同样由传入的核对象指定核超参数在拟合时通过最大化 LML 优化optimizer与n_restarts_optimizer的语义与 GPR 完全一致。3.2 从源码看 GPC 的关键参数与多分类策略GaussianProcessClassifier的构造参数源码签名参数类型/默认值含义kernelkernel instance默认None协方差函数。None时使用默认核1.0 * RBF(1.0)。注意不能传入CompoundKernelfit 会直接抛错optimizerfmin_l_bfgs_b/ callable /None同 GPR默认 L-BFGS-BNone则固定核参数n_restarts_optimizerint默认0优化重启次数语义同 GPRmax_iter_predictint默认100预测阶段用牛顿法逼近后验的最大迭代次数。调小可省时但结果变差传给底层_posterior_modewarm_startbool默认False是否启用热启动把上次牛顿迭代得到的后验众数解作为下一次_posterior_mode的初始化可在超参数优化的多次调用中加速收敛copy_X_trainbool默认True同 GPRrandom_stateint / RandomState / None控制重启采样传 int 可复现multi_class{one_vs_rest, one_vs_one}默认one_vs_rest多分类策略见下n_jobsint默认None多个二分类问题的并行计算任务数-1表示使用全部处理器多分类策略GPC 通过内部求解多个二分类任务来支持多分类两种模式如下one-vs-rest一对多为每个类别拟合一个二分类 GP 分类器将其与该类别之外的其余样本区分one-vs-one一对一为每一对类别拟合一个二分类 GP 分类器仅用于区分这两个类别。从源码看多分类时底层会包上OneVsRestClassifier或OneVsOneClassifierfit二分类时直接使用_BinaryGaussianProcessClassifierLaplace。两种模式各有取舍one-vs-one 通常计算更便宜GP 分类的复杂度随数据集规模立方级增长主要来自核矩阵的 Cholesky 分解one-vs-one 求解的是训练集子集上的多个小问题而非全量数据上的少问题因此可能显著更快但one-vs-one 不支持概率预测调用predict_proba会抛出ValueErrorpredict_proba只支持普通predict需要注意GPC目前并未在内部实现真正的多分类拉普拉斯近似而是通过上述 one-vs-rest / one-vs-one 组合若干二分类任务实现。3.3 GPC 的扩展方法与完整示例latent_mean_and_variance(X)当需要潜在函数 (f) 的信息均值 (\bar{f_*}) 与方差 (\text{Var}[f_*])见 [RW2006] 式 (3.21) 与 (3.24)时可调用此方法实现基于 Algorithm 3.2且仅支持二分类多分类时抛ValueError见 _gpc.pyversionadded 1.7predict_proba(X)返回 shape 为(n_samples, n_classes)的概率估计列按classes_排序log_marginal_likelihood(theta)多分类时返回各 one-vs-rest 分类器 LML 的均值fit且多分类下不支持梯度计算NotImplementedError见 _gpc.py。参考官方 API 文档示例与 docstring 一致from sklearn.datasets import load_iris from sklearn.gaussian_process import GaussianProcessClassifier from sklearn.gaussian_process.kernels import RBF X, y load_iris(return_X_yTrue) kernel 1.0 * RBF(1.0) gpc GaussianProcessClassifier(kernelkernel, random_state0).fit(X, y) gpc.score(X, y) # 约 0.9866 gpc.predict_proba(X[:2]) # 每类的概率估计3.4 官方示例与观测结论文档围绕 GPC 提供了四个带插图的示例分别揭示了不同侧面的行为GPC 的概率预测plot_gpc.py对 RBF 核在不同超参数下的预测概率进行比较。一个反直觉的结论是虽然 LML 优化出的超参数具有明显更大的 LML但在测试集上的 log-loss 却略差——优化后的超参数在类别边界处概率变化陡峭这是好事却在远离边界处预测概率接近 0.5这是坏事。该不利效应正是 GPC 内部使用的拉普拉斯近似造成的。第二张图展示 LML 随超参数变化的曲面并用黑点标出第一张图中使用的两组超参数。XOR 数据集上的 GPCplot_gpc_xor.py对比平稳各向同性核RBF与非平稳核DotProduct。在该数据上DotProduct结果明显更好因为类边界是线性的且与坐标轴重合但实践中平稳核如 RBF通常表现更优。iris 数据集上的 GPCplot_gpc_iris.py在二维化的 iris 数据上对比各向同性 RBF 与各向异性 RBF展示 GPC 对非二分类问题的适用性。各向异性 RBF 通过给两个特征维分配不同 length-scale获得了略高的 LML。4. 核函数库全解析Kernels for Gaussian Processes4.1 核函数的基本概念与分类核Kernel在 GP 语境下也称协方差函数是 GP 的关键组成决定了 GP 先验与后验的形状。它编码了对待学习函数的假设通过定义两个数据点的相似度结合相似的数据点应有相似的目标值这一假设来建模。核可分为两大类平稳核stationary只依赖两数据点之间的距离而不依赖其绝对值即 (k(x_i, x_j) k(d(x_i, x_j)))对输入空间的平移不变。平稳核又可细分为各向同性核isotropic还对输入空间的旋转不变length-scale 为标量各向异性核anisotropiclength-scale 是与输入同维的向量。非平稳核non-stationary还依赖数据点的具体取值如DotProduct。详细理论见 [RW2006] 第 4 章如何在结构化数据上自定义核见示例 plot_gpr_on_structured_data.py其自定义核实现可参考 tests/_mini_sequence_kernel.py核组合的实践经验可参考 [Duv2014]《The Kernel Cookbook》。4.2 Kernel API一切核的抽象基类所有核的抽象基类是Kernel其核心能力包括计算协方差__call__(X, YNone, eval_gradientFalse)用于计算 X 内所有数据点对的自协方差Y 为None或 X 与 Y 之间的交叉协方差。对除WhiteKernel外的所有核恒有k(X) K(X, YX)仅取对角线diag(X)比np.diag(k(X, X))更高效两者结果相等超参数 θ核由超参数向量 θ 参数化控制 length-scale、周期等。在__call__中设置eval_gradientTrue会返回 shape 为(len(X), len(X), len(theta))的解析梯度数组其中[i, j, l]为 (\partial k_\theta(x_i, x_j) / \partial \log(\theta_l))。该梯度被 GPR/GPC 用于计算 LML 的梯度进而通过梯度上升确定使 LML 最大的 θ。每个超参数在创建核实例时需指定初始值与边界当前 θ 可通过theta属性读写边界通过bounds属性访问。注意theta与bounds返回的都是 log 变换后的值内部值对梯度优化更友好。每个超参数的规格以Hyperparameter实例存储一个核若含名为x的超参数就必须具有self.x与self.x_bounds两个属性估计器式接口Kernel实现了与BaseEstimator类似的get_params()、set_params()、clone()因此核也可以被Pipeline、GridSearchCV等元估计器使用。由于核可以通过算子嵌套见下嵌套参数的命名可能较复杂二元算子中左操作数参数加k1__前缀右操作数加k2__前缀此外还有便捷方法clone_with_theta(theta)返回复制自身但把超参数设为 theta的核。下面的官方示例见 文档直观展示了嵌套核的参数结构与 log 变换 from sklearn.gaussian_process.kernels import ConstantKernel, RBF kernel ConstantKernel(constant_value1.0, constant_value_bounds(0.0, 10.0)) * RBF(length_scale0.5, length_scale_bounds(0.0, 10.0)) RBF(length_scale2.0, length_scale_bounds(0.0, 10.0)) for hyperparameter in kernel.hyperparameters: print(hyperparameter) Hyperparameter(namek1__k1__constant_value, value_typenumeric, boundsarray([[ 0., 10.]]), n_elements1, fixedFalse) Hyperparameter(namek1__k2__length_scale, value_typenumeric, boundsarray([[ 0., 10.]]), n_elements1, fixedFalse) Hyperparameter(namek2__length_scale, value_typenumeric, boundsarray([[ 0., 10.]]), n_elements1, fixedFalse) params kernel.get_params() for key in sorted(params): print(%s : %s % (key, params[key])) k1 : 1**2 * RBF(length_scale0.5) k1__k1 : 1**2 k1__k1__constant_value : 1.0 k1__k1__constant_value_bounds : (0.0, 10.0) k1__k2 : RBF(length_scale0.5) k1__k2__length_scale : 0.5 k1__k2__length_scale_bounds : (0.0, 10.0) k2 : RBF(length_scale2) k2__length_scale : 2.0 k2__length_scale_bounds : (0.0, 10.0) print(kernel.theta) # 注意log 变换后的值 [ 0. -0.69314718 0.69314718] print(kernel.bounds) # 注意log 变换后的值 [[ -inf 2.30258509] [ -inf 2.30258509] [ -inf 2.30258509]]与 pairwise 的互操作所有 GP 核与sklearn.metrics.pairwise双向兼容——Kernel子类的实例可作为metric传给pairwise_kernels反过来pairwise 中的核函数可通过包装类PairwiseKernel作为 GP 核使用。唯一的限制是pairwise 核的梯度是数值梯度而非解析梯度且只支持各向同性距离其中gamma参数被视为超参数可被优化其余核参数在初始化时确定并保持固定。4.3 基础核ConstantKernel 与 WhiteKernelConstantKernelkernels.py由参数constant_value控制定义为 (k(x_i, x_j) constant_value, \forall x_i, x_j)。作为Product核的一部分时用于缩放另一因子的幅值作为Sum核的一部分时用于修正 GP 的均值WhiteKernelkernels.py定义为 (k(x_i, x_j) noise_level)当 (x_i x_j)否则 0。主要用途是作为求和核的组成部分来解释信号中的噪声分量——调节其noise_level参数即对应估计噪声水平。默认初始值与边界参见源码noise_level1.0, noise_level_bounds(1e-5, 1e5)。4.4 核算子Sum、Product 与 Exponentiation核算子把一个或两个基础核组合成新核kernels.pySumkernels.py(k_{sum}(X, Y) k_1(X, Y) k_2(X, Y))Productkernels.py(k_{product}(X, Y) k_1(X, Y) \cdot k_2(X, Y))Exponentiationkernels.py(k_{exp}(X, Y) k(X, Y)^p)p 为标量参数。Kernel对象重载了魔术方法__add__、__mul__、__pow__kernels.py因此可以直接写RBF() RBF()作为Sum(RBF(), RBF())的快捷方式。组合核通过CompoundKernelkernels.py管理多个子核。4.5 内置核函数族RBF径向基函数核kernels.py又称平方指数核是平稳核[ k(x_i, x_j) \exp\left(- \frac{d(x_i, x_j)^2}{2l^2}\right) ]其中 (d(\cdot,\cdot)) 为欧氏距离(l0) 为 length-scale标量对应各向同性变体与输入同维的向量对应各向异性变体。该核无限可微意味着使用该核的 GP 具有各阶均方导数函数非常光滑。默认值length_scale1.0, length_scale_bounds(1e-5, 1e5)。Matérn 核kernels.py是 RBF 核的推广额外参数 (\nu) 控制所得函数的光滑度[ k(x_i, x_j) \frac{1}{\Gamma(\nu)2^{\nu-1}}\left(\frac{\sqrt{2\nu}}{l} d(x_i, x_j)\right)^\nu K_\nu\left(\frac{\sqrt{2\nu}}{l} d(x_i, x_j)\right) ]其中 (K_\nu(\cdot)) 为修正贝塞尔函数(\Gamma(\cdot)) 为伽马函数。关键性质当 (\nu \to \infty) 时收敛到 RBF 核(\nu 1/2) 时退化为绝对指数核 (k(x_i, x_j) \exp(-d(x_i, x_j)/l))(\nu 3/2)(k(x_i, x_j) \left(1 \frac{\sqrt{3}}{l} d(x_i, x_j)\right) \exp\left(-\frac{\sqrt{3}}{l} d(x_i, x_j)\right))用于学习至少一次可微的函数(\nu 5/2)(k(x_i, x_j) \left(1 \frac{\sqrt{5}}{l} d(x_i, x_j) \frac{5}{3l^2} d(x_i, x_j)^2\right) \exp\left(-\frac{\sqrt{5}}{l} d(x_i, x_j)\right))用于学习至少两次可微的函数。通过 (\nu) 灵活控制光滑度可适应真实函数关系的性质。默认nu1.5。更多变体细节见 [RW2006] 第 84 页。RationalQuadratic 核kernels.py可看作不同特征 length-scale 的 RBF 核的尺度混合无穷和[ k(x_i, x_j) \left(1 \frac{d(x_i, x_j)^2}{2\alpha l^2}\right)^{-\alpha} ]由 length-scale (l0) 与尺度混合参数 (\alpha0) 参数化。当前仅支持各向同性变体l 为标量。默认length_scale1.0, alpha1.0两者的边界均为(1e-5, 1e5)。ExpSineSquared 核kernels.py用于建模周期函数[ k(x_i, x_j) \exp\left(- \frac{2\sin^2(\pi d(x_i, x_j) / p)}{l^2}\right) ]由 length-scale (l0) 与周期参数 (p0) 参数化同样当前仅支持各向同性变体。默认length_scale1.0, periodicity1.0边界均为(1e-5, 1e5)。DotProduct 核kernels.py是非平稳核可看作对系数施加 (N(0,1)) 先验、对偏置施加 (N(0, \sigma_0^2)) 先验的线性回归得到的核它关于原点旋转不变但对平移不不变[ k(x_i, x_j) \sigma_0^2 x_i \cdot x_j ](\sigma_0^2 0) 时称为齐次线性核否则为非齐次。DotProduct常与指数算子组合使用如示例 plot_gpr_prior_posterior.py 中指数为 2 的情形对应 kernels.py 族的演示。5. 核的选择与实践建议选择核即选择对目标函数的先验假设场景推荐核备注平滑函数、通用基线RBF无限可微先验最光滑各向异性版可为每个特征分配独立 length-scale光滑度受限、需要更强鲁棒性Matern(nu1.5)或Matern(nu2.5)分别假设函数一次/两次可微nu0.5对应绝对指数核不同尺度混合的平滑函数RationalQuadraticRBF 的尺度混合兼顾多尺度周期现象季节、波动ExpSineSquared可叠加趋势项如ExpSineSquared RBF线性/多项式结构DotProduct常配合Exponentiation使用已知有噪声Sum中加入WhiteKernel噪声水平由数据估计多成分信号Sum/Product组合如ConstantKernel * RBF ExpSineSquared WhiteKernel核组合的命名经验组合核中的每个超参数都会带上k1__/k2__前缀便于在GridSearchCV中设置参数网格kernel.bounds与kernel.theta是 log 变换值网格搜索时应使用原始取值空间边界而非 log 值。6. 补充实现与测试验证源码结构与测试均位于 sklearn/gaussian_process/回归实现sklearn/gaussian_process/_gpr.py分类实现sklearn/gaussian_process/_gpc.py核实现sklearn/gaussian_process/kernels.py测试用例test_gpr.py、test_gpc.py、test_kernels.py值得关注的测试验证了文档中描述的关键性质test_gpr_interpolationtest_gpr.py验证预测插值训练点且预测协方差对角线为 0test_lml_improvingtest_gpr.py验证超参数优化确实提升了 LMLtest_converged_to_local_maximumtest_gpr.py验证优化结束后 LML 梯度近似为 0即收敛到局部极大值test_kernel_gradienttest_kernels.py用数值梯度对照验证各核的解析梯度实现。7. 小结与进一步阅读scikit-learn 的高斯过程模块用约 30 个内置核与两个估计器GPR / GPC为回归与分类提供了带不确定性估计的贝叶斯式解决方案。核心要点回顾GPR 基于 [RW2006] Algorithm 2.1通过 Cholesky 分解高效求解alpha、optimizer、n_restarts_optimizer、normalize_y是最常用的调参入口GPC 基于拉普拉斯近似用multi_class选择 one-vs-rest / one-vs-one 策略其中 one-vs-one 更快但不支持概率预测核是 GP 的灵魂理解平稳/非平稳、各向同性/各向异性之分掌握Sum/Product/Exponentiation组合与theta/bounds的 log 约定即可为数据定制协方差结构。进一步阅读仓库内资源入门示例 plot_gpr_noisy_targets.py 与 plot_gpr_prior_posterior.py结构化数据自定义核 plot_gpr_on_structured_data.py分类相关 plot_gpc.py、plot_gpc_xor.py、plot_gpc_iris.py、plot_gpc_isoprobability.py理论参考[RW2006] Carl E. Rasmussen and Christopher K.I. Williams,Gaussian Processes for Machine Learning, MIT Press 2006第 2、3、4 章分别对应 GPR、GPC、核理论[Duv2014] David Duvenaud,The Kernel Cookbook: Advice on Covariance functions, 2014核组合实践建议。【免费下载链接】scikit-learnscikit-learn: machine learning in Python项目地址: https://gitcode.com/gh_mirrors/sc/scikit-learn创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表