Cross-Validation
Scikit 使用 CalibratedClassifierCV 校準分類器的正確方法
Scikit 有CalibratedClassifierCV,它允許我們在特定的 X、y 對上校准我們的模型。它還明確指出
data for fitting the classifier and for calibrating it must be disjoint.
如果它們必須是不相交的,那麼用以下方法訓練分類器是否合法?
model = CalibratedClassifierCV(my_classifier) model.fit(X_train, y_train)
我擔心使用相同的訓練集會違反
disjoint data
規則。另一種方法可能是有一個驗證集my_classifier.fit(X_train, y_train) model = CalibratedClassifierCV(my_classifier, cv='prefit') model.fit(X_valid, y_valid)
其缺點是留下較少的數據用於訓練。此外,如果CalibratedClassifierCV應該只適合適合不同訓練集的模型,為什麼它的默認選項是
cv=3
,它也適合基本估計器?交叉驗證是否自行處理不相交的規則?問題:使用 CalibratedClassifierCV 的正確方法是什麼?
CalibratedClassifierCV 文檔中提到了兩件事,暗示了它的使用方式:
**base_estimator:**如果 cv=prefit,分類器必須已經適合數據。
**cv:**如果“prefit”通過,則假設base_estimator已經被擬合,所有數據都用於校準。
我顯然可能解釋錯了,但看來您可以通過兩種方式使用 CCCV(CalibratedClassifierCV 的縮寫):
第一:
- 你像往常一樣訓練你的模型,
your_model.fit(X_train, y_train)
.- 然後,您創建您的 CCCV 實例,
your_cccv = CalibratedClassifierCV(your_model, cv='prefit')
. 請注意,您設置cv
為標記您的模型已經適合。- 最後,您調用
your_cccv.fit(X_validation, y_validation)
. 此驗證數據僅用於校準目的。第二:
- 你有一個新的、未經訓練的模型。
- 然後你創建
your_cccv=CalibratedClassifierCV(your_untrained_model, cv=3)
. 注意cv
現在是折疊的數量。- 最後,您調用
your_cccv.fit(X, y)
. 因為您的模型未經訓練,X 和 y 必須用於訓練和校準。確保數據“不相交”的方法是交叉驗證:對於任何給定的折疊,CCCV 會將 X 和 y 拆分為您的訓練和校準數據,因此它們不會重疊。TLDR:方法一允許您控制用於訓練和校準的內容。方法二使用交叉驗證來嘗試充分利用您的數據以實現這兩個目的。