web-dev-qa-db-fra.com

sklearn GridSearchCV avec Pipeline

Je suis nouveau dans les fonctionnalités de sklearnPipeline et GridSearchCV. J'essaie de construire un pipeline qui fait d'abord RandomizedPCA sur mes données d'entraînement, puis s'adapte à un modèle de régression de crête. Voici mon code:

pca = RandomizedPCA(1000, whiten=True)
rgn = Ridge()

pca_ridge = Pipeline([('pca', pca),
                      ('ridge', rgn)])

parameters = {'ridge__alpha': 10 ** np.linspace(-5, -2, 3)}

grid_search = GridSearchCV(pca_ridge, parameters, cv=2, n_jobs=1, scoring='mean_squared_error')
grid_search.fit(train_x, train_y[:, 1:])

Je connais la fonction RidgeCV mais je veux essayer Pipeline et GridSearch CV.

Je veux que le CV de recherche de grille signale une erreur RMSE, mais cela ne semble pas pris en charge dans sklearn, donc je me contente de MSE. Cependant, les scores qu'il rapporte sont négatifs:

In [41]: grid_search.grid_scores_
Out[41]: 
[mean: -0.02665, std: 0.00007, params: {'ridge__alpha': 1.0000000000000001e-05},
 mean: -0.02658, std: 0.00009, params: {'ridge__alpha': 0.031622776601683791},
 mean: -0.02626, std: 0.00008, params: {'ridge__alpha': 100.0}]

De toute évidence, cela n'est pas possible pour une erreur quadratique moyenne - que fais-je de mal ici?

25
mchangun

Ces scores sont des scores MSE négatifs, c'est-à-dire les nier et vous obtenez le MSE. Le fait est que GridSearchCV, par convention, essaie toujours de maximiser son score, donc les fonctions de perte comme MSE doivent être annulées.

39
Fred Foo

Si vous voulez obtenir RMSE en tant que métrique, vous pouvez écrire votre propre fonction/appelable qui prendra Y_pred et Y_org et calculera le RMSE.

ref: http://scikit-learn.org/stable/modules/generated/sklearn.metrics.make_scorer.html
0
rameshoswal

Supposons que j'ai stocké les résultats de MSE négatif et de MAE obtenus de GridSearchCV dans des listes nommées respectivement model_nmse et model_nmae.

Donc, je le multiplierais simplement par (-1), pour obtenir les scores MSE et MAE) souhaités.

model_mse = list(np.multiply(model_nmse , -1))

model_mae = list(np.multiply(model_nmae , -1))
0
Prateek sahu