为什么 GridSearchCV return 得分与直接由 运行 模型编辑的得分 return 如此不同?

Why GridSearchCV return score so different from the score returned by running model directly?

我使用 GridSearchCV 找到套索模型的最佳 alpha。

alphas = np.logspace(-5, 2, 30)
grid = GridSearchCV(estimator=Lasso(),
param_grid=dict(alpha=alphas), cv=10, scoring='r2')
grid.fit(self.X, self.Y) # entire datasets were fed here

print grid.best_params_, grid.best_score_ # score -0.0470788758558
for params, mean_score, scores in grid.grid_scores_:
    print mean_score, params

我得到的最佳参数为 0.0014873521072935117,r2 分数为负 -0.0470788758558。


然后我直接在模型上试了这个alpha。我运行循环中的以下代码。

X_train, X_test, y_train, y_test = train_test_split(self.X, self.Y, train_size=0.7)
lasso = Lasso(alpha=0.001487)
lasso.fit(X_train, y_train)
print lasso.score(X_test, y_test)

请注意,我没有设置 运行dom 状态,因此它应该作为交叉验证工作。但是我在这里得到的分数是 0.11 左右(0.11-0.12),无论我 运行 代码多少次。


问题

为什么这两种方法的分数 -0.0470788758558 和 0.11 如此不同?

找到原因了。

cv 应该这样设置:

cv = ShuffleSplit(n=len(X), n_iter=10, test_size=.3)

当cv等于整数时,表示每次迭代有多少次折叠,而不是迭代次数。