Sklearn GridSearchCV 会遍历估算器参数的所有可能默认选项吗?

Would Sklearn GridSearchCV go through all the possible default options of the estimator's parameters?

scikit-learn 中的算法可能有一些具有默认选项范围的参数,

sklearn.neighbors.KNeighborsClassifier(n_neighbors=5, weights='uniform', algorithm='auto', leaf_size=30, p=2, metric='minkowski', metric_params=None, n_jobs=1, **kwargs)

并且参数有默认值"auto",有以下选项:algorithm : {'auto', 'ball_tree ', 'kd_tree', '蛮力'}

我的问题是,当使用 **GridSearchCV** 找到算法参数的最佳值集时,GridSearchCV 是否会使用参数的所有默认选项,即使我没有将它添加到parameter_list?

比如我想用**GridSearchCV****kNN**寻找最佳参数值,我需要检查n_neighborsalgorithm参数,是吗可能我只需要像下面这样传递没有值(因为 algorithm 参数有默认选项),

parameter_list = {'n_neighbors': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30]}

或者,我必须指定我要检查的所有选项?

parameter_list = {
'algorithm': ['auto', 'ball_tree', 'kd_tree', 'brute'],
'n_neighbors': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30]}

谢谢。

不,您误解了参数默认值和可用选项。

查看 documentation of KNeighborsClassifier,参数 algorithm 是一个可选参数(即您可以也可以不在 KneighborsClassifier 的构造函数中指定它)。

但是如果您决定指定它,那么它有可用的选项:{‘auto’, ‘ball_tree’, ‘kd_tree’, ‘brute’}。这意味着您只能从这些给定的选项中为 algorithm 提供值,而不能使用任何其他字符串为 algorithm 指定。默认选项是 'auto',这意味着如果您不提供任何值,那么它将在内部使用 'auto'.

  • 案例 1:- KNeighborsClassifier(n_neighbors=3)

这里因为没有指定algorithm的值,所以默认使用algorithm='auto'.

  • 案例 2:- KNeighborsClassifier(n_neighbors=3, algorithm='kd_tree')

这里因为指定了算法,所以会使用'kd_tree'

现在,GridSearchCV 只会将那些在 param_grid 中指定的参数传递给估算器。因此,在您的情况下,当您使用问题中的第一个 parameter_list 时,它只会将 n_neighbors 提供给估算器,并且算法将只有默认值 ('auto').

如果您使用第二个 parameter_list,则 n_neighborsalgorithm 都将传递给估算器。