GaussianProcessRegressor#

class sklearn.gaussian_process.GaussianProcessRegressor(kernel=None, *, alpha=1e-10, optimizer='fmin_l_bfgs_b', n_restarts_optimizer=0, normalize_y=False, copy_X_train=True, n_targets=None, random_state=None)[source]#

高斯过程回归 (GPR)。

此实现基于 [RW2006] 中的算法 2.1。

除了标准的 scikit-learn 估计器 API,GaussianProcessRegressor

  • 允许在没有事先拟合的情况下进行预测(基于 GP 先验)

  • 提供了额外的 sample_y(X) 方法,该方法评估从 GPR(先验或后验)中提取的样本在给定输入处的取值

  • 公开了一个 log_marginal_likelihood(theta) 方法,可用于外部选择超参数的方式,例如通过马尔可夫链蒙特卡洛。

要了解点估计方法与更具贝叶斯建模方法之间的区别,请参阅名为 Comparison of kernel ridge and Gaussian process regression 的示例。

用户指南 中阅读更多内容。

版本 0.18 新增。

参数:
kernel核函数实例, default=None

指定 GP 协方差函数的核函数。如果传入 None,则默认使用核函数 ConstantKernel(1.0, constant_value_bounds="fixed") * RBF(1.0, length_scale_bounds="fixed")。请注意,除非边界标记为“fixed”,否则核函数超参数会在拟合过程中进行优化。

alphafloat 或 shape (n_samples,) 的 ndarray, default=1e-10

在拟合过程中添加到核矩阵对角线的值。这可以防止在拟合过程中出现潜在的数值问题,确保计算值形成正定矩阵。它也可以被解释为训练观测值上的附加高斯测量噪声的方差。请注意,这与使用 WhiteKernel 不同。如果传入一个数组,它必须与用于拟合的数据具有相同的条目数,并用作取决于数据点的噪声水平。允许直接指定噪声水平作为参数主要是为了方便,并与 Ridge 保持一致。有关说明 alpha 参数如何控制高斯过程回归中噪声方差的示例,请参阅 Gaussian Processes regression: basic introductory example

optimizer“fmin_l_bfgs_b”, callable or None, default=”fmin_l_bfgs_b”

可以是用于优化核函数参数的内部支持的优化器之一(通过字符串指定),也可以是作为 callable 传入的外部定义的优化器。如果传入 callable,它必须具有以下签名

def optimizer(obj_func, initial_theta, bounds):
    # * 'obj_func': the objective function to be minimized, which
    #   takes the hyperparameters theta as a parameter and an
    #   optional flag eval_gradient, which determines if the
    #   gradient is returned additionally to the function value
    # * 'initial_theta': the initial value for theta, which can be
    #   used by local optimizers
    # * 'bounds': the bounds on the values of theta
    ....
    # Returned are the best found hyperparameters theta and
    # the corresponding value of the target function.
    return theta_opt, func_min

默认情况下,使用来自 scipy.optimize.minimize 的 L-BFGS-B 算法。如果传入 None,则核函数的参数保持固定。可用的内部优化器有:{'fmin_l_bfgs_b'}

n_restarts_optimizerint, default=0

用于找到使对数边际似然最大化的核函数参数的优化器重启次数。优化器的第一次运行是从核函数的初始参数开始执行的,其余的(如果有的话)是从允许的 theta 值空间中对数均匀随机采样的 theta 开始执行的。如果大于 0,则所有边界都必须是有限的。请注意,n_restarts_optimizer == 0 意味着执行一次运行。

normalize_ybool, default=False

是否通过去除均值并缩放至单位方差来对目标值 y 进行归一化。这对于使用零均值、单位方差先验的情况推荐使用。请注意,在此实现中,在报告 GP 预测之前会反转归一化。

版本 0.23 中有更改。

copy_X_trainbool, default=True

如果为 True,则训练数据的持久副本存储在对象中。否则,只存储对训练数据的引用,如果数据在外部被修改,可能会导致预测发生变化。

n_targetsint, default=None

目标值的维度数。用于从先验分布采样时(即在 fit 之前调用 sample_y)确定输出数量。一旦调用了 fit,此参数将被忽略。

在版本 1.3 中新增。

random_stateint, RandomState instance or None, default=None

确定用于初始化中心的随机数生成。传入 int 以在多次函数调用中获得可重现的结果。请参阅 Glossary

属性:
X_train_shape (n_samples, n_features) 的 array-like 或 list of object

训练数据的特征向量或其他表示(预测也需要)。

