Lasso-regressie

Dimensionality Reduction in R

Matt Pickard

Owner, Pickard Predictives, LLC

Overzicht van lasso-regressie

  • Gecontroleerde featureselectie
  • L1-regularisatie
  • Straft de regressiecoëfficiënten
  • Krimpt coëfficiënten
  • Minder belangrijke coëfficiënten krimpen naar nul
  • Doet automatisch featureselectie
linear_reg(engine = "glmnet", penalty = 0.001 , mixture = 1)
Dimensionality Reduction in R

Data standaardiseren

  • Standaardiseer eerst de data, zodat de penalty gelijk geldt voor alle features
  • Gebruik scale() voor de doelvariabele
    • geeft een matrix terug; zet om naar vector met as.vector()
  • Gebruik step_normalize() voor predictoren

Voorbeeld

# Schaal doelvariabele
df <- df %>% mutate(target = as.vector(scale(target))) 
... 
# Schaal predictoren
recipe() %>% step_normalize(all_numeric_predictors()) 
Dimensionality Reduction in R

Een penaltywaarde kiezen

  • Penalty is een hyperparameter om te optimaliseren
  • Zoek de beste penaltywaarde
  • Gebruik tune() in tidymodels
linear_reg(engine = "glmnet", penalty = tune() , mixture = 1)
Dimensionality Reduction in R

Data voorbereiden

Schaal de doelvariabele
house_sales_subset_df <- house_sales_subset_df %>% 
  mutate(price = as.vector(scale(price)))
Maak de train- en testsets
split <- initial_split(house_sales_subset_df, prop = 0.8)
train <- split %>% training()
test <-  split %>% testing()
Dimensionality Reduction in R

Maak een recipe

Maak een recipe
lasso_recipe <- 
  recipe(price ~ ., data = train) %>% 
  step_normalize(all_numeric_predictors()) 
Dimensionality Reduction in R

Maak de workflow

Maak de modelspecificatie
lasso_model <- linear_reg(penalty = 0.01, mixture = 1, engine = "glmnet")
Maak de workflow
lasso_workflow <- workflow(preprocessor = lasso_recipe, spec =  lasso_model)
Dimensionality Reduction in R

Fit de workflow

tidy(lasso_workflow %>% fit(train)) %>% filter(estimate > 0)
# A tibble: 9 × 3
  term          estimate penalty
  <chr>            <dbl>   <dbl>
1 bathrooms      0.0477     0.01
2 sqft_living    0.434      0.01
3 floors         0.0262     0.01
4 waterfront     0.133      0.01
5 view           0.0510     0.01
6 condition      0.0319     0.01
...              ...        ...
Dimensionality Reduction in R

Maak een afstembare modelworkflow

Maak een afstembare modelspecificatie
lasso_model <- linear_reg(penalty = tune(), mixture = 1, engine = "glmnet")
lasso_workflow <- workflow(preprocessor = lasso_recipe, spec =  lasso_model)
Maak crossvalidatie-trainingsets
train_cv <- vfold_cv(train, v = 5)
Maak een raster met penaltywaarden
penalty_grid <- grid_regular(penalty(range = c(-3, -1)), levels = 20)
  • Een penalty-bereik van 0,001 tot 0,1 wordt opgegeven als range = c(-3, -1)
Dimensionality Reduction in R

Fit een raster van modellen

Maak een raster van gefitte modellen
lasso_grid <- tune_grid(
  lasso_workflow,
  resamples = train_cv,
  grid = penalty_grid)
Plot de modelprestaties
autoplot(lasso_grid, metric = "rmse")
Dimensionality Reduction in R

Penalty-prestatieplot

penalty-prestatieplot

Dimensionality Reduction in R

Finaliseer het model

Haal de penalty van het beste model op
best_rmse <- lasso_grid %>% select_best("rmse")
Refit het beste model
final_lasso <- 
  finalize_workflow(lasso_workflow, best_rmse) %>% 
  fit(train)
Toon de coëfficiënten van het beste model
tidy(final_lasso) %>% filter(estimate > 0)
Dimensionality Reduction in R

Laten we oefenen!

Dimensionality Reduction in R

Preparing Video For Download...