为什么在传递StratifiedKFold()作为GridSearchCV的参数的过程中应该调用split()函数?

问题描述 投票:2回答:1

我想做什么?

我正在尝试使用StratifiedKFold()中的GridSearchCV()

然后,什么让我感到困惑?

[当我们使用K折叠交叉验证时,我们只传递GridSearchCV()内部的CV编号,如下所示。

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)

但是this answer

无论使用什么cross validation strategy,都需要按照建议使用功能split提供生成器:

kfolds = StratifiedKFold(5)
clf = GridSearchCV(estimator, parameters, scoring=qwk, cv=kfolds.split(xtrain,ytrain))
clf.fit(xtrain, ytrain)

此外,this question的答案之一也建议这样做。这意味着,他们建议在使用StratifiedKFold(n_splits=5).split(xtrain,ytrain)时调用split函数:GridSearchCV()。但是,我发现调用split()而没有调用split()会给我相同的f1分数。

因此,我的问题

  • 我不明白为什么在分层K折叠期间我们需要调用split()函数我们在K Fold CV期间不需要做这类事情。

  • 如果调用split()函数,GridSearchCV()将如何用作Split()函数returns training and testing data set indices?也就是说,我想知道GridSearchCV()将如何使用这些索引?

split cross-validation grid-search gridsearchcv k-fold
1个回答
0
投票

基本上GridSearchCV很聪明,可以为该cv参数采用多个选项-一个数字,一个拆分索引的迭代器或一个带有拆分函数的对象。您可以查看下面复制的代码here

© www.soinside.com 2019 - 2024. All rights reserved.