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
predict中return_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
更新后的对象。