我想做什么?
我正在尝试StratifiedKFold()在GridSearchCV().
那么,什么让我感到困惑?
当我们使用 K 折交叉验证时,我们只需将 CV 的数量传递给内部GridSearchCV(),如下所示。
grid_search_m = GridSearchCV(rdm_forest_clf, param_grid, cv=5, scoring='f1', return_train_score=True, n_jobs=2)
然后,当我需要使用时StratifiedKFold(),我认为程序应该保持不变。即,仅将拆分数设置为 -StratifiedKFold(n_splits=5)至cv。
grid_search_m = GridSearchCV(rdm_forest_clf, param_grid, cv=StratifiedKFold(n_splits=5), scoring='f1', return_train_score=True, n_jobs=2)
但是这个答案说
无论使用什么交叉验证策略,所需要的只是使用函数 split 提供生成器,如建议的那样:
kfolds = StratifiedKFold(5) clf = GridSearchCV(estimator, parameters, scoring=qwk, cv=kfolds.split(xtrain,ytrain)) clf.fit(xtrain, ytrain)
此外,这个问题的答案之一也建议这样做。这意味着,他们建议调用 split 函数:StratifiedKFold(n_splits=5).split(xtrain,ytrain)在使用GridSearchCV(). 但是,我发现打电话split()和不打电话split()给我相同的 f1 分数。
因此,我的问题
我不明白为什么我们需要
split()在 Stratified K Fold 期间调用函数,因为我们不需要在 K Fold CV 期间做这类事情。如果
split()调用函数,函数返回训练和测试数据集索引时GridSearchCV()将如何工作?也就是说,我想知道如何使用这些索引?Split()GridSearchCV()