# \donttest{
if (all(vapply(
c("parsnip","stats","modeldata"),
requireNamespace, quietly = TRUE, FUN.VALUE = logical(1)
))) {
library(tidymodels)
library(parsnip)
library(stats)
library(modeldata)
# Data analysis
data(ames)
ames = ames %>% mutate(Sale_Price = log10(Sale_Price))
set.seed(502)
ames_split = initial_split(ames, prop = 0.80, strata = Sale_Price)
ames_train = training(ames_split) # dim (2342, 74)
ames_test = testing(ames_split) # dim (588, 74)
# Model spec
krr_spec = krr_reg(kernel = "gaussian", opt = "exact",
m = 50, eps = 1e-6, n_threads = 4,
rho = 1, penalty = tune()) %>%
set_engine("fastkrr") %>%
set_mode("regression")
# Define rec
rec = recipe(Sale_Price ~ Longitude + Latitude, data = ames_train)
# workflow
wf = workflow() %>%
add_recipe(rec) %>%
add_model(krr_spec)
# Define hyper-parameter grid
param_grid = grid_regular(
dials::penalty(range = c(-10, -3)),
levels = 5
)
# CV setting
set.seed(123)
cv_folds = vfold_cv(ames_train, v = 5, strata = Sale_Price)
# Tuning
tune_results = tune_grid(
wf,
resamples = cv_folds,
grid = param_grid,
metrics = metric_set(rmse),
control = control_grid(verbose = TRUE, save_pred = TRUE)
)
# Result check
collect_metrics(tune_results)
# Select best parameter
best_params = select_best(tune_results, metric = "rmse")
# Finalized model spec using best parameter
final_spec = finalize_model(krr_spec, best_params)
final_wf = workflow() %>%
add_recipe(rec) %>%
add_model(final_spec)
# Finalized fitting using best parameter
final_fit = final_wf %>% fit(data = ames_train)
# Prediction
predict(final_fit, new_data = ames_test)
print(best_params)
}# }
Run the code above in your browser using DataLab