1

J'ai un jeu de données déséquilibré contenant un problème de classification binaire. plis.Comment calculer la précision, le rappel et le score f1 d'un jeu de données déséquilibré pour la validation croisée du pli K avec 10 plis en python

kfold = model_selection.KFold(n_splits=10, random_state=42) 
model=RandomForestClassifier(n_estimators=50) 

J'ai obtenu les résultats des 10 plis

results = model_selection.cross_val_score(model,features,labels, cv=kfold) 
print results 
[ 0.60666667 0.60333333 0.52333333 0.73  0.75333333 0.72  0.7 
    0.73  0.83666667 0.88666667] 

J'ai calculé la précision en prenant moyenne et l'écart-type des résultats

print("Accuracy: %.3f%% (%.3f%%)") % (results.mean()*100.0, results.std()*100.0) 
Accuracy: 70.900% (10.345%) 

J'ai calculé mes prédictions comme suit

predictions = cross_val_predict(model, features,labels ,cv=10) 

Puisqu'il s'agit d'un jeu de données déséquilibré, je voudrais calculer la précision, le rappel et le score f1 de chaque pli et faire la moyenne des résultats. Comment calculer les valeurs en python?

Répondre

2

Lorsque vous utilisez la méthode cross_val_score, vous pouvez spécifier, que vous scorings pouvez calculer à chaque fois:

from sklearn.metrics import make_scorer, accuracy_score, precision_score, recall_score, f1_score 

scoring = {'accuracy' : make_scorer(accuracy_score), 
      'precision' : make_scorer(precision_score), 
      'recall' : make_scorer(recall_score), 
      'f1_score' : make_scorer(f1_score)} 

kfold = model_selection.KFold(n_splits=10, random_state=42) 
model=RandomForestClassifier(n_estimators=50) 

results = model_selection.cross_val_score(estimator=model, 
              X=features, 
              y=labels, 
              cv=kfold, 
              scoring=scoring) 

Après validation croisée, vous obtiendrez results dictionnaire avec les touches: « précision », « précision », 'recall', 'f1_score', qui stocke les valeurs des métriques sur chaque pli pour certaines mesures. Pour chaque mesure, vous pouvez calculer la valeur moyenne et la valeur std en utilisant np.mean(results[value]) et np.std(results[value]), où valeur - un de votre nom d'indicateur spécifié.

+0

Comment calculer l'erreur d'entraînement et de test pour chaque pli? – Jayashree

+0

cross_val_score calcule les valeurs de métriques uniquement sur les données de validation. Mais vous pouvez créer deux itérateurs personnalisés. Le premier itérateur cédera à vous des indices de position d'objets de formation et au lieu de valider des index de position donne les mêmes indices de position d'objets de train de vos caractéristiques DataFrame. Le deuxième itérateur vous donnera des indices de position d'objets identiques à ceux du premier itérateur, mais à la place des indices de position valent les indices de position de vos objets DataFrame. –

+0

Après cross_val_score avec le premier cv personnalisé, vous obtenez des valeurs métriques sur l'ensemble de train et après cross_val_score avec un second cv personnalisé, vous obtenez des valeurs de métriques sur l'ensemble de validation. –