计算TP、FP、TN、FN值

2024-04-24 13:12:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图构建一个非常简单的程序,用于计算两个字符串的TP/FP/FN/TN(预测的二级蛋白质结构与已证实的二级蛋白质结构),但它无法正确计算它们。我错过了什么

actual_str = '*ΟΟΟΟΟΟ******////////////**//////////*****////ΟΟΟΟΟΟΟΟΟ***'
predicted_str = '****--********/////////-----//////****----**-ΟΟΟΟΟΟΟ/-****'

TP = 0
FP = 0
TN = 0
FN = 0

for i in range(len(predicted_str)): 
    if predicted_str[i]==actual_str[i]=='O':
        TP += 1
        
    if predicted_str[i]!='O' and actual_str[i]=='O': 
        FP += 1
        
    if predicted_str[i]==actual_str[i]=='/' or predicted_str[i]==actual_str[i]=='*':
        TN += 1
        
    if predicted_str[i]=='O' and actual_str[i]!='O':
        FN += 1
        
    if predicted_str[i]=='-': #just ignore the '-' and move on to the next
        i+=1

print(TP, FP, TN, FN)
    

产出:0 26 0


2条回答

如前所述,您使用的字符不同,它混合了希腊字母O omicron和拉丁字母O大写字母

https://apps.timwhitlock.info/unicode/inspect?s=%CE%9F

此外,在本用例中使用zip操作符是有意义的,而不是通过索引进行比较:

for (actual, predicted) in zip(actual_str, predicted_str):
   if (..

这是一个奇怪的字符,但请尝试复制actual_strpredicted_str变量中使用的一个“O”字符,并将其粘贴到if语句中。我认为这是不匹配的,尽管它们看起来完全相同

最后一个if语句也是不必要的

相关问题 更多 >