R 二进制指标(按百分位)

问题描述 投票:0回答:1

是否有 tidyverse/tidymodels (或基本 R)方法通过调整特定正百分位数的阈值来计算二元分类指标?

tidymodels 指南建议准备一个预测概率数据框,该数据框会产生正概率 (

.pred_1
),并且还包括实际的类别
Day90
:

> rf_fit %>% predict(test, type="prob") %>% bind_cols(test %>% select(Day90))
# A tibble: 31,586 × 3
   .pred_1 .pred_0 Day90
     <dbl>   <dbl> <fct>
 1  0.296    0.704 0    
 2  0.296    0.704 0    
 3  0.136    0.864 0    
 4  0.0690   0.931 0    
 5  0.0882   0.912 0    
 6  0.0948   0.905 0    
 7  0.157    0.843 0    
 8  0.0572   0.943 0    
 9  0.108    0.892 0    
10  0.0466   0.953 0    
# ℹ 31,576 more rows
# ℹ Use `print(n = ...)` to see more rows

type="quantile"
很有希望,但不适用于欧洲防风草的
rand_forest()

理想情况下,有一个函数采用正百分位(例如 20%),并找到概率阈值

k
,该阈值导致大约 20% 的预测为正。我可以对概率进行排序并对
k
执行线性或二分搜索,但我确信这已经以更稳健的方式实现了。
dplyr::percent_rank()
似乎也很有希望。

r tidyverse tidymodels r-parsnip
1个回答
0
投票

这个问题很不清楚,但我猜你的意思是增益曲线:

library(tidymodels)
library(probably)
#> 
#> Attaching package: 'probably'
#> The following objects are masked from 'package:base':
#> 
#>     as.factor, as.ordered

tidymodels_prefer()
options(pillar.advice = FALSE, pillar.min_title_chars = Inf)

head(segment_logistic)
#> # A tibble: 6 × 3
#>   .pred_poor .pred_good Class
#>        <dbl>      <dbl> <fct>
#> 1      0.986    0.0142  poor 
#> 2      0.897    0.103   poor 
#> 3      0.118    0.882   good 
#> 4      0.102    0.898   good 
#> 5      0.991    0.00914 poor 
#> 6      0.633    0.367   good

segment_logistic %>% 
  gain_curve(Class, .pred_good) %>%
  autoplot()

创建于 2023-12-18,使用 reprex v2.0.2

© www.soinside.com 2019 - 2024. All rights reserved.