在 k-Fold 交叉验证中,是不是为 Sklearn 中的每个折叠启动了一个新模型?

Posted

技术标签:

【中文标题】在 k-Fold 交叉验证中,是不是为 Sklearn 中的每个折叠启动了一个新模型?【英文标题】:In k-Fold cross-validation, is a new model initiated for each fold in Sklearn?在 k-Fold 交叉验证中,是否为 Sklearn 中的每个折叠启动了一个新模型? 【发布时间】:2021-10-02 06:03:01 【问题描述】:

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

但是,我开始使用 XGBoost,所以为了能够使用它的 fit 参数,我必须使用 CV 拆分器的 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')
    ....

【问题讨论】:

【参考方案1】:

我已经收到其他人的答复。事实证明,在每一折中,您应该初始化一个新模型。

【讨论】:

以上是关于在 k-Fold 交叉验证中,是不是为 Sklearn 中的每个折叠启动了一个新模型?的主要内容,如果未能解决你的问题,请参考以下文章

我的 r-squared 得分为负数,但我使用 k-fold 交叉验证的准确度得分约为 92%

Spark K-fold 交叉验证

在 CARET k-fold 交叉验证分类中更改 SMOTE 参数

k折交叉验证模型选择方法

K-fold 交叉验证查询

k-fold交叉验证确定k-means中的k?