簡體   English   中英

如何從 Python 中的二進制值對計算 TP/TN/FP/FN?

[英]How to calculate TP/TN/FP/FN from binary value pairs in Python?

我想編寫一個 Python 函數,它在二進制值輸入對(真值,預測)上根據輸入返回真陽性/真陰性/假陽性/假陰性值。 到目前為止,我已經達到了所需的輸出:

def func(truth, prediction):
    
    if prediction == 1:
        
        if truth == 1:
            return "TP"
        else:
            return "FP"

    elif truth == 1:
        return "FN"

    else:
        return "TN"

然而,這似乎是一個笨拙的解決方案,有沒有更短、更優雅的方法?

(輸入對應該是二進制整數 0/1)

Johnny Mopp的評論非常酷(雖然我認為順序應該是['TN', 'FN', 'FP', 'TP'] ,但如果我在代碼中遇到它,我必須三思而后行。 (一方面我可以數出我在生產代碼中看到移位操作的次數。)

在 Python 3.10 中有一種處理此類事情的新方法: 結構模式匹配 現在,這是我第一次嘗試使用這個新功能,但它看起來是這樣的:

def get_result(true, pred):
    """Decide if TP, FP, TN or FN"""
    match [true, pred]:
        case [1, 1]: return 'TP'
        case [1, 0]: return 'FN'
        case [0, 0]: return 'TN'
        case [0, 1]: return 'FP'

似乎工作:

>>> y = [1, 0, 1, 0]  # TP, FP, FN, TN
>>> ŷ = [1, 1, 0, 0]

>>> for yi, ŷi in zip(y, ŷ):
>>>     print(get_result(yi, ŷi))
TP
FP
FN
TN

如果您需要使用 Python 3.9 或更低版本,那么您可以通過以下方式壓縮您的方法:

def get_result(true, pred):
    """Decide if TP, FP, TN or FN"""
    if pred:
        return 'TP' if true else 'FP'
    return 'FN' if true else 'TN'

暫無
暫無

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

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