Sklearn建议,对于迭代估计器,迭代次数应由.fit()
的n_iter
参数指定。
使用GridSearchCV运行最佳超参数的网格搜索,可以仅为可以使用estimator.set_params()
设置的参数指定值的范围。
所以我想知道,我如何运行网格搜索(以及其他)迭代次数?一种解决方案是更改估计器代码,使n_iter
在构造函数中由.set_params()
设置,但由于某种原因,明确不建议这样做,如上所述。
编辑:下面是一个例子:
创建一个需要两个参数的估计器:
estimator = SomeEstimator(alpha=5, theta=0.001)
您可以使用fit()
方法在数据X和标签y上拟合估计器。此外,假设估计器运行迭代算法,您可以指定它应该运行的次数。Sklearn建议为此使用fit()
函数的参数n_iter
:
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)
这将运行α/θ组合的估计器:
(5, 0.1)
(5, 0.01)
(5, 0.001)
(6, 0.1)
(6, 0.01)
(6, 0.001)
但我想用这六个组合来表示n_iter
(1..10)的不同值。当然我可以使用for循环,但这不是GridSearchCV的重点。
您可以使用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}