2016-05-03 6 views
0

Ich versuche zu verstehen, wie Sie die Werte des Scorers für die GridSearchCV erhalten. Der folgende Beispielcode richtet eine kleine Pipeline für Textdaten ein.GridSearchCV Scoring und grid_scores_

Dann richtet es eine Rastersuche über verschiedene Ngrams ein.

Die Bewertung wird durch die f1 Maß getan:

#setup the pipeline 
tfidf_vec = TfidfVectorizer(analyzer='word', min_df=0.05, max_df=0.95) 
linearsvc = LinearSVC() 
clf = Pipeline([('tfidf_vec', tfidf_vec), ('linearsvc', linearsvc)]) 

# setup the grid search 
parameters = {'tfidf_vec__ngram_range': [(1, 1), (1, 2)]} 
gs_clf = GridSearchCV(clf, parameters, n_jobs=-1, scoring='f1') 
gs_clf = gs_clf.fit(docs_train, y_train) 

Jetzt kann ich die Noten drucken mit:

Druck gs_clf.grid_scores_

[mean: 0.81548, std: 0.01324, params: {'tfidf_vec__ngram_range': (1, 1)}, 
mean: 0.82143, std: 0.00538, params: {'tfidf_vec__ngram_range': (1, 2)}] 

Druck gs_clf.grid_scores_ [0] .cv_validation_scores

array([ 0.83234714, 0.8  , 0.81409002]) 

Es ist mir nicht klar, aus dem documentation:

  1. Ist gs_clf.grid_scores_ [0] .cv_validation_scores ein Array mit den Noten durch die Scoring-Parameter definiert, je Falte (in diesem Fall sind die f1 Maßnahmen pro falten)? Wenn nicht, was ist es dann?

  2. Wenn ich stattdessen eine andere metric wie scoring = ‚f1_micro‘ wählen, jedes Array in gs_clf.grid_scores_ [i] .cv_validation_scores die f1_micro Metrik für die Falten für eine bestimmte Rastersuche Parameterauswahl enthalten?

+1

Ja, Sie verstehen richtig – maxymoo

Antwort

0

schrieb ich die folgende Funktion ein grid_scores_ Objekt in ein pandas.DataFrame zu konvertieren. Hoffentlich wird dazu beitragen, die Datenrahmen Ansicht Ihre Verwirrung aufklären, da es eine intuitivere Format ist:

def grid_scores_to_df(grid_scores): 
    """ 
    Convert a sklearn.grid_search.GridSearchCV.grid_scores_ attribute to a tidy 
    pandas DataFrame where each row is a hyperparameter-fold combinatination. 
    """ 
    rows = list() 
    for grid_score in grid_scores: 
     for fold, score in enumerate(grid_score.cv_validation_scores): 
      row = grid_score.parameters.copy() 
      row['fold'] = fold 
      row['score'] = score 
      rows.append(row) 
    df = pd.DataFrame(rows) 
    return df 

Sie werden die folgenden Import dafür haben müssen, um zu arbeiten: import pandas as pd.

Verwandte Themen