我需要帮助关于我在这个问题中问的数据框架Link。现在我要计算这个模型,求出总数;比如找到True Positive Rate
和False Negative Rate
。这就是预测概率和实际情况的正确程度。我已经准备了一个像下面这样的数据框架,在这个数据框架中,我想要的是,如果基本事实意味着原始标签,它在一个列中,对于单个或多个标签,可能更大。简而言之
我分享文件上传的链接:https://drive.google.com/file/d/1AoDI7kJyFDyAD2Gurz8SOQUGOVckwE57/view?usp=sharing
如果不明白,我在下面解释:
img_name label 14 disease col- containing probab- of each class
0001 [[[0.0, 0.0, 1024.0, 1024.0]], ['Emphysema','Hernia']] 0.4,0.6,0.9,0.8, 0.8
详情见示例csv
的链接。
如果标签col-在其余14列中具有最高概率将是True Positive Value
,则我想获得真正。如何得到这个我无法理解,因为我正在验证另一个数据集/测试数据上的模型。有些图片有多标签,所以我也想要,例如上传的文件有这个例子。
From your newDataFrame
:
>>> import pandas as pd
>>> df
file set label bbx Atelectasis Cardiomegaly Consolidation Edema Effusion Emphysema Fibrosis Hernia Infiltration Mass Nodule Pleural_Thickening Pneumonia Pneumothorax
0 00000003_000.png Test [[[0.0, 0.0, 1024.0, 1024.0]], ['Hernia']] False 0.145712 0.028958 0.205006 0.055228 0.115680 0.376638 0.349124 0.357694 0.122496 0.202218 0.075018 0.118994 0.195345 0.215577
1 00000003_001.png Test [[[0.0, 0.0, 1024.0, 1024.0]], ['Hernia']] False 0.132639 0.046136 0.169713 0.092743 0.285383 0.614464 0.311035 0.344040 0.117032 0.447748 0.152327 0.094364 0.174125 0.316022
2 00000003_002.png Test [[[0.0, 0.0, 1024.0, 1024.0]], ['Hernia']] False 0.233026 0.042541 0.227911 0.047988 0.116835 0.595102 0.330304 0.367272 0.117985 0.298624 0.109354 0.133473 0.185444 0.379627
3 00000003_003.png Test [[[0.0, 0.0, 1024.0, 1024.0], [0.0, 0.0, 1024.... False 0.298693 0.022646 0.237977 0.035348 0.143645 0.487804 0.384509 0.379062 0.083205 0.625744 0.102377 0.207353 0.184517 0.354402
4 00000003_004.png Test [[[0.0, 0.0, 1024.0, 1024.0]], ['Hernia']] False 0.522152 0.052897 0.237475 0.082139 0.200029 0.473421 0.377468 0.336104 0.106339 0.488078 0.088047 0.146686 0.200919 0.313684
我们可以使用idxmax
获取每一行的最大值的列名,如下所示:
>>> df["predicted_class"] = df.drop(['file', 'set', 'label', 'bbx'], axis=1).idxmax(axis=1)
>>> df["predicted_class"].head()
0 Emphysema
1 Emphysema
2 Emphysema
3 Mass
4 Atelectasis
Name: predicted_class, dtype: object
然后我们使用lambda
检查该列名是否出现在labels
列中,以获得True Positive
或True Negative
的布尔值:
>>> df['evaluation'] = df.apply(lambda x: x["predicted_class"] in x["label"], axis=1)
>>> df['evaluation'].head()
0 False
1 False
2 False
3 False
4 False
Name: evaluation, dtype: bool
最后,我们可以让TPR
对应每个class
:
>>> df.groupby('predicted_class')['evaluation'].mean()
predicted_class
Atelectasis 0.000000
Emphysema 0.285714
Mass 0.000000
Name: evaluation, dtype: float64