GaussianProcessClassifier(高斯过程分类器)#

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

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

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

内部使用拉普拉斯近似将非高斯后验近似为高斯分布。

目前,该实现仅限于使用逻辑链接函数。对于多类分类,拟合多个二元的“一对多”分类器。因此,需要注意的是,此类并未实现真正的多类拉普拉斯近似。

用户指南中了解更多信息。

版本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值空间中对数均匀随机采样的thetas开始的。如果大于0,则所有边界必须是有限的。请注意,n_restarts_optimizer=0表示执行一次运行。

max_iter_predictint,默认为100

在预测期间逼近后验的牛顿法中的最大迭代次数。较小的值将减少计算时间,但代价是结果较差。

warm_startbool,默认为False

如果启用了warm-starts,则后验模式的拉普拉斯近似的最后一次牛顿迭代的解将用作下次调用_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_float

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

有关高斯过程分类器与其他分类器的比较,请参见:分类概率图

fit(X, y)[source]#

拟合高斯过程分类模型。

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

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

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

目标值,必须为二进制。

返回值:
selfobject

返回 self 的实例。

get_metadata_routing()[source]#

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

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

返回值:
routingMetadataRequest

一个MetadataRequest,封装了路由信息。

get_params(deep=True)[source]#

获取此估计器的参数。

参数:
deepbool,默认为 True

如果为 True,则将返回此估计器和包含的作为估计器的子对象的参数。

返回值:
paramsdict

参数名称与其值的映射。

property kernel_#

返回基估计器的内核。

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_likelihoodfloat

训练数据的 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]#

返回给定测试数据和标签的平均准确率。

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

参数:
Xarray-like of shape (n_samples, n_features)

测试样本。

yarray-like of shape (n_samples,) or (n_samples, n_outputs)

X 的真实标签。

sample_weightarray-like of shape (n_samples,), default=None

样本权重。

返回值:
scorefloat

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

set_params(**params)[source]#

设置此估计器的参数。

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

参数:
**paramsdict

估计器参数。

返回值:
selfestimator instance

估计器实例。

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, or None, default=sklearn.utils.metadata_routing.UNCHANGED

scoresample_weight 参数的元数据路由。

返回值:
selfobject

更新后的对象。