python - 多标签分类中的 roc_curve 有斜率

标签 python machine-learning scikit-learn keras roc

我有一个用 Keras 编写的多标签分类器,我想从中计算 AUC 并为从测试集中分类的每个元素绘制 ROC 曲线。

enter image description here

一切看起来都很好,除了一些元素有一条斜率如下的 roc 曲线:

enter image description here

我不知道在这种情况下如何解释斜率。

基本上我的工作流程如下,我有一个预先训练的模型,Keras的实例,并且我有特征X和二值化标签y y中的每个元素都是一个长度为1000的数组,因为这是一个多标签分类问题,y中的每个元素可能包含很多1,表明该元素属于多个类,因此我使用了 binary_crossentropy 的内置损失,模型预测的输出是分数概率。然后我绘制 roc 曲线,如下所示。

from sklearn.metrics import roc_curve, auc
#...
for xi, yi in (X_test, y_test):
    y_pred = model.predict([xi])[0]
    fpr, tpr, _ = roc_curve(yi, y_pred)

    plt.plot(fpr, tpr, color='darkorange', lw=0.5)

预测方法返回概率,因为我使用的是 keras 的函数式 api。

有谁知道为什么roc曲线看起来像这样吗?

最佳答案

在 scikit-learn 的邮件列表中询问,他们回答:

Slope usually means there are ties in your predictions.

这个问题就是这种情况。

关于python - 多标签分类中的 roc_curve 有斜率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41517202/

相关文章:

python - 如果存在相关对象,则阻止字段更改?

python - 使用 Flask 将 URL 加载到 iFrame

python - 在 Python Bottle 中返回不同的 mime 类型

python - Scikit-learn 多线程

python - CountVectorizer 值在分类器中单独工作,在添加其他功能时无法工作

python - SciKit-learn (python)--创建我的数据集

Python 3. 需要写入文件,检查是否存在一行,然后重新写入文件

python - 如何在 Windows 上重新训练图像

java - 从命令行使用 InputMappedClassifier

python - 我需要一些帮助来查找列表中的列表中的内容(除其他外)