校準分類器交叉驗證 (CalibratedClassifierCV)#

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

使用等張迴歸或邏輯迴歸進行機率校準。

這個類別使用交叉驗證來估計分類器的參數,並隨後校準分類器。預設情況下,當 ensemble=True 時,對於每個 cv 分割,它會將基本估計器的副本擬合到訓練子集,並使用測試子集進行校準。對於預測,會將這些個別校準分類器的預測機率取平均。當 ensemble=False 時,會透過 cross_val_predict 使用交叉驗證來取得無偏差的預測,然後將其用於校準。對於預測,會使用使用所有資料訓練的基本估計器。這是當 SVCNuSVC 估計器的 probabilities=True 時所實作的預測方法(詳情請參閱使用者指南)。

已經擬合的分類器可以透過將模型包裝在 FrozenEstimator 中進行校準。在這種情況下,所有提供的資料都會用於校準。使用者必須手動確保用於模型擬合和校準的資料是不相交的。

校準基於 estimatordecision_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 分割器,

  • 產生 (train, test) 分割(作為索引陣列)的可迭代物件。

對於整數/None 輸入,如果 y 是二元的或多類別的,則會使用 StratifiedKFold。如果 y 既不是二元的也不是多類別的,則會使用 KFold

請參閱使用者指南,了解此處可使用的各種交叉驗證策略。

在 0.22 版本中變更:如果 cv 為 None,則預設值從 3 折變更為 5 折。

在 1.6 版本中變更:"prefit" 已被棄用。請改用 FrozenEstimator

n_jobsint,預設值=None

要平行執行的工作數量。None 表示 1,除非在 joblib.parallel_backend 環境中。-1 表示使用所有處理器。

基本估計器複製會在交叉驗證迭代中平行擬合。因此,只有當 cv != "prefit" 時才會發生平行處理。

請參閱詞彙表,以了解更多詳細資訊。

在 0.24 版本中新增。

ensemblebool 或 “auto”,預設值=”auto”

決定如何擬合校準器。

如果 estimatorFrozenEstimator,則 “auto” 將會使用 False,否則使用 True

如果為 True,則對於每個 cv 折疊,會使用訓練資料擬合 estimator,並使用測試資料進行校準。最終的估計器是由 n_cv 個已擬合的分類器和校準器對組成的集成,其中 n_cv 是交叉驗證折疊的數量。輸出是所有配對的平均預測機率。

如果 False,則會使用 cv 透過 cross_val_predict 計算無偏預測,然後將其用於校準。在預測時,使用的分類器是在所有資料上訓練的 estimator。請注意,此方法也已在 sklearn.svm 估算器中以 probabilities=True 參數內部實作。

在 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]

Obtaining calibrated probability estimates from decision trees and naive Bayesian classifiers, B. Zadrozny & C. Elkan, ICML 2001

[2]

Transforming Classifier Scores into Accurate Multiclass Probability Estimates, B. Zadrozny & C. Elkan, (KDD 2002)

[3]

Probabilistic Outputs for Support Vector Machines and Comparisons to Regularized Likelihood Methods, J. Platt, (1999)

[4]

Predicting Good Probabilities with Supervised Learning, 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.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()
>>> 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)[原始碼]#

擬合校準模型。

參數:
X形狀為 (n_samples, n_features) 的類陣列

訓練資料。

y形狀為 (n_samples,) 的類陣列

目標值。

sample_weight形狀為 (n_samples,) 的類陣列,預設值為 None

樣本權重。如果為 None,則樣本的權重相等。

**fit_paramsdict

要傳遞給基礎分類器的 fit 方法的參數。

傳回值:
self物件

傳回自身的實例。

get_metadata_routing()[原始碼]#

取得此物件的中繼資料路由。

請查閱 使用者指南,以瞭解路由機制如何運作。

傳回值:
routingMetadataRouter

封裝路由資訊的 MetadataRouter

get_params(deep=True)[原始碼]#

取得此估算器的參數。

參數:
deepbool,預設值為 True

如果為 True,將傳回此估算器和所包含的子物件(屬於估算器)的參數。

傳回值:
paramsdict

對應到其值的參數名稱。

predict(X)[原始碼]#

預測新樣本的目標。

預測的類別是具有最高機率的類別,因此可能與未校準分類器的預測不同。

參數:
X形狀為 (n_samples, n_features) 的類陣列

樣本,如同 estimator.predict 所接受的格式。

傳回值:
C形狀為 (n_samples,) 的 ndarray

預測的類別。

predict_proba(X)[原始碼]#

校準後的分類機率。

此函式會根據測試向量 X 的每個類別傳回校準後的分類機率。

參數:
X形狀為 (n_samples, n_features) 的類陣列

樣本,如同 estimator.predict_proba 所接受的格式。

傳回值:
C形狀為 (n_samples, n_classes) 的 ndarray

預測的機率。

score(X, y, sample_weight=None)[原始碼]#

返回給定測試數據和標籤的平均準確度。

在多標籤分類中,這是子集準確度,這是一個嚴苛的指標,因為您要求每個樣本的每個標籤集都被正確預測。

參數:
X形狀為 (n_samples, n_features) 的類陣列

測試樣本。

y形狀類似陣列 (n_samples,) 或 (n_samples, n_outputs)

用於 X 的真實標籤。

sample_weight形狀為 (n_samples,) 的類陣列,預設值為 None

樣本權重。

傳回值:
scorefloat

self.predict(X) 相對於 y 的平均準確度。

set_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') CalibratedClassifierCV[原始碼]#

請求傳遞給 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

用於 fitsample_weight 參數的中繼資料路由。

傳回值:
self物件

已更新的物件。

set_params(**params)[原始碼]#

設定此估算器的參數。

此方法適用於簡單的估算器,以及巢狀物件(例如 Pipeline)。後者具有 <component>__<parameter> 形式的參數,因此可以更新巢狀物件的每個組件。

參數:
**paramsdict

估算器參數。

傳回值:
self估算器實例

估算器實例。

set_score_request(*, sample_weight: bool | None | str = '$UNCHANGED$') CalibratedClassifierCV[原始碼]#

請求傳遞給 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

用於 scoresample_weight 參數的中繼資料路由。

傳回值:
self物件

已更新的物件。