Python Sklearn:n_iter参数上的GridSearchCV

Python Sklearn:n_iter参数上的GridSearchCV,python,scikit-learn,grid-search,Python,Scikit Learn,Grid Search,sk了解对于迭代估算器,迭代次数应由.fit()的n\u iter参数指定 通过对最佳超参数运行网格搜索,您可以仅为可使用estimator.set_params()设置的参数指定值的范围 所以我想知道,我如何运行网格搜索(除其他外)迭代次数? 解决方案是更改估计器代码,以便在构造函数中通过.set\u params()设置n\u iter,但由于某种原因,不建议这样做,如上所述 编辑: 以下是一个例子: 创建需要两个参数的估计器: estimator = SomeEstimator(alpha

sk了解对于迭代估算器,迭代次数应由
.fit()
n\u iter
参数指定

通过对最佳超参数运行网格搜索,您可以仅为可使用
estimator.set_params()
设置的参数指定值的范围

所以我想知道,我如何运行网格搜索(除其他外)迭代次数? 解决方案是更改估计器代码,以便在构造函数中通过
.set\u params()
设置
n\u iter
,但由于某种原因,不建议这样做,如上所述

编辑: 以下是一个例子:

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

estimator = SomeEstimator(alpha=5, theta=0.001)
GridSearchCV(estimator, {'alpha':[5, 6], 'theta':[0.1, 0.01, 0.001]}).fit(X, y, n_iter=4)
您可以使用
fit()
方法在数据X和标签y上拟合估计器。此外,假设估计器运行一个迭代算法,您可以指定它应该运行多少次。Sklearn建议为此使用
fit()
函数的参数
n\u iter

estimator.fit(X, y, n_iter=4)
要找到alpha和θ的最佳参数值,可以运行GridSearchCV,它为这些参数的所有组合运行
estimator.fit()

estimator = SomeEstimator(alpha=5, theta=0.001)
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}

你能用一个例子更好地解释一下吗?我添加了一个exampleOk,但是
n_iter
是一个超参数吗?它在当前版本中已被弃用,将被删除。这就是为什么我问这个问题,它是否被认为是一个有效的超参数。我认为不应该。你能告诉我这是什么地方吗?我可以看到
fit_params
已被弃用,但看不到任何迹象表明这不起作用。此外,我似乎没有收到未来的警告(除了为SGDClassizer抛出的警告),我不是说它不会像您描述的那样工作。会的。但0.19中的SGDClassizer不推荐使用此参数。看,但我的观点是,
n_iter
通常不应被视为超参数,因为大多数情况下,调谐始终会选择更大的
n_iter
。它取决于要跨越的损失的
阈值。所以我们可以间接地得到其他更好的参数,我明白你的意思了。我同意大多数情况下都是这样。在许多情况下,估计器的性能停滞(或几乎停滞)在某一特定值
n_iter
。在这种情况下,找到这个值会很有趣。在这种情况下,仅查看gridsearch选择的最佳参数确实没有多大意义。但您可以使用gridsearch来绘制采样的超参数曲面,然后将
n_iter
包含在内是非常有意义的。