y_train_shape (n_samples,) 或 (n_samples, n_targets) 的 array-like

训练数据中的目标值(预测也需要)。

kernel_核函数实例

用于预测的核函数。核函数的结构与作为参数传入的核函数相同,但具有优化的超参数。

L_shape (n_samples, n_samples) 的 array-like

X_train_ 中核函数的下三角 Cholesky 分解。

alpha_shape (n_samples,) 的 array-like

核空间中训练数据点的对偶系数。

log_marginal_likelihood_value_float

self.kernel_.theta 的对数边际似然。

n_features_in_int

拟合 期间看到的特征数。

0.24 版本新增。

feature_names_in_shape 为 (n_features_in_,) 的 ndarray

fit 期间看到的特征名称。仅当 X 具有全部为字符串的特征名称时才定义。

1.0 版本新增。

另请参阅

GaussianProcessClassifier

基于拉普拉斯近似的高斯过程分类 (GPC)。

References

示例

>>> from sklearn.datasets import make_friedman2
>>> from sklearn.gaussian_process import GaussianProcessRegressor
>>> from sklearn.gaussian_process.kernels import DotProduct, WhiteKernel
>>> X, y = make_friedman2(n_samples=500, noise=0, random_state=0)
>>> kernel = DotProduct() + WhiteKernel()
>>> gpr = GaussianProcessRegressor(kernel=kernel,
...         random_state=0).fit(X, y)
>>> gpr.score(X, y)
0.3680...
>>> gpr.predict(X[:2,:], return_std=True)
(array([653.0, 592.1]), array([316.6, 316.6]))
fit(X, y)[source]#

拟合高斯过程回归模型。

参数:
Xshape (n_samples, n_features) 的 array-like 或 list of object

训练数据的特征向量或其他表示。

yshape 为 (n_samples,) 或 (n_samples, n_targets) 的 array-like

目标值。

返回:
selfobject

GaussianProcessRegressor 类实例。

get_metadata_routing()[source]#

获取此对象的元数据路由。

请查阅 用户指南,了解路由机制如何工作。

返回:
routingMetadataRequest

封装路由信息的 MetadataRequest

get_params(deep=True)[source]#

获取此估计器的参数。

参数:
deepbool, default=True

如果为 True,将返回此估计器以及包含的子对象(如果它们是估计器)的参数。

返回:
paramsdict

参数名称映射到其值。

log_marginal_likelihood(theta=None, eval_gradient=False, clone_kernel=True)[source]#

返回训练数据的 theta 对数边际似然。

参数:
thetashape (n_kernel_params,) 的 array-like, default=None

评估对数边际似然的核函数超参数。如果为 None,则返回 self.kernel_.theta 的预计算对数边际似然。

eval_gradientbool, default=False

如果为 True,则额外返回对数边际似然关于位置 theta 处的核函数超参数的梯度。如果为 True,则 theta 不能为 None。

clone_kernelbool, default=True

如果为 True,则复制核属性。如果为 False,则修改核属性,但这可能会提高性能。

返回:
log_likelihoodfloat

训练数据的 theta 对数边际似然。

log_likelihood_gradientndarray of shape (n_kernel_params,), optional

对数边际似然关于位置 theta 处的核函数超参数的梯度。仅当 eval_gradient 为 True 时返回。

predict(X, return_std=False, return_cov=False)[source]#

使用高斯过程回归模型进行预测。

我们也可以通过使用 GP 先验来基于未拟合的模型进行预测。除了预测分布的均值之外,还可以选择返回其标准差(return_std=True)或协方差(return_cov=True)。请注意,最多只能请求其中之一。

参数:
Xshape (n_samples, n_features) 的 array-like 或 list of object

评估 GP 的查询点。

return_stdbool, default=False

如果为 True,则返回查询点处的预测分布的标准差以及均值。

return_covbool, default=False

如果为 True,则返回查询点处的联合预测分布的协方差以及均值。

返回:
y_meanshape (n_samples,) 或 (n_samples, n_targets) 的 ndarray

查询点处的预测分布均值。

y_stdshape (n_samples,) 或 (n_samples, n_targets) 的 ndarray, optional

查询点处的预测分布标准差。仅当 return_std 为 True 时返回。

y_covshape (n_samples, n_samples) 或 (n_samples, n_samples, n_targets) 的 ndarray, optional

查询点处的联合预测分布协方差。仅当 return_cov 为 True 时返回。

sample_y(X, n_samples=1, random_state=0)[source]#

从高斯过程中抽取样本并在 X 处评估。

