sklearn分类报告



我正在多标签任务上训练一个具有tensorflow的electra模型。每个标签的ROC表现

AUROC per tag
morality_binary: 0.8840802907943726
emotion_binary: 0.8690611124038696
positive_binary: 0.9115268588066101
negative_binary: 0.9200447201728821
care_binary: 0.9266915321350098
fairness_binary: 0.8638730645179749
authority_binary: 0.8471786379814148
sanctity_binary: 0.9040042757987976
harm_binary: 0.9046630859375
injustice_binary: 0.8968375325202942
betrayal_binary: 0.846387505531311
subversion_binary: 0.7741811871528625
degradation_binary: 0.9601025581359863

但是当我运行sklearn分类报告时:

THRESHOLD = 0.5
y_pred = predictions.numpy()
y_true = labels.numpy()
upper, lower = 1, 0
y_pred = np.where(y_pred > THRESHOLD, upper, lower)
print(classification_report(
y_true, 
y_pred, 
target_names=LABEL_COLUMNS, 
zero_division=0
))

…其中5个标签的f值为0:

precision    recall  f1-score   support
morality_binary       0.72      0.73      0.73       347
emotion_binary       0.66      0.73      0.69       303
positive_binary       0.71      0.76      0.73       242
negative_binary       0.70      0.62      0.65       141
care_binary       0.67      0.60      0.63       141
fairness_binary       0.55      0.53      0.54       166
authority_binary       0.00      0.00      0.00        49
sanctity_binary       0.00      0.00      0.00        23
harm_binary       0.48      0.32      0.39        50
injustice_binary       0.62      0.56      0.59        97
betrayal_binary       0.00      0.00      0.00        30
subversion_binary       0.00      0.00      0.00         8
degradation_binary       0.00      0.00      0.00        10
谁能给我解释一下这是怎么可能的?我能理解低f分,但0分?

我假设0是负数,1是正数

AUROC计算ROC曲线下的面积,作为分类器执行情况的度量(0.5分是随机的,掷硬币模型)。为了绘制ROC曲线,需要在不同的阈值处计算两个值,以区分正例和负例。

  • y轴:真阳性率(TPR) -模型预测的阳性样本中有多少为阴性。
  • x轴:假阳性率(False positive rate, FPR) -模型预测的阴性样本中有多少为阳性。

TPR又称召回。我们使用以下公式计算:

TPR =真阳性/(真阳性+假阴性)= True positive/All positive

所以TPR为0的唯一原因是TP也为0。这意味着当我们使用以下公式计算精度时,精度也将为0:

Precision =真阳性/(真阳性+假阳性)

当且仅当TP等于0时,结果也为0。

现在给定ROC曲线(ROC曲线如图所示),如果FPR为0,曲线下的面积也等于0。这是因为您在代码中选择了一个阈值(0.5)来预测0或1。这不是ROC曲线和AUROC测量的表示。

我建议你看一下ROC曲线,并尝试不同的值作为你的分类阈值。得到的AUROC值表明你的模型通常比随机模型表现得更好,所以你应该找到一个好的阈值。


相关内容

  • 没有找到相关文章

最新更新