Scikit 使用 CalibratedClassifierCV 校准分类器的正确方法
Scikit correct way to calibrate classifiers with 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的正确使用方法是什么?
我已经在 CrossValidated 中回答了完全相同的问题。无论如何我都会把它留在这里,因为我不清楚这个问题是属于这里还是属于 CrossVal。
---原答案---
CalibratedClassifierCV docs 中提到的两件事暗示了它的使用方式:
base_estimator: If cv=prefit, the classifier must have been fit already on data.
cv: If “prefit” is passed, it is assumed that base_estimator has been fitted already and all data is used for calibration.
我可能显然解释错了,但看来您可以通过两种方式使用 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 必须用于训练和校准。确保数据 'disjoint' 的方法是交叉验证:对于任何给定的折叠,CCCV 会将 X 和 y 拆分为您的训练和校准数据,因此它们不会重叠。
TLDR:方法一允许您控制用于训练和校准的内容。方法二使用交叉验证来尝试充分利用您的数据来实现这两个目的。
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的正确使用方法是什么?
我已经在 CrossValidated 中回答了完全相同的问题。无论如何我都会把它留在这里,因为我不清楚这个问题是属于这里还是属于 CrossVal。
---原答案---
CalibratedClassifierCV docs 中提到的两件事暗示了它的使用方式:
base_estimator: If cv=prefit, the classifier must have been fit already on data.
cv: If “prefit” is passed, it is assumed that base_estimator has been fitted already and all data is used for calibration.
我可能显然解释错了,但看来您可以通过两种方式使用 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 必须用于训练和校准。确保数据 'disjoint' 的方法是交叉验证:对于任何给定的折叠,CCCV 会将 X 和 y 拆分为您的训练和校准数据,因此它们不会重叠。
TLDR:方法一允许您控制用于训练和校准的内容。方法二使用交叉验证来尝试充分利用您的数据来实现这两个目的。