我试图建立一个非常简单的程序来计算两个字符串的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 0 26 0
发布于 2021-05-05 14:08:45
这是一个奇怪的问题,但是尝试复制actual_str
或predicted_str
变量中使用的'O‘字符,并将其粘贴到if-语句中。我认为这是一种错配,尽管它们看起来是一样的。
最后一个if-语句也是不必要的。
发布于 2021-05-05 14:26:49
如前所述,您使用的字符是不同的,它混合了希腊字母O omicron和拉丁语o大写。
https://apps.timwhitlock.info/unicode/inspect?s=%CE%9F
此外,与其按索引进行比较,不如在这个usecase中使用zip运算符是有意义的:
for (actual, predicted) in zip(actual_str, predicted_str):
if (..
https://stackoverflow.com/questions/67409178
复制相似问题