使用value_counts()查找pandas中的类精度

2024-03-28 13:54:48 发布

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

熊猫数据框中有两列:label(地面真相)和pred(模型预测)。我有4个类别的标签:狗,猫,大象和蛇。我想要的是每类预测的准确性或精确性。例如,如果我有下面的dataframe:

label    pred
dog      cat
elephant elephant
dog    snake
cat     cat
snake   snake
snake   cat
dog    dog

我所做的是为每个类使用value_计数,然后手动插入比率,以获得pandas中的精度。问题在于,值_计数按原始计数编号排序,因此标签和pred的顺序可能不同

numerators = df[pred].value_counts()
   denominators = df[label].value_counts()

然后我得到输出:

 dog    0.33
  cat   1
  snake  0.5
  elephant 1 

有没有办法在熊猫身上实现自动化


Tags: 数据模型dfvalue标签类别labelcat
3条回答

您可以检查两列是否相等,然后groupby第一列和mean

print (df['label'].eq(df['pred']).groupby(df['label']).mean())
label
cat         1.000000
dog         0.333333
elephant    1.000000
snake       0.500000
dtype: float64

让我们试试pd.crosstab,在得到矩阵后,我们可以做热图来查看相关性

pd.crosstab(df.label,df.pred,normalize='index')
pred           cat       dog  elephant     snake
label                                           
cat       1.000000  0.000000       0.0  0.000000
dog       0.333333  0.333333       0.0  0.333333
elephant  0.000000  0.000000       1.0  0.000000
snake     0.500000  0.000000       0.0  0.500000

本的回答很快就解决了你的问题。我只想添加混淆矩阵:

confusion_matrix = (df.groupby('label')['pred']
                      .value_counts(normalize=True)
                      .unstack(fill_value=0)
                   )

输出:

pred           cat       dog  elephant     snake
label                                           
cat       1.000000  0.000000       0.0  0.000000
dog       0.333333  0.333333       0.0  0.333333
elephant  0.000000  0.000000       1.0  0.000000
snake     0.500000  0.000000       0.0  0.500000

相关问题 更多 >