Régression Lasso

Réduction de dimension en R

Matt Pickard

Owner, Pickard Predictives, LLC

Aperçu de la régression Lasso

  • Sélection de caractéristiques supervisée
  • Régularisation L1
  • Pénalise les coefficients de régression
  • Réduit les coefficients
  • Les moins importants sont ramenés à zéro
  • Fait la sélection de caractéristiques naturellement
linear_reg(engine = "glmnet", penalty = 0.001 , mixture = 1)
Réduction de dimension en R

Normaliser les données

  • Normalisez d'abord les données pour appliquer la même pénalité à toutes les caractéristiques
  • Utilisez scale() pour la variable cible
    • retourne une matrice ; convertir en vecteur avec as.vector()
  • Utilisez step_normalize() pour les variables prédictives

Exemple

# Mettre à l'échelle la variable cible
df <- df %>% mutate(target = as.vector(scale(target))) 
... 
# Mettre à l'échelle les variables prédictives
recipe() %>% step_normalize(all_numeric_predictors()) 
Réduction de dimension en R

Choisir une valeur de pénalité

  • La pénalité est un hyperparamètre à optimiser
  • Recherchez la meilleure valeur de pénalité
  • Utilisez tune() dans tidymodels
linear_reg(engine = "glmnet", penalty = tune() , mixture = 1)
Réduction de dimension en R

Préparer les données

Mettre à l'échelle la variable cible
house_sales_subset_df <- house_sales_subset_df %>% 
  mutate(price = as.vector(scale(price)))
Créer les ensembles d'entraînement et de test
split <- initial_split(house_sales_subset_df, prop = 0.8)
train <- split %>% training()
test <-  split %>% testing()
Réduction de dimension en R

Créer une recette

Créer une recette
lasso_recipe <- 
  recipe(price ~ ., data = train) %>% 
  step_normalize(all_numeric_predictors()) 
Réduction de dimension en R

Créer le flux de travail

Créer la spécification du modèle
lasso_model <- linear_reg(penalty = 0.01, mixture = 1, engine = "glmnet")
Créer le flux de travail
lasso_workflow <- workflow(preprocessor = lasso_recipe, spec =  lasso_model)
Réduction de dimension en R

Ajuster le flux de travail

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
...              ...        ...
Réduction de dimension en R

Créer un flux de travail de modèle réglable

Créer une spécification de modèle réglable
lasso_model <- linear_reg(penalty = tune(), mixture = 1, engine = "glmnet")
lasso_workflow <- workflow(preprocessor = lasso_recipe, spec =  lasso_model)
Créer un échantillon d'entraînement par validation croisée
train_cv <- vfold_cv(train, v = 5)
Créer une grille de valeurs de pénalité
penalty_grid <- grid_regular(penalty(range = c(-3, -1)), levels = 20)
  • Une plage de pénalité de 0,001 à 0,1 se spécifie par range = c(-3, -1)
Réduction de dimension en R

Ajuster une grille de modèles

Créer une grille de modèles ajustés
lasso_grid <- tune_grid(
  lasso_workflow,
  resamples = train_cv,
  grid = penalty_grid)
Tracer les performances des modèles
autoplot(lasso_grid, metric = "rmse")
Réduction de dimension en R

Graphique de performance de la pénalité

graphique de performance selon la pénalité

Réduction de dimension en R

Finaliser le modèle

Récupérer la valeur de pénalité du meilleur modèle
best_rmse <- lasso_grid %>% select_best("rmse")
Réajuster le meilleur modèle
final_lasso <- 
  finalize_workflow(lasso_workflow, best_rmse) %>% 
  fit(train)
Afficher les coefficients du meilleur modèle
tidy(final_lasso) %>% filter(estimate > 0)
Réduction de dimension en R

Passons à la pratique !

Réduction de dimension en R

Preparing Video For Download...