高斯过程分类器#

class sklearn.gaussian_process.GaussianProcessClassifier(kernel=None, *, optimizer='fmin_l_bfgs_b', n_restarts_optimizer=0, max_iter_predict=100, warm_start=False, copy_X_train=True, random_state=None, multi_class='one_vs_rest', n_jobs=None)[source]#

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

该实现基于 [RW2006] 中的算法 3.1、3.2 和 5.1。

在内部,拉普拉斯近似用于通过高斯逼近非高斯后验。

目前,该实现仅限于使用 Logistic 链接函数。对于多类分类,拟合了几个二元“一对多”分类器。请注意,此类别因此不实现真正的多类拉普拉斯近似。

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

版本 0.18 中新增。

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

指定 GP 协方差函数的核。如果传入 None,则默认使用核 “1.0 * RBF(1.0)”。请注意,核的超参数在拟合过程中会进行优化。此外,核不能是 CompoundKernel

optimizer‘fmin_l_bfgs_b’,可调用或 None,默认='fmin_l_bfgs_b'

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

def optimizer(obj_func, initial_theta, bounds):
    # * 'obj_func' is the objective function to be maximized, which
    #   takes the hyperparameters theta as 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,默认=0

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

max_iter_predictint,默认=100

预测期间牛顿法逼近后验的最大迭代次数。较小的值将减少计算时间,但会降低结果质量。

warm_startbool,默认=False

如果启用热启动,则将后验模式的拉普拉斯近似上的最后一次牛顿迭代的解用作下一次调用 _posterior_mode() 的初始化。这可以在超参数优化等类似问题多次调用 _posterior_mode 时加速收敛。请参阅术语表

copy_X_trainbool,默认=True

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

random_stateint, RandomState 实例或 None,默认=None

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

multi_class{'one_vs_rest', 'one_vs_one'},默认='one_vs_rest'

指定如何处理多类分类问题。支持 'one_vs_rest' 和 'one_vs_one'。在 'one_vs_rest' 中,为每个类拟合一个二元高斯过程分类器,该分类器经过训练以将该类与其余类分开。在 'one_vs_one' 中,为每对类拟合一个二元高斯过程分类器,该分类器经过训练以将这两个类分开。这些二元预测器的预测结果被组合成多类预测。请注意,'one_vs_one' 不支持预测概率估计。

n_jobsint, 默认=None

用于计算的作业数:指定的多元问题并行计算。None 表示 1,除非在 joblib.parallel_backend 上下文中。-1 表示使用所有处理器。有关更多详细信息,请参见术语表

属性:
base_estimator_Estimator 实例

使用观测数据定义似然函数的估计器实例。

kernel_核实例

返回基础估计器的核。

log_marginal_likelihood_value_浮点数

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

classes_形状为 (n_classes,) 的类数组

唯一类标签。

n_classes_int

训练数据中的类别数量

n_features_in_int

拟合期间观测到的特征数量。

版本 0.24 中新增。

feature_names_in_形状为 (n_features_in_,) 的 ndarray

拟合期间观察到的特征名称。仅当 X 的特征名称全部为字符串时才定义。

版本 1.0 中新增。

另请参阅

GaussianProcessRegressor

高斯过程回归 (GPR)。

参考文献

示例

>>> 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_y=True)
>>> kernel = 1.0 * RBF(1.0)
>>> gpc = GaussianProcessClassifier(kernel=kernel,
...         random_state=0).fit(X, y)
>>> gpc.score(X, y)
0.9866...
>>> gpc.predict_proba(X[:2,:])
array([[0.83548752, 0.03228706, 0.13222543],
       [0.79064206, 0.06525643, 0.14410151]])

有关 GaussianProcessClassifier 与其他分类器的比较,请参见:绘制分类概率

fit(X, y)[source]#

拟合高斯过程分类模型。

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

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

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

目标值,必须是二元的。

返回:
self对象

返回 self 实例。

get_metadata_routing()[source]#

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

请查看用户指南,了解路由机制的工作原理。

返回:
routingMetadataRequest

封装路由信息的 MetadataRequest

get_params(deep=True)[source]#

获取此估计器的参数。

参数:
deepbool,默认=True

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

返回:
params字典

参数名称映射到它们的值。

latent_mean_and_variance(X)[source]#

计算潜在函数的均值和方差。

基于 [RW2006] 的算法 3.2,此函数返回高斯过程分类模型的潜在均值(第 4 行)和方差(第 6 行)。

请注意,此函数仅支持二元分类。

版本 1.7 中新增。

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

用于分类的 GP 评估查询点。

返回:
latent_mean形状为 (n_samples,) 的类数组

查询点处潜在函数值的均值。

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

查询点处潜在函数值的方差。

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

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

在多类分类的情况下,返回“一对多”分类器的平均对数边缘似然。

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

用于评估对数边缘似然的核超参数。在多类分类的情况下,theta 可能是复合核的超参数或单个核的超参数。在后一种情况下,所有单个核都分配相同的 theta 值。如果为 None,则返回 self.kernel_.theta 的预计算对数边缘似然。

eval_gradientbool,默认=False

如果为 True,则额外返回对数边缘似然相对于 theta 位置的核超参数的梯度。请注意,非二元分类不支持梯度计算。如果为 True,则 theta 不能为 None。

clone_kernelbool,默认=True

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

返回:
log_likelihood浮点数

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

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

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

predict(X)[source]#

对测试向量数组 X 执行分类。

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

用于分类的 GP 评估查询点。

返回:
C形状为 (n_samples,) 的 ndarray

X 的预测目标值,值来自 classes_

predict_proba(X)[source]#

返回测试向量 X 的概率估计。

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

用于分类的 GP 评估查询点。

返回:
C形状为 (n_samples, n_classes) 的类数组

返回模型中每个类别的样本概率。列对应于按排序顺序排列的类别,如它们在属性 classes_ 中显示的那样。

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

返回提供数据和标签上的准确率

在多标签分类中,这是子集准确率,这是一个严格的度量,因为它要求每个样本的每个标签集都正确预测。

参数:
X形状为 (n_samples, n_features) 的类数组

测试样本。

y形状为 (n_samples,) 或 (n_samples, n_outputs) 的类数组

X 的真实标签。

sample_weight形状为 (n_samples,) 的类数组,默认=None

样本权重。

返回:
score浮点数

self.predict(X) 相对于 y 的平均准确率。

set_params(**params)[source]#

设置此估计器的参数。

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

参数:
**params字典

估计器参数。

返回:
self估计器实例

估计器实例。

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

请求传递给 score 方法的元数据。

请注意,此方法仅在 enable_metadata_routing=True 时相关(参见 sklearn.set_config)。请参阅用户指南,了解路由机制的工作原理。

每个参数的选项为

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

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

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

  • str: 元数据应使用此别名而非原始名称传递给元估计器。

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

版本 1.3 中新增。

注意

此方法仅在此估计器用作元估计器的子估计器时相关,例如在 Pipeline 内部使用时。否则无效。

参数:
sample_weightstr, True, False, 或 None,默认=sklearn.utils.metadata_routing.UNCHANGED

scoresample_weight 参数的元数据路由。

返回:
self对象

更新后的对象。