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),可供外部用于其他超参数选择方式,例如通过马尔可夫链蒙特卡洛(MCMC)方法。

若要了解点估计方法与更偏向贝叶斯建模方法之间的区别,请参阅题为 核岭回归与高斯过程回归的比较 的示例。

用户指南 中阅读更多信息。

版本 0.18 新增。

参数:
kernel核实例,默认=None

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

alpha浮点数或形状为 (n_samples,) 的数组,默认=1e-10

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

optimizer“fmin_l_bfgs_b”、可调用对象或 None,默认=”fmin_l_bfgs_b”

可以是内部支持的用于优化核参数的优化器之一(由字符串指定),或者是作为可调用对象传入的外部定义优化器。如果传入可调用对象,它必须具有相应的签名

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_optimizer整数,默认=0

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

normalize_y布尔值,默认=False

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

版本 0.23 更改。

copy_X_train布尔值,默认=True

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

n_targets整数,默认=None

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

在版本 1.3 中新增。

random_stateint, RandomState instance or None, default=None

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

属性:
X_train_形状为 (n_samples, n_features) 的类数组或对象列表

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

y_train_形状为 (n_samples,) 或 (n_samples, n_targets) 的类数组

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

kernel_核实例

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

L_形状为 (n_samples, n_samples) 的类数组

X_train_ 中核的下三角 Cholesky 分解。

alpha_形状为 (n_samples,) 的类数组

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

log_marginal_likelihood_value_浮点数

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]#

拟合高斯过程回归模型。

参数:
X形状为 (n_samples, n_features) 的类数组或对象列表

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

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 的对数边际似然。

参数:
theta形状为 (n_kernel_params,) 的类数组,默认=None

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

eval_gradientbool, default=False

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

clone_kernel布尔值,默认=True

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

返回:
log_likelihoodfloat

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

log_likelihood_gradient形状为 (n_kernel_params,) 的 ndarray,可选

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

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

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

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

参数:
X形状为 (n_samples, n_features) 的类数组或对象列表

评估 GP 的查询点。

return_stdbool, default=False

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

return_cov布尔值,默认=False

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

返回:
y_mean形状为 (n_samples,) 或 (n_samples, n_targets) 的 ndarray

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

y_std形状为 (n_samples,) 或 (n_samples, n_targets) 的 ndarray,可选

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

y_cov形状为 (n_samples, n_samples) 或 (n_samples, n_samples, n_targets) 的 ndarray,可选

查询点处联合预测分布的协方差。仅在 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 以在多次函数调用中获得可重现的结果。请参阅 术语表

返回:
y_samples形状为 (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 的默认值保持一致。这会影响所有多输出回归器的 score 方法(MultiOutputRegressor 除外)。

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, 或 None,默认=sklearn.utils.metadata_routing.UNCHANGED

predictreturn_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

更新后的对象。