如何使用插入符号函数来实现与此 for 循环相同的结果?分类随机森林插入符号

Posted

技术标签:

【中文标题】如何使用插入符号函数来实现与此 for 循环相同的结果?分类随机森林插入符号【英文标题】:How to use caret functions to achieve the same results as this for loop? Classification Random Forest caret 【发布时间】:2021-11-19 23:21:00 【问题描述】:

我想对我的数据运行 monte carlo cv 100 次,我的数据是 2 类分类 我想使用 caret 包来实现同样的目的,主要是我对如何平均准确性的结果感到困惑,例如使用 caret?

# Initialize data for Binary classification
dataset$ID <- factor(dataset$ID)

# Initialize number of iterations
num_iter=100 

# Vectors to store results
acc_vec<-c()

# Function with for loop

    rf <- function(dataset)
    
      for (i in 1:num_iter)
      
        trainIndex <-createDataPartition(dataset$ID, p=0.8,list=FALSE)
        dataset_train <-dataset[trainIndex, ]
        dataset_test <-dataset[-trainIndex, ]
        rf <- randomForest(ID~., data=dataset_train, importance=TRUE) 
        x_test <- dataset_test[, -1]
        y_test <- dataset_test$ID

        predictions <- predict(rf, x_test)

        acc_vec <- append(acc_vec, accuracy(actual= y_test, predicted= predictions))

      

      print(mean(acc_vec))
    

【问题讨论】:

【参考方案1】:

caret 的同一作者提供了一个全新的建模环境,称为 tidymodels,它有助于轻松建模。

这是一个典型的例子,带有 Monte Carlo CV。

library(tidymodels)

 # load some fake data and create train and test
data(cells)
set.seed(123)
cell_split <- initial_split(cells %>% select(-case),  strata = class)

train <- training(cell_split)
test  <- testing(cell_split)

现在您必须设置工作流程,添加交叉验证(可能您必须安装 ranger - 在这种情况下是包):

# first setup your model
rf_spec <- 
  rand_forest(trees = 100) %>% 
  set_engine("ranger") %>% 
  set_mode("classification")

请记住,您还可以创建超参数网格以进行调整。

现在您创建验证策略:

set.seed(123)
# I've put 10, you can change parameters
cross_val_mc <- mc_cv(train, prop = .5, times = 10)

现在你定义你的工作流程:

set.seed(123)
rf_wf <- 
  workflow() %>%
  add_model(rf_spec) %>%
  add_formula(class ~ .)

并适合您的重采样:

set.seed(123)
rf_fit_rs <- 
  rf_wf %>% 
  fit_resamples(cross_val_mc)

collect_metrics(rf_fit_rs)

# A tibble: 2 x 6
  .metric  .estimator  mean     n std_err .config             
  <chr>    <chr>      <dbl> <int>   <dbl> <chr>               
1 accuracy binary     0.824    10 0.00308 Preprocessor1_Model1
2 roc_auc  binary     0.896    10 0.00352 Preprocessor1_Model1

【讨论】:

@LUCA 有帮助吗?

以上是关于如何使用插入符号函数来实现与此 for 循环相同的结果?分类随机森林插入符号的主要内容,如果未能解决你的问题,请参考以下文章

如何在 pyspark 的 For 循环中插入自定义函数?

如何用R语言for循环形成112358

如何使用 for 循环选择字段值并将它们插入到另一个表中

如何在SQLserver中利用循环语句插入大量的数据

我应该如何摆脱循环? [关闭]

for循环和R中的函数