首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >tidymodels支持校准曲线了

tidymodels支持校准曲线了

作者头像
医学和生信笔记
发布2023-02-14 17:15:27
发布2023-02-14 17:15:27
69000
代码可运行
举报
运行总次数:0
代码可运行

喜大普奔!

tidymodels终于支持校准曲线了!千呼万唤始出来,几个月前,我还号召大家多去github提issue...

tidymodels不能画校准曲线?

这不,校准曲线就来了!

安装

截止到2022.11.30日,只能安装开发版才有这个功能,cran上的版本还没有这个功能。

代码语言:javascript
代码运行次数:0
运行
复制
remotes::install_github("tidymodels/probably")

使用

yardstick的用法一脉相承,如果你还不知道yardstick以及tidymodels系列的使用规范,请参考这篇入门教程:tidymodels用于机器学习的一些使用细节

我们使用这篇推文中的数据:tidymodels不能画校准曲线?

具体过程就不再演示了,直接使用pred_rf这个对象进行演示。

代码语言:javascript
代码运行次数:0
运行
复制
suppressMessages(library(tidymodels))
suppressMessages(library(probably))

load(file = "../../000预测模型/pred_rf.rdata")

这个结果就是tidymodels中得到的标准结果,一切模型衡量指标都是通过这个结果算出来的,包括校准曲线。

结果长这样:

代码语言:javascript
代码运行次数:0
运行
复制
head(pred_rf)
## # A tibble: 6 × 4
##   play_type .pred_pass .pred_run .pred_class
##   <fct>          <dbl>     <dbl> <fct>      
## 1 pass           0.312     0.688 run        
## 2 pass           0.829     0.171 pass       
## 3 pass           0.806     0.194 pass       
## 4 pass           0.678     0.322 pass       
## 5 run            0.184     0.816 run        
## 6 run            0.544     0.456 pass

基于分箱的校准曲线

校准曲线是先对概率进行分箱,然后计算平均值得到的,如果你还不明白,请参考这篇推文:一文搞懂临床预测模型的评价!

基于分箱的原理画校准曲线,通过以下函数实现:

代码语言:javascript
代码运行次数:0
运行
复制
pred_rf %>% 
  cal_plot_breaks(play_type, .pred_pass)

plot of chunk unnamed-chunk-4

有几个参数可以调节:

代码语言:javascript
代码运行次数:0
运行
复制
pred_rf %>% 
  cal_plot_breaks(play_type, .pred_pass, 
                  num_breaks = 5 , # 选几个点
                  include_rug=F, # 是否添加地毯线
                  include_ribbon = T, # 是否添加可信区间
                  conf_level = 0.95 # 可信区间范围
                  )

plot of chunk unnamed-chunk-5

基于窗口滑动的校准曲线

但是有时候样本量太少,不方便分箱,tidymodels提供了一种窗口滑动的方式。

比如一共100个样本,第一次取第1个到第10个样本,然后计算得到一个预测值,第二次取第6个到第15个样本,计算得到一个预测值,第三次取第11个带第20个样本,以此类推,彼此之间是有重复的。

可通过cal_plot_windowed函数实现这样的校准曲线:

代码语言:javascript
代码运行次数:0
运行
复制
pred_rf %>% 
  cal_plot_windowed(play_type, .pred_pass)

plot of chunk unnamed-chunk-6

其中step_size参数控制每次增加多少:

代码语言:javascript
代码运行次数:0
运行
复制
# 每次增加2%
pred_rf %>% 
  cal_plot_windowed(play_type, .pred_pass, step_size = 0.02)

plot of chunk unnamed-chunk-7

所有这些图都是基于ggplot2的,可以无缝衔接ggplot2语法进行美化、修改。

对于分类模型的校准曲线终于有了!大家有需要的可以用起来了。

那么问题又来了,如果是做临床预测模型,可以用tidymodels吗?我的回答是:不推荐,没必要!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-12-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 医学和生信笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装
  • 使用
    • 基于分箱的校准曲线
    • 基于窗口滑动的校准曲线
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档