当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python sklearn CalibratedClassifierCV用法及代码示例


本文简要介绍python语言中 sklearn.calibration.CalibratedClassifierCV 的用法。

用法:

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

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

此类使用交叉验证来估计分类器的参数并随后校准分类器。使用默认 ensemble=True ,对于每个 cv 拆分,它将基本估计器的副本拟合到训练子集,并使用测试子集对其进行校准。对于预测,预测的概率在这些单独的校准分类器中进行平均。当 ensemble=False 时,交叉验证用于通过 cross_val_predict 获得无偏预测,然后用于校准。对于预测,使用使用所有数据训练的基本估计器。这是在 probabilities=True 用于 sklearn.svm 估计器时实现的方法。

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

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

在用户指南中阅读更多信息。

参数

base_estimator估计器实例,默认=无

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

method{‘sigmoid’, ‘isotonic’},默认='sigmoid'

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

cvint,交叉验证生成器,可迭代或“prefit”,默认=无

确定交叉验证拆分策略。 cv 的可能输入是:

  • 无,使用默认的 5 折交叉验证,
  • 整数,指定折叠次数。
  • CV分配器,
  • 一个可迭代的 yield (train, test) 拆分为索引数组。

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

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

如果通过“prefit”,则假设base_estimator已经拟合,所有数据都用于校准。

n_jobs整数,默认=无

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

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

有关详细信息,请参阅词汇表。

ensemble布尔,默认=真

确定当 cv 不是 'prefit' 时如何安装校准器。如果 cv='prefit' 则忽略。

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

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

属性

classes_ndarray 形状 (n_classes,)

类标签。

n_features_in_int

拟合期间看到的特征数。仅当基础base_estimator 在合适时公开此类属性时才定义。

feature_names_in_ndarray 形状(n_features_in_,)

拟合期间看到的特征名称。仅当基础base_estimator 在合适时公开此类属性时才定义。

calibrated_classifiers_列表(len() 等于 cv 或 1 如果 cv="prefit"ensemble=False )

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

  • cv="prefit" 时,安装 base_estimator 和安装校准器。
  • cv 不是 “prefit” 和 ensemble=True 时,n_cv 适合 base_estimator 和校准器对。 n_cv 是交叉验证折叠的数量。
  • cv 不是 “prefit” 和 ensemble=False 时,base_estimator 适合所有数据,并适合校准器。

参考

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_estimator=base_clf, cv=3)
>>> calibrated_clf.fit(X, y)
CalibratedClassifierCV(base_estimator=GaussianNB(), cv=3)
>>> 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_estimator=base_clf,
...     cv="prefit"
... )
>>> calibrated_clf.fit(X_calib, y_calib)
CalibratedClassifierCV(base_estimator=GaussianNB(), cv='prefit')
>>> len(calibrated_clf.calibrated_classifiers_)
1
>>> calibrated_clf.predict_proba([[-0.5, 0.5]])
array([[0.936..., 0.063...]])

相关用法


注:本文由纯净天空筛选整理自scikit-learn.org大神的英文原创作品 sklearn.calibration.CalibratedClassifierCV。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。