我使用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)
请注意,我没有设置随机状态,因此它应该作为交叉验证。但是我得到的分数大约是0.11(0.11-0.12),无论我运行代码多少次。
问题
为什么两种方法的分数-0.0470788758558和0.11如此不同?
答案 0 :(得分:0)
我找到了原因。
cv应该像这样设置:
cv = ShuffleSplit(n=len(X), n_iter=10, test_size=.3)
当cv等于整数时,它表示每次迭代中有多少次折叠而不是迭代次数。