を使用して 5 分割交差検証を使用してランダム フォレストに適合させるために、現在、次のレシピとワークフローを適用していますfit_resamples
。ワークフローは次のようになります。
library(tidymodels)
# import data and convert response to factor
train <- read.csv('https://pastebin.com/raw/LJQqdEEE')
train$accepted <- as.factor(train$accepted)
# Train/test split
new_split <- initial_split(train, prop = 0.7)
new_train <- training(new_split)
new_test <- testing(new_split)
# Feature engineering and data prep
admission_rec <-
recipe(accepted ~ ., data = new_train) %>%
step_impute_median(sat) %>%
step_mutate(
ap_scores = strsplit(as.character(ap_scores), ';'),
ap_score_max = max(as.numeric(unlist(ap_scores))),
ap_score_avg = mean(as.numeric(unlist(ap_scores))),
ap_score_min = min(as.numeric(unlist(ap_scores))),
ap_score_med = median(as.numeric(unlist(ap_scores)))
) %>%
step_dummy(ethnicity, one_hot = T) %>%
step_center(c(essay_strength, family_income, sat), skip = T) %>%
step_scale(c(essay_strength, family_income, sat), skip = T) %>%
step_naomit(everything(), skip = T) %>%
step_rm(ap_scores)
# Random forest model and workflow
rf_spec <-
rand_forest() %>%
set_engine('ranger') %>%
set_mode('classification')
rf_workflow <-
workflow() %>%
add_recipe(admission_rec) %>%
add_model(rf_spec)
# Cross validation
cv_folds <-
vfold_cv(new_train, v = 5)
# Fit model
rf_res <- rf_workflow %>%
fit_resamples(
resamples = cv_folds,
metrics = metric_set(
recall, precision, f_meas, accuracy,
kap, roc_auc, sens, spec
)
)
モデルをフィッティングすると、次の失敗メッセージが表示されます。
preprocessor 1/1: There are new levels in a factor: NA
preprocessor 1/1, model 1/1 (predictions): Missing data in columns: ethnicity_Asian ...
これは、1 つのホット エンコードされた列に限定されているように見えますstep_naomit(skip = TRUE)
。このため、step_naomit
後に配置するとうまくいくと誤って考えていましstep_mutate
た。
ここでかなり単純なことを見落としている可能性があります。これは、{tidymodels}
長い R hyathus の後の最初の刺し傷です。