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