Tidymodels 和不平衡数据集 - 重采样时进行子采样

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

在处理不平衡数据集时,我的理解是可能的解决方案是对训练集进行二次采样或过采样。然而,测试集应该反映原始数据集的不平衡性。

问题是使用交叉验证时会发生什么。

假设我们使用 5 倍交叉验证并且使用过采样。我的理解是,例如在第一次迭代中,应该进行过采样来平衡训练集(折叠 1-4),而测试集(折叠 5)应该保持不平衡。

tidymodels 是否会自行解决这个问题?尽管我阅读了以下资源,但我仍然不清楚:

https://community.rstudio.com/t/concerns-about-how-data-leakage-is-management-using-tidymodels-thermis-package/76791

https://www.tidymodels.org/learn/models/sub-sampling/

取自第二个链接的示例

imbal_data <- 
  readr::read_csv("https://tidymodels.org/learn/models/sub-sampling/imbal_data.csv") %>% 
  mutate(Class = factor(Class))
dim(imbal_data)
table(imbal_data$Class)

library(tidymodels)
library(themis)
imbal_rec <- 
  recipe(Class ~ ., data = imbal_data) %>%
  step_rose(Class)

library(discrim)
qda_mod <- 
  discrim_regularized(frac_common_cov = 0, frac_identity = 0) %>% 
  set_engine("klaR")

qda_rose_wflw <- 
  workflow() %>% 
  add_model(qda_mod) %>% 
  add_recipe(imbal_rec)
qda_rose_wflw

set.seed(5732)
cv_folds <- vfold_cv(imbal_data, strata = "Class", repeats = 5)

cls_metrics <- metric_set(roc_auc, j_index)

set.seed(2180)
qda_rose_res <- fit_resamples(
  qda_rose_wflw, 
  resamples = cv_folds, 
  metrics = cls_metrics
)

collect_metrics(qda_rose_res)

r resampling tidymodels imbalanced-data
1个回答
0
投票

tidymodels 是否会自行解决这个问题?

确实如此。 Themis 中的子采样工具设置为跳过正在预测的数据的计算。

假设事件率为 10%,n = 1000,并使用下采样。用于构建模型的数据将具有每类 100 个样本的相同类频率 (n = 200),而预测的数据将具有该折叠中的完整 100 个样本(未受影响)。

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