Sklearn:GridSearchCV over n_iter参数

时间:2017-10-10 07:33:42

标签: python scikit-learn grid-search

Sklearn recommends对于迭代估算器,迭代次数应由n_iter .fit()参数指定。

使用GridSearchCV运行网格搜索以获得最佳超参数,您只能指定可以使用estimator.set_params()设置的参数的值范围。

所以我想知道,我如何运行网格搜索(以及其他)迭代次数? 解决方案是更改估算器代码,以便n_iter在构造函数中设置.set_params(),但出于某种原因,这显然不建议使用,如上所述。

修改 这是一个例子:

创建一个需要两个参数的估算器:

estimator = SomeEstimator(alpha=5, theta=0.001)

您可以在数据X上拟合估算器,并使用fit()方法标记y。此外,假设估算器运行迭代算法,您可以指定它应运行的次数。 Sklearn建议使用n_iter函数的参数fit()

estimator.fit(X, y, n_iter=4)

要查找alpha和theta的最佳参数值,您可以运行GridSearchCV,对于这些参数的所有组合运行estimator.fit()

GridSearchCV(estimator, {'alpha':[5, 6], 'theta':[0.1, 0.01, 0.001]}).fit(X, y, n_iter=4)

这将运行alpha / theta组合的估算器:

(5, 0.1)
(5, 0.01)
(5, 0.001)
(6, 0.1)
(6, 0.01)
(6, 0.001)

但我希望将这六种组合用于n_iter(1..10)的不同值。当然我可以使用for循环,但这不是GridSearchCV的重点。

1 个答案:

答案 0 :(得分:1)

您可以使用GridSearchCV查找最佳n_iter超参数,并将估算值作为参数,与其他超参数一样。以下作品见于sklearn 0.19.0

np.random.seed(42)
clf = SGDClassifier()
params = {'n_iter': [30, 50, 100], 'alpha': [0.01, 0.1, 1.0]}
gs = GridSearchCV(clf, params, scoring='accuracy', cv=5)
X = np.random.random((100, 5))
y = np.random.choice([0, 1], 100)
gs.fit(X, y)
print gs.best_params_

<强>输出:

{'alpha': 0.1, 'n_iter': 30}