CalibratedClassifierCV#

class sklearn.calibration.CalibratedClassifierCV(estimator=None, *, method='sigmoid', cv=None, n_jobs=None, ensemble='auto')[source]#

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

该类使用交叉验证来估计分类器的参数并随后校准分类器。当 `ensemble=True` 时,对于每个交叉验证分割,它会将基础估计器的副本拟合到训练子集,并使用测试子集对其进行校准。对于预测,将对这些单独校准的分类器的预测概率进行平均。当 `ensemble=False` 时,交叉验证用于通过 cross_val_predict 获取无偏预测,然后将这些预测用于校准。对于预测,使用在所有数据上训练的基础估计器。这是在 SVCNuSVC 估计器中实现预测方法时,`probabilities=True` 参数的用法(详见用户指南)。

已经拟合的分类器可以通过将模型封装在 FrozenEstimator 中进行校准。在这种情况下,所有提供的数据都用于校准。用户必须手动确保模型拟合和校准的数据是分离的。

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

更多信息请阅读用户指南。要了解有关 CalibratedClassifierCV 类的更多信息,请参阅以下校准示例:分类器概率校准概率校准曲线以及3类分类的概率校准

参数:
estimator估计器实例,默认为None

需要校准其输出的分类器,以提供更准确的 `predict_proba` 输出。默认分类器是 LinearSVC

版本 1.2 新增。

method{‘sigmoid’, ‘isotonic’},默认为’sigmoid’

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

cvint,交叉验证生成器或可迭代对象,默认为None

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

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

  • 整数,指定折叠数量。

  • CV 分割器,

  • 一个可迭代对象,产生 (训练,测试) 分割作为索引数组。

对于整数/None 输入,如果 `y` 是二分类或多分类,则使用 StratifiedKFold。如果 `y` 既不是二分类也不是多分类,则使用 KFold

有关可在此处使用的各种交叉验证策略,请参阅用户指南

0.22 版中更改: 当 None 时,`cv` 的默认值从 3 折改为 5 折。

1.6 版中更改: `"prefit"` 已弃用。请改用 FrozenEstimator

n_jobsint,默认为None

并行运行的任务数量。`None` 表示 1,除非在 joblib.parallel_backend 上下文中。`-1` 表示使用所有处理器。

基础估计器克隆在交叉验证迭代中并行拟合。因此,并行化仅在 `cv != "prefit"` 时发生。

有关更多详细信息,请参阅术语表

版本 0.24 新增。

ensemblebool,或“auto”,默认为“auto”

确定校准器如何拟合。

如果 `estimator` 是 FrozenEstimator,则“auto”将使用 `False`,否则使用 `True`。

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

如果为 `False`,则通过 cross_val_predict 使用 `cv` 计算无偏预测,然后将这些预测用于校准。在预测时,使用的分类器是在所有数据上训练的 `estimator`。请注意,此方法也在具有 `probabilities=True` 参数的 sklearn.svm 估计器中内部实现。

版本 0.24 新增。

1.6 版中更改: 新增了 `"auto"` 选项,并将其设为默认值。

属性:
classes_形状为 (n_classes,) 的 ndarray

类别标签。

n_features_in_int

fit 期间看到的特征数量。仅当底层估计器在拟合时暴露此属性时才定义。

版本 0.24 新增。

feature_names_in_形状为 (`n_features_in_`,) 的 ndarray

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

版本 1.0 新增。

calibrated_classifiers_列表 (长度等于 cv 或 1,如果 `ensemble=False`)

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

  • 当 `ensemble=True` 时,`n_cv` 个拟合的 `estimator` 和校准器对。`n_cv` 是交叉验证折叠的数量。

  • 当 `ensemble=False` 时,是拟合所有数据的 `estimator` 和拟合的校准器。

0.24 版中更改: 当 `ensemble=False` 时,单个校准分类器的情况。

另请参阅

calibration_curve

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

参考文献

[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

示例

>>> 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.072],
       [0.928, 0.072],
       [0.072, 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()
>>> from sklearn.frozen import FrozenEstimator
>>> calibrated_clf = CalibratedClassifierCV(FrozenEstimator(base_clf))
>>> 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)[source]#

拟合校准模型。

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

训练数据。

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

目标值。

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

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

**fit_params字典

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

返回:
self对象

返回 self 的一个实例。

get_metadata_routing()[source]#

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

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

返回:
routingMetadataRouter

封装路由信息的 MetadataRouter

get_params(deep=True)[source]#

获取此估计器的参数。

参数:
deepbool,默认为True

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

返回:
params字典

参数名称及其对应值。

predict(X)[source]#

预测新样本的目标。

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

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

样本,由 `estimator.predict` 接受。

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

预测类别。

predict_proba(X)[source]#

分类的校准概率。

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

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

样本,由 `estimator.predict_proba` 接受。

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

预测概率。

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_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') CalibratedClassifierCV[source]#

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

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

每个参数的选项是

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

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

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

  • `str`:元数据应以给定别名而非原始名称传递给元估计器。

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

版本 1.3 新增。

注意

此方法仅在将此估计器用作元估计器的子估计器时才相关,例如在 Pipeline 内部使用。否则它没有效果。

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

在 `fit` 中 `sample_weight` 参数的元数据路由。

返回:
self对象

更新后的对象。

set_params(**params)[source]#

设置此估计器的参数。

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

参数:
**params字典

估计器参数。

返回:
self估计器实例

估计器实例。

set_score_request(*, sample_weight: bool | None | str = '$UNCHANGED$') CalibratedClassifierCV[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对象

更新后的对象。