感谢堆栈溢出的帮助,我成功地实现了网格搜索,并为我的决策树模型提供了交叉验证。
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-fold 交叉验证将我的整个数据集拆分为k
训练数据集和相应的验证数据集。
然后,我假设我的代码做类似的事情:
应用网格搜索
k
次,即在 k 折叠的每个训练数据集上。每个
k
折叠的网格搜索的最佳参数应用于相应的验证数据集。针对
k
-folds 的每个验证数据集计算验证误差
到目前为止,这是正确的吗?
我用 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}