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的正确方法是什么?
答案 0 :(得分:2)
我已经在CrossValidated中回答了同样的问题。我还是留在这里,因为我不清楚这个问题是属于这里还是CrossVal。
---原始答案---
CalibratedClassifierCV docs中提到的两件事暗示了它可以使用的方式:
base_estimator:如果cv = prefit,分类器必须已经适合数据。
cv:如果通过“prefit”,则假设已经安装了base_estimator并且所有数据都用于校准。
我显然可能会解释这个错误,但看起来你可以用两种方式使用CCCV(CalibratedClassifierCV的简称):
第一名:
your_model.fit(X_train, y_train)
。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:方法一允许您控制用于训练和校准的内容。方法二使用交叉验证来尝试并充分利用您的数据。