library(tidymodels) library(ISLR) library(glmnet)
data(Hitters) Hitters <- Hitters %>% na.omit()
hitters_recipe <- recipe(Salary ~ ., data = Hitters) %>% step_dummy(all_nominal_predictors()) %>% step_normalize(all_numeric_predictors())
ridge_spec <- linear_reg(penalty = tune(), mixture = 0) %>% set_engine(“glmnet”)
lasso_spec <- linear_reg(penalty = tune(), mixture = 1) %>% set_engine(“glmnet”)
hitters_folds <- vfold_cv(Hitters, v = 5)
lambda_grid <- grid_regular(penalty(), levels = 50)
ridge_workflow <- workflow() %>% add_model(ridge_spec) %>% add_recipe(hitters_recipe)
lasso_workflow <- workflow() %>% add_model(lasso_spec) %>% add_recipe(hitters_recipe)
ridge_tune <- tune_grid( ridge_workflow, resamples = hitters_folds, grid = lambda_grid )
lasso_tune <- tune_grid( lasso_workflow, resamples = hitters_folds, grid = lambda_grid )
best_ridge_lambda <- select_best(ridge_tune, metric = “rmse”) best_lasso_lambda <- select_best(lasso_tune, metric = “rmse”)
final_ridge <- finalize_workflow(ridge_workflow, best_ridge_lambda) %>% fit(data = Hitters)
final_lasso <- finalize_workflow(lasso_workflow, best_lasso_lambda) %>% fit(data = Hitters)
final_ridge final_lasso