簡體   English   中英

根據每個輸入元素返回 tp, tn, fn, fp

[英]Return tp, tn, fn, fp based on each input element

我有一個 csv 文件,其中包含與 ID 關聯的真實和預測標簽(4 個類)。 csv 文件如下所示:

task_id,labels_true,labels_pred
76017-126511-18,2,2
76017-126512-18,0,3
76017-126513-18,2,2
76018-126511-18,2,2
76018-126512-18,2,2
76018-126513-18,2,1
76019-126511-18,2,2
76019-126512-18,1,0

我正在使用來自sklearn.metrics的混淆矩陣

y_true = df["labels_true"]
y_pred = df["labels_pred"]

cnf_matrix = confusion_matrix(y_true, y_pred, labels=[0,1,2,3])

它返回一個數組,如下所示:

[[ 554    1   28    0]
[  15  1375   43    0]
[  42   476 2263    0]
[   0    0    0    0]]

我的目標是返回一個列表,每個元素 ID 與相應的 tp、tn、fp、fn 值相關聯,如下所示:

task_id,labels_true,labels_pred, cm
76017-126511-18,2,2, tp 
76017-126513-18,2,2, tp
76018-126511-18,2,2, tp

這是一個多類混淆矩陣。 真/假陽性用於二元分類問題。 您可以做的是將您的標簽編碼為二進制值(例如,將類 1、2、3 編碼為 1)並重新計算混淆矩陣。

TL; DR:對於多級的情況下,這是不可能的。


如前所述,真陽性 (TP)、真陰性 (TN)、假陽性 (FP) 和假陰性 (FN) 的概念來自二元分類設置; 他們的確可以多類分類中使用,如圖所示這里,但在這種情況下,概念不是二進制的情況的直接擴展,讓你在這里問什么實際上是不可能的。

在多類分類中,所有這些概念都是按類定義和計算的。 這使得將樣本唯一標識為屬於這些類別(TP、FP、TN、FN)中的一種且僅一種的努力變得不可能。

讓我們通過一些示例來演示這一點,使用您的案例(4 個類[0, 1, 2, 3] )。

首先取一個錯誤分類的樣本,例如:

True label:      0
Predicted label: 3
  • 0類的角度(POV)來看,這是一個假陰性(FN):預測不是0 ,因為它應該是
  • 從第1類的 POV 來看,這是一個 True Negative:它不是1 ,並且它已被正確分類為 not 1
  • 從第2類的 POV 來看,這又是一個真陰性 (TN):它不是2 ,並且它已被正確分類為非2
  • 從第3類的 POV 來看,這是一個誤報(FP):它被錯誤地歸類為3而不是這樣

類似的情況是正確分類的情況,例如

True label:      2
Predicted label: 2
  • 0類的 POV 來看,這是一個真陰性 (TN):它不是0 ,並且它已被正確分類為非0
  • 從第1類的 POV 來看,這是一個真陰性 (TN):它不是1 ,並且它已被正確地歸類為 not 1
  • 從第2類的 POV 來看,這是真陽性 (TP)
  • 從第3類的 POV 來看,這是一個真負 (TN):它不是3 ,並且它已被正確分類為不是3

鑒於此說明,希望您能清楚地知道,在多類情況下,您所要求的實際上是不可能的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM