我嘗試使用出現錯誤的作業流集包或方法。以下是 R 代碼(對不起,代碼很長):
# Package ----
library(finetune)
library(themis)
library(tidymodels)
# Data ----
data("PimaIndiansDiabetes", package = "mlbench")
table(PimaIndiansDiabetes$diabetes)
str(PimaIndiansDiabetes)
PimaIndiansDiabetes <-
PimaIndiansDiabetes %>%
mutate(diabetes = relevel(diabetes, "pos"))
# Split ----
set.seed(123)
ind <- initial_split(PimaIndiansDiabetes, strata = diabetes)
dat_train <- training(ind)
dat_test <- testing(ind)
# CV ----
set.seed(123)
dat_cv <- vfold_cv(dat_train, v = 10)
# Recipe ----
dat_rec <-
dat_train %>%
recipe(diabetes ~.) %>%
step_normalize(all_numeric_predictors()) %>%
step_smote(diabetes)
# Model ----
parsnip_nn <-
mlp(hidden_units = tune(),
penalty = tune(),
epochs = tune()) %>%
set_mode("classification") %>%
set_engine("nnet")
parsnip_log <-
logistic_reg(penalty = tune(),
mixture = tune()) %>%
set_engine("glmnet")
# Latin hypercube grid ----
latin_grid <-
grid_latin_hypercube(penalty(),
mixture(),
hidden_units(),
epochs(),
size = 30)
# Tuning ----
race_ctrl <-
control_race(
save_pred = T,
save_workflow = T,
verbose = T
)
class_metrics <- metric_set(accuracy,
f_meas,
j_index,
kap,
precision,
sensitivity,
specificity,
roc_auc,
mcc,
pr_auc)
Tuned_results <-
workflow_set(
preproc = list(rec = dat_rec),
models = list(parsnip_nn = parsnip_nn,
parsnip_log = parsnip_log)
) %>%
workflow_map(
fn = "tune_race_anova",
seed = 123,
grid = latin_grid,
resamples = dat_cv,
verbose = T,
metrics = class_metrics,
control = race_ctrl
)
這是我得到的錯誤,這基本上是說模型的某些引數無法識別tune()。
i 1 of 2 tuning: rec_parsnip_nn
x 1 of 2 tuning: rec_parsnip_nn failed with: Error in check_grid(grid = grid, workflow = workflow, pset = pset) : The provided `grid` has the following parameter columns that have not been marked for tuning by `tune()`: 'mixture'.
i 2 of 2 tuning: rec_parsnip_log
x 2 of 2 tuning: rec_parsnip_log failed with: Error in check_grid(grid = grid, workflow = workflow, pset = pset) : The provided `grid` has the following parameter columns that have not been marked for tuning by `tune()`: 'hidden_units', 'epochs'.
如果我們檢查grid_results:
# A workflow set/tibble: 2 x 4
wflow_id info option result
<chr> <list> <list> <list>
1 rec_parsnip_nn <tibble [1 x 4]> <opts[4]> <try-errr [1]>
2 rec_parsnip_log <tibble [1 x 4]> <opts[4]> <try-errr [1]>
我不確定為什么mixture,hidden_units和等引數epochs不能被tune(). 知道我在哪里做錯了嗎?
uj5u.com熱心網友回復:
神經網路沒有稱為 的引數mixture,而正則化回歸模型沒有稱為hidden_units或的引數epochs。您不能grid對兩個模型使用相同的引數,因為它們沒有相同的超引數。相反,你會想要:
- 為兩個模型創建單獨的網格
- 用于
option_add()通過id引數將每個網格添加到其模型中
另請查看TMwR的第 15 章,了解有關如何僅將選項添加到特定作業流的更多資訊。由于您使用的是拉丁 hybercube,這是 tidymodels 中的默認設定,因此您可能只想跳過所有這些并grid = 30改用它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/456592.html
下一篇:是否可以訪問擁抱面變壓器嵌入層?
