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的重点。
答案 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}