2017-07-17 2626 views
2

我在现有数据框上做了k-fold XV,我需要获得AUC分数。 问题是 - 有时测试数据只包含0,而不是1!roc_auc_score - y_true中仅存在一个类

我试着用this例子,但有不同的数字:

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) 

我得到这个异常:

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

有任何解决方法,可以使在这种情况下工作吗?

回答

2

你可以使用try - 除了防止错误:

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 

现在,您还可以设置roc_auc_score是零,如果只有一个阶级存在。但是,我不会这样做。我猜测你的测试数据是非常不平衡的。我建议使用分层的K-fold,以便至少有两个类都存在。