0

算法在scikit学习可能有一些参数有选项默认范围,Sklearn GridSearchCV会通过估计器参数的所有可能的默认选项吗?

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

和参数有一个默认值“自动”,使用下列选项:algorithm:{“汽车”, '我的问题是,当使用**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]} 

谢谢。

回答

0

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

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

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

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

这里因为对于algorithm没有价值已指定,则其将被默认使用的算法= '自动'。

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

这里作为已指定的算法,所以它会使用 'kd_tree' 现在

GridSearchCV只会把这些参数的估计量在param_grid中指定。所以在你的情况下,当你使用问题中的第一个parameter_list时,那么它将只给出估计器的n_neighbors,算法将只有默认值('auto')。

如果您使用第二个parameter_list,那么n_neighborsalgorithm将被传递给估计器。

+0

非常感谢很多人,非常有帮助 –

相关问题