如何使用插入符号函数来实现与此 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 循环相同的结果?分类随机森林插入符号的主要内容,如果未能解决你的问题,请参考以下文章