0

Scikit有CalibratedClassifierCV,它允許我們在特定的X,Y對上校準我們的模型。它還明確指出:data for fitting the classifier and for calibrating it must be disjoint.Scikit用CalibratedClassifierCV校準分類器的正確方法

如果它們必須是不相交的,用下面的方法訓練分類器是否合法?

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的正確方法是什麼?

回答

1

我已經在完全相同的問題回答了這個問題CrossValidated。無論如何,我會把它留在這裏,因爲我不清楚這個問題是屬於這裏還是CrossVal。

---原來的答覆---

有在CalibratedClassifierCV docs提到,朝着方式暗示兩件事情可以使用:

base_estimator:如果CV = prefit中,分類器必須已經適合數據。

CV:如果「prefit」通過,假設base_estimator已經被安裝,所有數據被用於校準。

我明顯地可以解釋這個錯誤,但它似乎可以通過兩種方式來使用CC-CV(簡稱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是摺疊的數量。
  • 最後,您致電cccv_instance.fit(X, y)。由於您的模型未經訓練,X和y必須用於訓練和校準。確保數據「不相交」的方法是交叉驗證:對於任何給定的摺疊,CCCV都會將X和y分成您的訓練和校準數據,因此它們不會重疊。

TLDR:方法一允許您控制什麼用於訓練和校準。方法二使用交叉驗證來嘗試爲兩種目的充分利用數據。