如何从其标签和概率中找到 TPR 和 TPR 来评估我的模型?

how to find TPR and TPR from its labels and probablites to evaluate my model?

我需要有关我在这个问题 中提出的数据框的帮助。现在我想评估模型以找到总数;比如找到 True Positive RateFalse Negative Rate。预测概率的正确程度并与基本事实进行比较。我现在在这个数据框中准备了一个如下所示的数据框,我希望如果基本事实意味着原始标签位于一列中,对于单个标签或多个标签来说可能更大。总之找到这样的

我分享上传文件的link: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 的 link 中。

如果在其余 14 列中具有最高概率的标签 col 将是 True Positive Value,我想得到真阳性。我无法理解如何得到这个,因为我正在另一个 dataset/test 数据上验证模型。 一些图片有多个标签,所以我也想要那个,例如上传的文件有这个例子。

来自你的新 DataFrame :

>>> 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 PositiveTrue 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

最后,我们可以让每个 classTPR 执行 :

>>> df.groupby('predicted_class')['evaluation'].mean()
predicted_class
Atelectasis    0.000000
Emphysema      0.285714
Mass           0.000000
Name: evaluation, dtype: float64