参数:
Xarray-like of shape (n_samples_X, n_features) or list of object

评估 GP 的查询点。

n_samplesint, default=1

每个查询点从高斯过程中抽取的样本数。

random_stateint, RandomState instance or None, default=0

确定用于随机抽取样本的随机数生成。传入 int 以在多次函数调用中获得可重现的结果。请参阅 Glossary

返回:
y_samplesshape (n_samples_X, n_samples) 或 (n_samples_X, n_targets, n_samples) 的 ndarray

从高斯过程中抽取并在查询点处评估的 n_samples 个样本的值。

score(X, y, sample_weight=None)[source]#

返回测试数据的 决定系数

决定系数 \(R^2\) 定义为 \((1 - \frac{u}{v})\),其中 \(u\) 是残差平方和 ((y_true - y_pred)** 2).sum()\(v\) 是总平方和 ((y_true - y_true.mean()) ** 2).sum()。最佳可能分数为 1.0,它也可以是负数(因为模型可能任意差)。一个总是预测 y 期望值(不考虑输入特征)的常数模型将获得 \(R^2\) 分数 0.0。

参数:
Xshape 为 (n_samples, n_features) 的 array-like

测试样本。对于某些估计器,这可能是一个预先计算的核矩阵或一个通用对象列表,形状为 (n_samples, n_samples_fitted),其中 n_samples_fitted 是用于估计器拟合的样本数。

yshape 为 (n_samples,) 或 (n_samples, n_outputs) 的 array-like

X 的真实值。

sample_weightshape 为 (n_samples,) 的 array-like, default=None

样本权重。

返回:
scorefloat

self.predict(X) 相对于 y\(R^2\)

注意事项

从版本 0.23 开始,在对回归器调用 score 时使用的 \(R^2\) 分数使用 multioutput='uniform_average',以与 r2_score 的默认值保持一致。这会影响所有多输出回归器(除了 MultiOutputRegressor)的 score 方法。

set_params(**params)[source]#

设置此估计器的参数。

此方法适用于简单的估计器以及嵌套对象(如 Pipeline)。后者具有 <component>__<parameter> 形式的参数,以便可以更新嵌套对象的每个组件。

参数:
**paramsdict

估计器参数。

返回:
selfestimator instance

估计器实例。

set_predict_request(*, return_cov: bool | None | str = '$UNCHANGED$', return_std: bool | None | str = '$UNCHANGED$') GaussianProcessRegressor[source]#

配置是否应请求元数据以传递给 predict 方法。

请注意,此方法仅在以下情况下相关:此估计器用作 元估计器 中的子估计器,并且通过 enable_metadata_routing=True 启用了元数据路由(请参阅 sklearn.set_config)。请查看 用户指南 以了解路由机制的工作原理。

每个参数的选项如下:

  • True:请求元数据,如果提供则传递给 predict。如果未提供元数据,则忽略该请求。

  • False:不请求元数据,并且元估计器不会将其传递给 predict

  • None:不请求元数据,如果用户提供元数据,元估计器将引发错误。

  • str:应将元数据以给定别名而不是原始名称传递给元估计器。

默认值 (sklearn.utils.metadata_routing.UNCHANGED) 保留现有请求。这允许您更改某些参数的请求而不更改其他参数。

在版本 1.3 中新增。

参数:
return_covstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED

predict 方法中 return_cov 参数的元数据路由。

return_stdstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED

predictreturn_std参数的元数据路由。

返回:
selfobject

更新后的对象。

set_score_request(*, sample_weight: bool | None | str = '$UNCHANGED$') GaussianProcessRegressor[source]#

配置是否应请求元数据以传递给 score 方法。

请注意,此方法仅在以下情况下相关:此估计器用作 元估计器 中的子估计器,并且通过 enable_metadata_routing=True 启用了元数据路由(请参阅 sklearn.set_config)。请查看 用户指南 以了解路由机制的工作原理。

每个参数的选项如下:

  • True:请求元数据,如果提供则传递给 score。如果未提供元数据,则忽略该请求。

  • False:不请求元数据,元估计器不会将其传递给 score

  • None:不请求元数据,如果用户提供元数据,元估计器将引发错误。

  • str:应将元数据以给定别名而不是原始名称传递给元估计器。

默认值 (sklearn.utils.metadata_routing.UNCHANGED) 保留现有请求。这允许您更改某些参数的请求而不更改其他参数。

在版本 1.3 中新增。

参数:
sample_weightstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED

score 方法中 sample_weight 参数的元数据路由。

返回:
selfobject

更新后的对象。