我正在尝试使用 sklearn 的 roc_auc_score() 函数计算多类问题的 AUC 分数。
我有形状为 [n_samples,n_classes] 的预测矩阵和形状为 [n_samples] 的地面实况向量,分别命名为 np_pred
和 np_label
。
我想要实现的是一组 AUC 分数,我所拥有的每个类(class)都有一个分数。
为此,我想使用average
参数选项None
并将multi_class
参数设置为“ovr”
,但如果我运行
roc_auc_score(y_score=np_pred, y_true=np_label, multi_class="ovr",average=None)
我回来了
ValueError: average must be one of ('macro', 'weighted') for multiclass problems
在 multiclass 的情况下,sklearn 函数预计会出现此错误;但如果你看一下roc_auc_score
函数源代码,你会发现如果multi_class
参数设置为“ovr”
,并且平均值是可接受的平均值之一,multiClass 情况被视为 multiLabel one,内部 multiLabel 函数 accepts None
作为 average
参数。
因此,通过查看代码,我似乎应该能够在 One vs Rest
情况下以 None
平均值执行多类,但是 源代码中的if
不允许这样的组合。
我错了吗?
如果我错了,从理论的角度来看,我应该伪造一个多标签案例,以便为不同的类别提供不同的 AUC,还是应该编写自己的函数来循环不同的类别并输出 AUC?
谢谢
最佳答案
根据sklearn documentation ,multi_class 的默认参数是 'raised',在文档中提到,默认参数会抛出异常,因此您必须明确提及 ovr
或 ovo
multi_class='ovr'
。
请参阅随附的屏幕截图
关于python - sklearn roc_auc_score 与 multi_class= ="ovr"应该没有可用的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59666138/