gpt4 book ai didi

r - 用于计算精度和召回率的 Tidyverse 语法

转载 作者:行者123 更新时间:2023-12-01 03:15:54 25 4
gpt4 key购买 nike

我正在尝试为我的数据框中的每个组计算 AUC、精度、召回率、准确度(我有一个数据框,其中预测了来自三个不同模型的预测数据)。

什么是 tidyverse 语法来做到这一点?我想用 yardstick Max Kuhn 打包来计算这些指标。

这是一个示例 df,这是我到目前为止所得到的:

> library(tidyverse)
> library(yardstick)
>
> sample_df <- data_frame(
+ group_type = rep(c('a', 'b', 'c'), each = 5), # repeats each element 5 times
+ true_label = as.factor(rbinom(15, 1, 0.3)), # generates 1 with 30% prob
+ pred_prob = runif(15, 0, 1) # generates 15 decimals between 0 and 1 from uniform dist
+ ) %>%
+ mutate(pred_label = as.factor(if_else(pred_prob > 0.5, 1, 0)))
>
> sample_df
# A tibble: 15 x 4
group_type true_label pred_prob pred_label
<chr> <fct> <dbl> <fct>
1 a 1 0.327 0
2 a 1 0.286 0
3 a 0 0.0662 0
4 a 0 0.993 1
5 a 0 0.835 1
6 b 0 0.975 1
7 b 0 0.436 0
8 b 0 0.585 1
9 b 0 0.478 0
10 b 1 0.541 1
11 c 1 0.247 0
12 c 0 0.608 1
13 c 0 0.215 0
14 c 0 0.937 1
15 c 0 0.819 1
>

指标:
> # metrics for the full data
> precision(sample_df, truth = true_label, estimate = pred_label)
[1] 0.5714286
> recall(sample_df, truth = true_label, estimate = pred_label)
[1] 0.3636364
> accuracy(sample_df, truth = true_label, estimate = pred_label)
[1] 0.3333333
> roc_auc(sample_df, truth = true_label, pred_prob)
[1] 0.7727273
>

现在如何为数据集中的每个组获取这些指标?
sample_df %>%
group_by(group_type) %>%
summarize(???)

最佳答案

使用 unnest 的示例:

   sample_df %>% 
group_by(group_type) %>%
do(auc = roc_auc(., true_label, pred_prob),
acc = accuracy(., true_label, pred_label),
recall = recall(., true_label, pred_label),
precision = precision(., true_label, pred_label)) %>% unnest

然而,

我实际上建议不要使用 yardstick,因为它与 dplyr 总结不太好。实际上,它只是在底层使用了 ROCR 包。我只会让你自己的函数接受两个变量。
yardstick有缺陷,因为它需要一个 data.frame作为它的第一个输入,它试图变得过于聪明。在 dplyr 框架下,这不是必需的,因为 summarizemutate因为函数已经看到了 data.frame 里面的变量没有明确的 data范围。

关于r - 用于计算精度和召回率的 Tidyverse 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48712174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com