CalibratedClassifierCV#

class sklearn.calibration.CalibratedClassifierCV(estimator=None, *, method='sigmoid', cv=None, n_jobs=None, ensemble=True)#

概率校准使用等渗回归或逻辑回归。

该类使用交叉验证来同时估计分类器的参数并随后校准分类器。默认情况下,当 ensemble=True 时,对于每个cv分割,它 将基本估计器的副本拟合到训练子集,并使用测试子集进行校准。对于预测,这些单独校准的分类器的预测概率将被平均。当 ensemble=False 时,交叉验证用于通过:func:~sklearn.model_selection.cross_val_predict 获得无偏预测,然后 用于校准。对于预测,使用所有数据训练的基本估计器。这是为:class:~sklearn.svm.SVC 和:class:~sklearn.svm.NuSVC 估计器实现的预测方法(参见:ref:用户指南 <scores_probabilities> 了解详情)。

已经拟合的分类器可以通过参数 cv="prefit" 进行校准。在这种情况下,不使用交叉验证,所有提供的数据都用于校准。用户必须手动确保模型拟合和校准的数据是 disjoint 的。

校准基于 estimator 的:term:decision_function 方法(如果存在),否则基于:term:predict_proba

更多信息请参阅:ref:用户指南 <calibration>

Parameters:
estimatorestimator instance, default=None

需要校准其输出以提供更准确的 predict_proba 输出的分类器。默认分类器是 一个:class:~sklearn.svm.LinearSVC

Added in version 1.2.

method{‘sigmoid’, ‘isotonic’}, default=’sigmoid’

用于校准的方法。可以是’sigmoid’,对应于Platt方法(即逻辑回归模型)或 ‘isotonic’,这是一种非参数方法。不建议在太少的校准样本 (<<1000) 下使用等渗校准,因为它往往会过拟合。

cvint, cross-validation generator, iterable or “prefit”, default=None

确定交叉验证分割策略。 cv的可能输入包括:

  • None,使用默认的5折交叉验证,

  • 整数,指定折数。

  • CV splitter

  • 一个可迭代对象,生成(train, test)分割作为索引数组。

对于整数/None输入,如果 y 是二分类或多分类, 使用:class:~sklearn.model_selection.StratifiedKFold 。如果 y 既不是二分类也不是多分类,使用:class:~sklearn.model_selection.KFold

请参阅:ref:用户指南 <cross_validation> 了解可以使用的各种 交叉验证策略。

如果传递”prefit”,则假定 estimator 已经拟合,所有数据用于校准。

Changed in version 0.22: cv 默认值如果为None,从3折改为5折。

n_jobsint, default=None

并行运行的作业数。 None 表示1,除非在:obj:joblib.parallel_backend 上下文中。 -1 表示使用所有处理器。

基本估计器克隆在交叉验证迭代中并行拟合。因此,只有在 cv != "prefit" 时才会发生并行化。

请参阅:term:Glossary <n_jobs> 了解更多详情。

Added in version 0.24.

ensemblebool, default=True

cv 不是 'prefit' 时,确定校准器的拟合方式。如果 cv='prefit' ,则忽略。

如果为 Trueestimator 使用训练数据拟合,并使用测试数据校准,对于每个 cv 折。最终估计器 是 n_cv 个拟合的分类器和校准器对的集合,其中 n_cv 是交叉验证折数。输出是所有对预测概率的平均值。

如果为 Falsecv 用于通过:func:~sklearn.model_selection.cross_val_predict 计算无偏预测,然后 用于校准。在预测时,使用的分类器是使用所有数据训练的 estimator 。 注意,此方法也在:mod:sklearn.svm 估计器中内部实现,带有 probabilities=True 参数。

Added in version 0.24.

Attributes:
classes_ndarray of shape (n_classes,)

类别标签。

n_features_in_int

fit 期间看到的特征数。仅当基础估计器在拟合时暴露此类属性时定义。

Added in version 0.24.

feature_names_in_ndarray of shape ( n_features_in_ ,)

fit 期间看到的特征名称。仅当基础估计器在拟合时暴露此类属性时定义。

Added in version 1.0.

calibrated_classifiers_list (len()等于cv或1,如果 cv="prefit"ensemble=False )

分类器和校准器对的列表。

  • cv="prefit" 时,拟合的 estimator 和拟合的校准器。

  • cv 不是”prefit”且 ensemble=True 时, n_cv 个拟合的 estimator 和校准器对。 n_cv 是交叉验证折数。

  • cv 不是”prefit”且 ensemble=False 时,使用所有数据拟合的 estimator 和拟合的校准器。

Changed in version 0.24: ensemble=False 时,单个校准分类器的情况。

See also

calibration_curve

计算校准曲线的真实和预测概率。

References

[1]

从决策树和朴素贝叶斯分类器获得校准的概率估计,B. Zadrozny & C. Elkan, ICML 2001

[2]

将分类器得分转换为准确的多类概率估计,B. Zadrozny & C. Elkan, (KDD 2002)

[3]

支持向量机的概率输出及其与正则化似然方法的比较,J. Platt, (1999)

[4]

