我想做什么?
我正在尝试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()