2016-03-05 1 views
1

Je reçois différents scores ROC-AUC des méthodes skomear RandomForestClassifier et roc_curve, auc, respectivement.Différence des scores ROC-AUC dans les méthodes sklearn RandomForestClassifier vs. auc

Le code suivant m'a fait un ROC-ASC (c.-à-gs.best_score_) de 0,878:

def train_model(mod = None, params = None, features = None, 
     outcome = ...outcomes array..., metric = 'roc_auc'): 
    gs = GridSearchCV(mod, params, scoring=metric, loss_func=None, score_func=None, 
     fit_params=None, n_jobs=-1, iid=True, refit=True, cv=10, verbose=0, 
     pre_dispatch='2*n_jobs', error_score='raise') 
    gs.fit(...feature set df..., outcome) 

    print gs.best_score_ 
    print gs.best_params_ 

    return gs 

model = RandomForestClassifier(random_state=2000, n_jobs=-1) 
features_to_include = [...list of column names...] 

parameters = { 
      'n_estimators': [...list...], 'max_depth':[...list...], 
      'min_samples_split':[...list...], 'min_samples_leaf':[...list...] 
      } 

gs = train_model(mod = model, params = parameters, features = features_to_include) 

considérant que, le code suivant m'a fait un ROC-ASC de 0,97:

fpr = dict() 
tpr = dict() 
roc_auc = dict() 
fpr['micro'], tpr['micro'], _ = roc_curve(...outcomes array..., 
            gs.predict_proba(...feature set df...)[:, 1]) 
roc_auc['micro'] = auc(fpr['micro'], tpr['micro']) 

Pourquoi y a-t-il une telle différence? Ai-je fait quelque chose de mal avec mon code?

Merci! Chris

Répondre

0

Ils renvoient des valeurs différentes, pour deux raisons:

  1. puisque la méthode GridSearchCV divise vos données en 10 groupes (vous faites la validation croisée 10 fois dans votre code), utilise 9 pour la formation, et rend compte de la CUA sur le dernier groupe. Le meilleur score que vous obtenez est juste l'AUC la plus élevée rapportée comme telle (plus d'infos lisez here). Votre calcul roc_curve signale l'AUC sur l'ensemble entier.

  2. La validation croisée par défaut roc_auc est la version macro (voir here), mais votre calcul ultérieur calcule la version micro.

+0

Très bien. Donc, si je devais déclarer «officiellement» l'AUC pour ce modèle, j'utiliserais le second (0,97)? Et je suppose que la version «micro» est probablement meilleure que la «macro» dans ce cas, car il faut tenir compte du déséquilibre de l'étiquette. Cela dit, connaissez-vous une bonne explication de «micro» par rapport à «macro» (bonus si cela concerne les calculs de l'AUC)? Mon jeu de données contient un groupe de fausses fausses et de fausses prédictions qui n'apparaîtraient pas dans le Faux Positif ou le Vrai Positif. Est-ce que cela affecterait ma décision d'utiliser micro vs macro? Merci!! – Chris

+0

Pas exactement - pour déclarer une AUC raisonnable 'officiellement', vous avez besoin d'une sorte d'ensemble de test qui n'a pas été entraîné. L'utilisation de données d'entraînement pour rapporter les métriques de test/performance trompe, et sur-rapporte toujours. J'utiliserais le score INFERIEUR (le premier) comme l'AUC que vous signalez. Pour macro ou micro, le lien que j'ai posté devrait l'expliquer. – mprat