管道上的GridSearchCV:best_params_似乎是错误的

时间:2014-06-10 20:44:29

标签: scikit-learn

我在由StandardScaler, SelectKBest & Lasso组成的管道上进行gridSearch。我从以下代码中获取的best_params_与最小化grid_scores _的参数组合不匹配:

numComponents=np.arange(20,220,20)
alphas=np.logspace(-6,0,15)

pipe = Pipeline(steps=[('normalize', StandardScaler()), ('selectK', SelectKBest(f_regression)),     ('lasso', Lasso())])

gsObj = gridCV(pipe, dict(selectK__k=numComponents.tolist(), lasso__alpha=alphas.tolist()),     scoring='mean_squared_error', cv=10, n_jobs=3, pre_dispatch=3)
gsObj.fit(X_train, y_train)

cvMse=np.array([-score[1] for score in gsObj.grid_scores_]).reshape(len(numComponents),     len(alphas))
optNumComponents=gsObj.best_params_['selectK__k']
optAlpha=gsObj.best_params_['lasso__alpha']

最低cvMse出现在numComponents索引= 5,alpha索引= 7,而从gsObj.best_params_ optNumComponents索引= 2,optAlpha索引= 9

我将grid_scores_重塑为len(numComponents) x len(alphas)是错误的(因此假设分数是按此方式排序的)?

1 个答案:

答案 0 :(得分:0)

引用docsgrid_scores_是scikit-learn 0.14.1中的命名元组列表,

  

包含param_grid中所有参数组合的分数。每个条目对应一个参数设置。每个命名元组都具有以下属性:   参数,参数设置的字典   mean_validation_score,交叉验证折叠的平均得分   cv_validation_scores,每个折叠的分数列表。

所以不,你不应该依赖这个列表中的任何订单,而应该检查项目以找出它们包含的参数。您似乎假设参数按照您的代码排序,但参数网格为dict,但不保证其键中的任何顺序。