2016-06-09 3 views
1

Je faisais un projet où j'avais besoin de calculer le meilleur estimateur retourné par gridsearch.Gridsearch learning pour svm

parameters = {'gamma':[0.1, 0.5, 1, 10, 100], 'C':[1, 5, 10, 100, 1000]} 

# TODO: Initialize the classifier 
svr = svm.SVC() 

# TODO: Make an f1 scoring function using 'make_scorer' 
f1_scorer = make_scorer(score_func) 

# TODO: Perform grid search on the classifier using the f1_scorer as the scoring method 
grid_obj = grid_search.GridSearchCV(svr, parameters, scoring=f1_scorer) 

# TODO: Fit the grid search object to the training data and find the optimal parameters 
grid_obj = grid_obj.fit(X_train, y_train) 
pred = grid_obj.predict(X_test) 
def score_func(): 
    f1_score(y_test, pred, pos_label='yes') 

# Get the estimator 
clf = grid_obj.best_estimator_ 

Je ne sais pas comment faire le func f1_scorer depuis que je fais la prédiction après avoir créé l'objet gridsearch. Je ne peux pas déclarer f1_scorer après avoir créé l'obj, car gridsearch l'utilise comme méthode de notation. S'il vous plaît aidez-moi comment créer cette fonction de notation pour gridsearch.

Répondre

0
clf = svm.SVC() 

# TODO: Make an f1 scoring function using 'make_scorer' 
f1_scorer = make_scorer(f1_score,pos_label='yes') 

# TODO: Perform grid search on the classifier using the f1_scorer as the scoring method 
grid_obj = GridSearchCV(clf,parameters,scoring=f1_scorer) 

# TODO: Fit the grid search object to the training data and find the optimal parameters 
grid_obj = grid_obj.fit(X_train, y_train) 

# Get the estimator 
clf = grid_obj.best_estimator_ 
0

La fonction de correction que vous transmettez à make_scorer doit prendre les paramètres y_true et y_pred. Avec cette information, vous avez tout ce dont vous avez besoin pour calculer le score. Alors GridSearchCV s'adaptera et appellera la fonction de score pour vous en interne pour chaque ensemble de paramètres possible, vous n'avez pas besoin de calculer y_pred au préalable.

Il devrait ressembler à ceci:

def score_func(y_true, y_pred): 
    """Calculate f1 score given the predicted and expected labels""" 
    return f1_score(y_true, y_pred, pos_label='yes') 

f1_scorer = make_scorer(score_func) 
GridSearchCV(svr, parameters, scoring=f1_scorer) 
+0

merci! cela a fonctionné de manière percutante. si je peux demander, comment gridsearch retourne-t-il les prévisions par lui-même? a-t-il quelque chose à voir avec la fonction make_scorer? –

+0

de la même manière que vous l'avez fait, en utilisant la méthode '.predict()' de l'estimateur. Il divise les données en interne dans des ensembles de validation et de test. Puis s'ajuste à l'ensemble d'apprentissage (qui est un sous-ensemble de 'X_train, y_train') et prédit et compare avec son ensemble de test interne (qui est aussi un sous-ensemble de' X_train, y_train'). Donc, il n'utilise jamais votre 'X_test'. C'est pour vous d'évaluer votre modèle final sans parti pris – elyase