0

我试图了解在使用交叉验证训练模型时应该在哪里发生 SMOTE。我知道所有的预处理步骤都应该针对交叉验证的每一折进行。那么这是否意味着以下两个设置是相同的并且理论上是正确的?

设置 1:使用配方进行预处理,在 trainControl 中进行打击

set.seed(888, sample.kind = "Rounding")
tr_ctrl <- trainControl(summaryFunction = twoClassSummary, 
                        verboseIter = TRUE, 
                        savePredictions =  TRUE, 
                        sampling = "smote", 
                        method = "repeatedCV", 
                        number= 2, 
                        repeats = 0,
                        classProbs = TRUE, 
                        allowParallel = TRUE, 
                        )
cw_smote_recipe <- recipe(husb_beat ~ ., data = nfhs_train) %>%
  step_nzv(all_predictors()) %>%               
  step_naomit(all_predictors()) %>%
  step_dummy(all_nominal(), -husb_beat) %>%
  step_interact(~starts_with("State"):starts_with("wave"))%>%
  step_interact(~starts_with("husb_drink"):starts_with("husb_legal"))
  

cw_logit1 <- train(cw_smote_recipe, data = nfhs_train,
                            method = "glm",
                            family = 'binomial',
                            metric = "ROC",
                            trControl = tr_ctrl)

设置 2:使用食谱进行预处理和打击:这是否会在每个 CV 折叠中进行?

set.seed(888, sample.kind = "Rounding")
tr_ctrl <- trainControl(summaryFunction = twoClassSummary, 
                        verboseIter = TRUE, 
                        savePredictions =  TRUE, 
                        #sampling = "smote", ## NO LONGER WITHIN TRAINCONTROL
                        method = "repeatedCV", 
                        number= 2, 
                        repeats = 0,
                        classProbs = TRUE, 
                        allowParallel = TRUE, 
                        )
smote_recipe <- recipe(husb_beat ~ ., data = nfhs_train) %>%
  step_nzv(all_predictors()) %>%               
  step_naomit(all_predictors()) %>%
  step_dummy(all_nominal(), -husb_beat) %>%
  step_interact(~starts_with("State"):starts_with("wave"))%>%
  step_interact(~starts_with("husb_drink"):starts_with("husb_legal"))%>%
  step_smote(husb_beat) ## NEW STEP TO RECIPE

  

cw_logit2 <- train(smote_recipe, data = nfhs_train,
                            method = "glm",
                            family = 'binomial',
                            metric = "ROC",
                            trControl = tr_ctrl)

蒂亚!

4

0 回答 0