首页 > 解决方案 > 在 k-Fold 交叉验证中,是否为 Sklearn 中的每个折叠启动了一个新模型?

问题描述

我知道如何使用基本实用功能(例如Sklearncross_val_scorecross_validate在 Sklearn 中)执行 CV。

但是,我开始使用 XGBoost,所以为了能够使用它的参数,我必须使用CV 拆分器fit的功能进行交叉验证。split我的问题是,我是否应该像这样为每个折叠初始化一个新模型:

from sklearn.model_selection import KFold
import xgboost as xgb

cv = KFold(5)

for train_idx, test_idx in cv.split(X, y):
    model = xgb.XGBRegressor()
    model.fit(X[train_idx], y[train_idx], eval_metric='rmsle')
    ....

或在 for 循环之外初始化一个模型,如下所示:

cv = KFold(5)

model = xgb.XGBRegressor()

for train_idx, test_idx in cv.split(X, y):
    model.fit(X[train_idx], y[train_idx], eval_metric='rmsle')
    ....

标签: pythonscikit-learncross-validationxgboost

解决方案


我已经收到了别人的答案。事实证明,在每个折叠中,您都应该初始化一个新模型。


推荐阅读