Scikit使用CalibratedClassifierCV校准分类器的正确方法

时间:2017-02-22 11:47:53

标签: python scikit-learn classification training-data calibration

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的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

我已经在CrossValidated中回答了同样的问题。我还是留在这里,因为我不清楚这个问题是属于这里还是CrossVal。

---原始答案---

CalibratedClassifierCV docs中提到的两件事暗示了它可以使用的方式:

  

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现在是折叠数。
  • 最后,您致电cccv_instance.fit(X, y)。由于您的模型未经过培训,因此X和y必须用于训练和校准。确保数据脱节的方法是'是交叉验证:对于任何给定的折叠,CCCV会将X和y分成训练和校准数据,因此它们不会重叠。

TLDR:方法一允许您控制用于训练和校准的内容。方法二使用交叉验证来尝试并充分利用您的数据。