高斯过程分类器#
- 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 中新增。
- base_estimator_
另请参阅
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
score
中sample_weight
参数的元数据路由。
- 返回:
- self对象
更新后的对象。