交叉验证网格搜索背后的理论

Theory behind grid search with cross validation

感谢堆栈溢出的帮助,我成功地为我的决策树模型实现了网格搜索和交叉验证。

dtc = DecisionTreeClassifier()

parameter_grid = {'splitter': ['best', 'random'], 
        'min_samples_split': [15, 16, 17, 18, 19,20, 21, 22, 23, 24, 25,],
        'min_samples_leaf': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10,],
        'criterion': ['gini', 'entropy'],
        'random_state': [0]}

cross_validation = StratifiedKFold(n_splits=10)

grid_search = GridSearchCV(dtc, param_grid=parameter_grid, cv=cross_validation)

grid_search.fit(x, y)

我的问题涉及其背后的理论。

我知道 k 折交叉验证将我的整个数据集拆分为 k 训练数据集和相应的验证数据集。

然后,我假设我的代码做了类似的事情:

  1. 应用网格搜索 k 次,即在 k 折的每个训练数据集上。

  2. 每个 k 折叠的网格搜索的最佳参数应用于相应的验证数据集。

  3. k-folds

  4. 的每个验证数据集计算验证误差

到目前为止这是正确的吗?

我用 grid_search.best_score_ 和 grid_search.best_params_ 得到的值是多少?这些是第 3 步中的最佳验证错误 (grid_search.best_score_) 和网格搜索的相应最佳值 (grid_search.best_params_) 还是某个平均值?

非常欢迎任何帮助或澄清!

对于网格搜索的每个可能组合(在您的情况下为 2*11*10*2*1=440),训练数据集被拆分 k 次,并且第 k 次验证出现 average 错误正在计算每个超参数组合的集合。 平均误差最低的组合是 grid_search.best_params_.

例如:

{'splitter': 'best', 
        'min_samples_split': 20,
        'min_samples_leaf': 9,
        'criterion':  'entropy',
        'random_state': 0}