2016-09-10 4 views
1

J'ai utilisé GridSearchCV pour trouver le meilleur alpha pour le modèle lasso.Pourquoi le score de retour GridSearchCV est-il si différent du score renvoyé par le modèle en cours d'exécution directement?

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 

J'obtenu le meilleur paramètre comme 0,0014873521072935117, avec un score négatif -0,0470788758558 r2. Puis j'ai essayé cet alpha directement sur le modèle. J'ai ensuite essayé cet alpha sur le modèle. J'ai couru le code suivant dans une boucle.

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) 

Notez que je n'ai pas défini l'état aléatoire, donc cela devrait fonctionner comme une validation croisée. Mais le score que j'ai obtenu ici est d'environ 0.11 (0.11-0.12) peu importe combien de fois j'ai couru le code.


Question

Pourquoi les scores -0.0470788758558 et 0,11 si différents pour les deux approches?

Répondre

0

J'ai trouvé la raison.

cv doit être défini comme ceci:

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

quand cv est égal à un nombre entier, cela signifie combien de plis il y a dans chaque itération pas le nombre d'itérations.