3

我想做什么?

我正在尝试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()

4

1 回答 1

3

基本上 GridSearchCV 很聪明,可以为该 cv 参数采用多个选项 - 一个数字、拆分索引的迭代器或具有拆分功能的对象。你可以看看这里的代码,复制在下面。

cv = 5 if cv is None else cv
if isinstance(cv, numbers.Integral):
    if (classifier and (y is not None) and
            (type_of_target(y) in ('binary', 'multiclass'))):
        return StratifiedKFold(cv)
    else:
        return KFold(cv)

if not hasattr(cv, 'split') or isinstance(cv, str):
    if not isinstance(cv, Iterable) or isinstance(cv, str):
        raise ValueError("Expected cv as an integer, cross-validation "
                         "object (from sklearn.model_selection) "
                         "or an iterable. Got %s." % cv)
    return _CVIterableWrapper(cv)

return cv  # New style cv objects are passed without any modification

基本上,如果你什么都不通过,它会使用一个 5 的 KFold。如果它是一个分类问题并且目标是二元/多类,它也足够聪明地自动使用 StratifedKFold。

如果你传递一个带有 split 函数的对象,它只会使用它。如果你不传递它们中的任何一个,而是传递一个可迭代的,它假定它是拆分索引的可迭代并为你包装它。

因此,在您的情况下,假设它是具有二进制/多类目标的分类问题,以下所有内容将给出完全相同的结果/拆分 - 您使用哪一个并不重要!

cv=5
cv=StratifiedKFold(5)
cv=StratifiedKFold(5).split(xtrain,ytrain)
于 2020-06-04T12:20:47.983 回答