Regresja Lasso

Redukcja wymiarowości w R

Matt Pickard

Owner, Pickard Predictives, LLC

Przegląd regresji Lasso

  • Nadzorowana selekcja cech
  • Regularyzacja L1
  • Penalizuje współczynniki regresji
  • Zmniejsza współczynniki
  • Mniej istotne współczynniki kurczą się do zera
  • Naturalnie wykonuje selekcję cech
linear_reg(engine = "glmnet", penalty = 0.001 , mixture = 1)
Redukcja wymiarowości w R

Standaryzacja danych

  • Najpierw standaryzuj dane, aby kara była równomiernie stosowana do wszystkich cech
  • Użyj scale() dla zmiennej docelowej
    • zwraca macierz, więc przekonwertuj na wektor za pomocą as.vector()
  • Użyj step_normalize() dla zmiennych predyktorów

Przykład

# Skalowanie zmiennej docelowej
df <- df %>% mutate(target = as.vector(scale(target))) 
... 
# Skalowanie zmiennych predyktorów
recipe() %>% step_normalize(all_numeric_predictors()) 
Redukcja wymiarowości w R

Wybór wartości kary

  • Kara to hiperparametr do optymalizacji
  • Wyszukaj najlepszą wartość kary
  • Użyj tune() w tidymodels
linear_reg(engine = "glmnet", penalty = tune() , mixture = 1)
Redukcja wymiarowości w R

Przygotowanie danych

Skalowanie zmiennej docelowej
house_sales_subset_df <- house_sales_subset_df %>% 
  mutate(price = as.vector(scale(price)))
Tworzenie zbiorów treningowego i testowego
split <- initial_split(house_sales_subset_df, prop = 0.8)
train <- split %>% training()
test <-  split %>% testing()
Redukcja wymiarowości w R

Tworzenie receptury

Tworzenie receptury
lasso_recipe <- 
  recipe(price ~ ., data = train) %>% 
  step_normalize(all_numeric_predictors()) 
Redukcja wymiarowości w R

Tworzenie przepływu pracy

Tworzenie specyfikacji modelu
lasso_model <- linear_reg(penalty = 0.01, mixture = 1, engine = "glmnet")
Tworzenie przepływu pracy
lasso_workflow <- workflow(preprocessor = lasso_recipe, spec =  lasso_model)
Redukcja wymiarowości w R

Dopasowanie przepływu pracy

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
...              ...        ...
Redukcja wymiarowości w R

Strojony przepływ pracy modelu

Tworzenie strojącej specyfikacji modelu
lasso_model <- linear_reg(penalty = tune(), mixture = 1, engine = "glmnet")
lasso_workflow <- workflow(preprocessor = lasso_recipe, spec =  lasso_model)
Tworzenie próby do walidacji krzyżowej
train_cv <- vfold_cv(train, v = 5)
Tworzenie siatki wartości kary
penalty_grid <- grid_regular(penalty(range = c(-3, -1)), levels = 20)
  • Zakres kary od 0,001 do 0,1 określa się jako range = c(-3, -1)
Redukcja wymiarowości w R

Dopasowanie siatki modeli

Tworzenie siatki dopasowanych modeli
lasso_grid <- tune_grid(
  lasso_workflow,
  resamples = train_cv,
  grid = penalty_grid)
Wykres wydajności modeli
autoplot(lasso_grid, metric = "rmse")
Redukcja wymiarowości w R

Wykres wydajności kary

wykres wydajności kary

Redukcja wymiarowości w R

Finalizacja modelu

Pobranie wartości kary dla najlepszego modelu
best_rmse <- lasso_grid %>% select_best("rmse")
Ponowne dopasowanie najlepszego modelu
final_lasso <- 
  finalize_workflow(lasso_workflow, best_rmse) %>% 
  fit(train)
Wyświetlenie współczynników najlepszego modelu
tidy(final_lasso) %>% filter(estimate > 0)
Redukcja wymiarowości w R

Czas na ćwiczenia!

Redukcja wymiarowości w R

Preparing Video For Download...