當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。