在 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_score
或 cross_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%