我想做什么?
我正在尝试使用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()
将如何使用这些索引?
基本上GridSearchCV很聪明,可以为该cv参数采用多个选项-一个数字,一个拆分索引的迭代器或一个带有拆分函数的对象。您可以查看下面复制的代码here。