校準分類器交叉驗證 (CalibratedClassifierCV)#
- class sklearn.calibration.CalibratedClassifierCV(estimator=None, *, method='sigmoid', cv=None, n_jobs=None, ensemble='auto')[原始碼]#
使用等張迴歸或邏輯迴歸進行機率校準。
這個類別使用交叉驗證來估計分類器的參數,並隨後校準分類器。預設情況下,當
ensemble=True
時,對於每個 cv 分割,它會將基本估計器的副本擬合到訓練子集,並使用測試子集進行校準。對於預測,會將這些個別校準分類器的預測機率取平均。當ensemble=False
時,會透過cross_val_predict
使用交叉驗證來取得無偏差的預測,然後將其用於校準。對於預測,會使用使用所有資料訓練的基本估計器。這是當SVC
和NuSVC
估計器的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 折交叉驗證,
整數,指定折數。
產生 (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”
決定如何擬合校準器。
如果
estimator
是FrozenEstimator
,則 “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
用於
fit
中sample_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
用於
score
中sample_weight
參數的中繼資料路由。
- 傳回值:
- self物件
已更新的物件。