Cross-Validation

Scikit 使用 CalibratedClassifierCV 校準分類器的正確方法

  • February 22, 2017

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:方法一允許您控制用於訓練和校準的內容。方法二使用交叉驗證來嘗試充分利用您的數據以實現這兩個目的。

引用自:https://stats.stackexchange.com/questions/263393

comments powered by Disqus