python – roc_auc_score – y_true中只有一个类

我在现有的数据帧上做了k-fold XV,我需要获得AUC分数.
问题是 – 有时测试数据只包含0,而不是1!

我尝试使用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.

是否有任何解决方法可以使其在这种情况下工作?

解决方法:

您可以使用try-except来防止错误:

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折叠,这样你至少可以同时使用两个类.

上一篇:$2020.11.21$ 模拟赛


下一篇:[论文阅读笔记] Structural Deep Network Embedding