sap*_*ico 3 python classification calibration training-data scikit-learn
Scikit 有CalibrateClassifierCV,它允许我们在特定的 X、y 对上校准我们的模型。它还明确指出data for fitting the classifier and for calibrating it must be disjoint.
如果它们必须是不相交的,那么用以下方法训练分类器是否合法?
model = CalibratedClassifierCV(my_classifier)
model.fit(X_train, y_train)
Run Code Online (Sandbox Code Playgroud)
我担心使用相同的训练集会违反规则disjoint data。另一种选择可能是有一个验证集
my_classifier.fit(X_train, y_train)
model = CalibratedClassifierCV(my_classifier, cv='prefit')
model.fit(X_valid, y_valid)
Run Code Online (Sandbox Code Playgroud)
其缺点是留下的训练数据较少。另外,如果CalibrateClassifierCV应该只适合适合不同训练集的模型,为什么它的默认选项是cv=3,它也适合基本估计器?交叉验证是否自行处理不相交规则?
问题:CalibrateClassifierCV 的正确使用方法是什么?
小智 5
我已经在CrossValidated中回答了完全相同的问题。无论如何,我把它留在这里,因为我不清楚这个问题是属于这里还是属于 CrossVal。
\n\n---原答案---
\n\nCalibrateClassifierCV 文档中提到了两件事,暗示了它的使用方式:
\n\n\n\n\nbase_estimator:如果 cv=prefit,则分类器必须已经适合数据。
\n\ncv:如果传递了\xe2\x80\x9cprefit\xe2\x80\x9d,则假设已经拟合了base_estimator,并且所有数据都用于校准。
\n
我显然可能会错误地解释这一点,但看来您可以通过两种方式使用 CCCV(CalibrateClassifierCV 的缩写):
\n\n第一:
\n\nyour_model.fit(X_train, y_train)。your_cccv = CalibratedClassifierCV(your_model, cv=\'prefit\')。请注意,您设置了cv标记,表明您的模型已经拟合。your_cccv.fit(X_validation, y_validation)。该验证数据仅用于校准目的。第二:
\n\nyour_cccv=CalibratedClassifierCV(your_untrained_model, cv=3). 注意cv现在是折叠数。cccv_instance.fit(X, y)。由于您的模型未经训练,因此必须使用 X 和 y 进行训练和校准。确保数据“不相交”的方法是交叉验证:对于任何给定的折叠,CCCV 会将 X 和 y 拆分为训练数据和校准数据,因此它们不会重叠。TLDR:方法一允许您控制用于训练和校准的内容。方法二使用交叉验证来尝试充分利用数据来实现这两个目的。
\n| 归档时间: |
|
| 查看次数: |
3128 次 |
| 最近记录: |