2017-07-17 8 views
2

Je fais un XV pli sur une base de données existante, et j'ai besoin d'obtenir le score AUC. Le problème est que parfois les données de test ne contiennent que des 0 et non des 1!roc_auc_score - Une seule classe présente dans y_true

J'ai essayé d'utiliser this exemple, mais avec des nombres différents:

import numpy as np 
from sklearn.metrics import roc_auc_score 
y_true = np.array([0, 0, 0, 0]) 
y_scores = np.array([1, 0, 0, 0]) 
roc_auc_score(y_true, y_scores) 

Et je reçois cette exception:

ValueError: Only one class present in y_true. ROC AUC score is not defined in that case.

Y at-il solution de contournement qui peut le faire fonctionner dans de tels cas?

Répondre

2

Vous pouvez utiliser try-except pour éviter l'erreur:

import numpy as np 
from sklearn.metrics import roc_auc_score 
y_true = np.array([0, 0, 0, 0]) 
y_scores = np.array([1, 0, 0, 0]) 
try: 
    roc_auc_score(y_true, y_scores) 
except ValueError: 
    pass 

Maintenant, vous pouvez également définir les roc_auc_score à zéro s'il n'y a qu'une seule classe présente. Cependant, je ne ferais pas ça. Je suppose que vos données de test sont très déséquilibrées. Je suggère d'utiliser à la place un pli en K stratifié afin que vous ayez au moins les deux classes présentes.