通过监督学习预测良好的概率,A. Niculescu-Mizil & R. Caruana, ICML 2005

Examples

>>> from sklearn.datasets import make_classification
>>> from sklearn.naive_bayes import GaussianNB
>>> from sklearn.calibration import CalibratedClassifierCV
>>> X, y = make_classification(n_samples=100, n_features=2,
...                            n_redundant=0, random_state=42)
>>> base_clf = GaussianNB()
>>> calibrated_clf = CalibratedClassifierCV(base_clf, cv=3)
>>> calibrated_clf.fit(X, y)
CalibratedClassifierCV(...)
>>> len(calibrated_clf.calibrated_classifiers_)
3
>>> calibrated_clf.predict_proba(X)[:5, :]
array([[0.110..., 0.889...],
       [0.072..., 0.927...],
       [0.928..., 0.071...],
       [0.928..., 0.071...],
       [0.071..., 0.928...]])
>>> from sklearn.model_selection import train_test_split
>>> X, y = make_classification(n_samples=100, n_features=2,
...                            n_redundant=0, random_state=42)
>>> X_train, X_calib, y_train, y_calib = train_test_split(
...        X, y, random_state=42
... )
>>> base_clf = GaussianNB()
>>> base_clf.fit(X_train, y_train)
GaussianNB()
>>> calibrated_clf = CalibratedClassifierCV(base_clf, cv="prefit")
>>> calibrated_clf.fit(X_calib, y_calib)
CalibratedClassifierCV(...)
>>> len(calibrated_clf.calibrated_classifiers_)
1
>>> calibrated_clf.predict_proba([[-0.5, 0.5]])
array([[0.936..., 0.063...]])
fit(X, y, sample_weight=None, **fit_params)#

拟合校准模型。

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

训练数据。

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

目标值。

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

样本权重。如果为 None,则样本权重相等。

**fit_paramsdict

传递给底层分类器 fit 方法的参数。

Returns:
selfobject

返回 self 实例。

get_metadata_routing()#

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

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

Returns:
routingMetadataRouter

MetadataRouter 封装的 路由信息。

get_params(deep=True)#

获取此估计器的参数。

Parameters:
deepbool, 默认=True

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

Returns:
paramsdict

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

predict(X)#

预测新样本的目标。

预测的类别是具有最高概率的类别, 因此可能与未校准分类器的预测不同。

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

样本,如 estimator.predict 所接受。

Returns:
C形状为 (n_samples,) 的 ndarray

预测的类别。

predict_proba(X)#

校准后的分类概率。

该函数根据每个类别返回一个测试向量数组X的校准分类概率。

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

样本,如 estimator.predict_proba 所接受。

Returns:
C形状为 (n_samples, n_classes) 的 ndarray

预测的概率。

score(X, y, sample_weight=None)#

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

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

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

测试样本。

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

` X`的真实标签。

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

样本权重。

Returns:
scorefloat

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

set_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') CalibratedClassifierCV#

Request metadata passed to the fit method.

Note that this method is only relevant if enable_metadata_routing=True (see sklearn.set_config ). Please see User Guide on how the routing mechanism works.

The options for each parameter are:

  • True : metadata is requested, and passed to fit if provided. The request is ignored if metadata is not provided.

  • False : metadata is not requested and the meta-estimator will not pass it to fit .

  • None : metadata is not requested, and the meta-estimator will raise an error if the user provides it.

  • str : metadata should be passed to the meta-estimator with this given alias instead of the original name.

The default ( sklearn.utils.metadata_routing.UNCHANGED ) retains the existing request. This allows you to change the request for some parameters and not others.

Added in version 1.3.

Note

This method is only relevant if this estimator is used as a sub-estimator of a meta-estimator, e.g. used inside a Pipeline . Otherwise it has no effect.

Parameters:
sample_weightstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED

Metadata routing for sample_weight parameter in fit .

Returns:
selfobject

The updated object.

set_params(**params)#

设置此估计器的参数。

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

Parameters:
**paramsdict

估计器参数。

Returns:
selfestimator instance

估计器实例。

set_score_request(*, sample_weight: bool | None | str = '$UNCHANGED$') CalibratedClassifierCV#

Request metadata passed to the score method.

Note that this method is only relevant if enable_metadata_routing=True (see sklearn.set_config ). Please see User Guide on how the routing mechanism works.

The options for each parameter are:

  • True : metadata is requested, and passed to score if provided. The request is ignored if metadata is not provided.

  • False : metadata is not requested and the meta-estimator will not pass it to score .

  • None : metadata is not requested, and the meta-estimator will raise an error if the user provides it.

  • str : metadata should be passed to the meta-estimator with this given alias instead of the original name.

The default ( sklearn.utils.metadata_routing.UNCHANGED ) retains the existing request. This allows you to change the request for some parameters and not others.

Added in version 1.3.

Note

This method is only relevant if this estimator is used as a sub-estimator of a meta-estimator, e.g. used inside a Pipeline . Otherwise it has no effect.

Parameters:
sample_weightstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED

Metadata routing for sample_weight parameter in score .

Returns:
selfobject

The updated object.