微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 tidymodels 的 AUC ROC 曲线 1 的所有值

如何解决使用 tidymodels 的 AUC ROC 曲线 1 的所有值

尝试使用 tidymodels 制作具有二元结果的 LASSO 模型,我基本上从 tidymodels 网页(https://www.tidymodels.org/start/case-study/)(酒店住宿数据集)复​​制了案例研究并将其应用于我自己的数据,但对于某些原因是我的 ROC 曲线下面积上的所有值都显示为 1(如下图所示)。我唯一改变的是配方(尝试适应我的数据)

False

所以我不知道是我的配方不正确还是我的数据不适合任何原因。如前所述,我有一个二元结果和 68 个预测变量(59 个因子和 9 个数字),有些确实缺少数据,但认为 step_medianimpute 会处理这个问题。非常感谢任何人可以提供的任何帮助

My AUC ROC Curve

解决方法

没有看到数据就很难确定,但您的结果表明了一些事情。

首先,AUC ROC 为 1。二元分类模型的 AOC ROC 为 1 表明该模型能够完美地分离两个类。这可能是过度拟合的情况,也可能是您只有线性可分的类。

其次,不同惩罚值的常量度量值。对于LASSO模型,随着惩罚的增加,越来越多的变量会收缩为零。在您的情况下,对于所有惩罚值(如果您关注该帖子,它将是 10^(-4)10^(-1)),您会看到相同的表现。这意味着即使您使用 10^(-1) 的惩罚,您仍然没有减少足够的预测变量来损害/改变性能。下面的reprex

set.seed(1234)
library(tidymodels)
response <- rep(c(0,10),length.out = 1000)

data <- bind_cols(
  response = factor(response),map_dfc(seq_len(50),~ rnorm(1000,response)) 
)

data_split <- initial_split(data)

data_train <- training(data_split)
data_test <- testing(data_split)

lasso_spec <- logistic_reg(mixture = 1,penalty = tune()) %>%
  set_engine("glmnet")

lasso_wf <- workflow() %>%
  add_model(lasso_spec) %>%
  add_formula(response ~ .)

data_folds <- vfold_cv(data_train)

param_grid <- tibble(penalty = 10^seq(-4,-1,length.out = 30))

tune_res <- tune_grid(
  lasso_wf,resamples = data_folds,grid = param_grid
)

autoplot(tune_res)

您可以做的是扩大处罚范围,直到您的表现发生变化。下面我们看到,一旦惩罚足够高,最后一个重要的预测变量就会缩小为零,我们就会失去性能。

param_grid <- tibble(penalty = 10^seq(-1,grid = param_grid
)

autoplot(tune_res)

为了验证,我们使用一种良好的性能惩罚来拟合模型,我们得到了完美的预测。

lasso_final <- finalize_workflow(lasso_wf,select_best(tune_res))

lasso_final_fit <- fit(lasso_final,data = data_train)

augment(lasso_final_fit,new_data = data_train) %>%
  conf_mat(truth = response,estimate = .pred_class)
#>           Truth
#> Prediction   0  10
#>         0  375   0
#>         10   0 375

reprex package (v2.0.0) 于 2021 年 5 月 8 日创建

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。