python - sklearn roc_auc_score 与 multi_class= ="ovr"应该没有可用的平均值

标签 python machine-learning scikit-learn auc

我正在尝试使用 sklearn 的 roc_auc_score() 函数计算多类问题的 AUC 分数。

我有形状为 [n_samples,n_classes] 的预测矩阵和形状为 [n_samples] 的地面实况向量,分别命名为 np_prednp_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',在文档中提到,默认参数会抛出异常,因此您必须明确提及 ovrovo multi_class='ovr'

请参阅随附的屏幕截图

Mention Explicitly of ovr or ovo, rather than using default value

关于python - sklearn roc_auc_score 与 multi_class= ="ovr"应该没有可用的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59666138/

相关文章:

python scikit学习逻辑回归错误

python - 在 python 中使用 scikit-learn 线性回归模型时出错

python - numpy.ndarray 中值的计数

image-processing - 分类和数据挖掘。不同之处?

Python scikits 学习 - 分离超平面方程

machine-learning - LSTM 中的序列长度是多少?

python - 将 Pandas 系列转换为可迭代对象的可迭代对象

python - 不同的方法在 Django 中无法正常工作

python - 对角化+可训练的自定义 Tensorflow 层

python - Open CV导入不起作用