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_neighbors
和algorithm
参数,是吗可能我只需要像下面这样传递没有值(因为 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_neighbors
和 algorithm
都将传递给估算器。
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_neighbors
和algorithm
参数,是吗可能我只需要像下面这样传递没有值(因为 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_neighbors
和 algorithm
都将传递给估算器。