Sklearn GridSearchCV是否会遍历估计器参数的所有可能默认选项?

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’, ‘brute’}

我的问题是,在使用**GridSearchCV**寻找算法参数的最佳值集时,如果我不将其添加到参数列表中,GridSearchCV是否会遍历参数的所有默认选项?

例如,我想使用**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]}

谢谢。


回答:

不,你对参数默认值和可用选项存在误解。

查看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都将被传递给估计器。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注