Hồi quy Lasso

Giảm Chiều Dữ Liệu với R

Matt Pickard

Owner, Pickard Predictives, LLC

Tổng quan hồi quy Lasso

  • Chọn đặc trưng có giám sát
  • Regularization L1
  • Phạt các hệ số hồi quy
  • Co ngắn hệ số
  • Hệ số ít quan trọng co về 0
  • Tự nhiên thực hiện chọn đặc trưng
linear_reg(engine = "glmnet", penalty = 0.001 , mixture = 1)
Giảm Chiều Dữ Liệu với R

Chuẩn hóa dữ liệu

  • Chuẩn hóa dữ liệu trước để penalty áp dụng đồng đều lên các đặc trưng
  • Dùng scale() cho biến mục tiêu
    • trả về ma trận, nên chuyển sang vector với as.vector()
  • Dùng step_normalize() cho biến dự báo

Ví dụ

# Chuẩn hóa biến mục tiêu
df <- df %>% mutate(target = as.vector(scale(target))) 
... 
# Chuẩn hóa biến dự báo
recipe() %>% step_normalize(all_numeric_predictors()) 
Giảm Chiều Dữ Liệu với R

Chọn giá trị penalty

  • Penalty là siêu tham số cần tối ưu
  • Tìm giá trị penalty tốt nhất
  • Dùng tune() trong tidymodels
linear_reg(engine = "glmnet", penalty = tune() , mixture = 1)
Giảm Chiều Dữ Liệu với R

Chuẩn bị dữ liệu

Scale biến mục tiêu
house_sales_subset_df <- house_sales_subset_df %>% 
  mutate(price = as.vector(scale(price)))
Tạo tập huấn luyện và kiểm tra
split <- initial_split(house_sales_subset_df, prop = 0.8)
train <- split %>% training()
test <-  split %>% testing()
Giảm Chiều Dữ Liệu với R

Tạo recipe

Tạo recipe
lasso_recipe <- 
  recipe(price ~ ., data = train) %>% 
  step_normalize(all_numeric_predictors()) 
Giảm Chiều Dữ Liệu với R

Tạo workflow

Tạo đặc tả mô hình
lasso_model <- linear_reg(penalty = 0.01, mixture = 1, engine = "glmnet")
Tạo workflow
lasso_workflow <- workflow(preprocessor = lasso_recipe, spec =  lasso_model)
Giảm Chiều Dữ Liệu với R

Fit 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
...              ...        ...
Giảm Chiều Dữ Liệu với R

Tạo workflow mô hình có thể tinh chỉnh

Tạo đặc tả mô hình có thể tinh chỉnh
lasso_model <- linear_reg(penalty = tune(), mixture = 1, engine = "glmnet")
lasso_workflow <- workflow(preprocessor = lasso_recipe, spec =  lasso_model)
Tạo mẫu huấn luyện cross-validation
train_cv <- vfold_cv(train, v = 5)
Tạo lưới giá trị penalty
penalty_grid <- grid_regular(penalty(range = c(-3, -1)), levels = 20)
  • Khoảng penalty 0.001 đến 0.1 được chỉ định là range = c(-3, -1)
Giảm Chiều Dữ Liệu với R

Fit một lưới mô hình

Tạo lưới các mô hình đã fit
lasso_grid <- tune_grid(
  lasso_workflow,
  resamples = train_cv,
  grid = penalty_grid)
Vẽ hiệu năng mô hình
autoplot(lasso_grid, metric = "rmse")
Giảm Chiều Dữ Liệu với R

Biểu đồ hiệu năng theo penalty

biểu đồ hiệu năng theo penalty

Giảm Chiều Dữ Liệu với R

Hoàn thiện mô hình

Lấy giá trị penalty của mô hình tốt nhất
best_rmse <- lasso_grid %>% select_best("rmse")
Fit lại mô hình tốt nhất
final_lasso <- 
  finalize_workflow(lasso_workflow, best_rmse) %>% 
  fit(train)
Hiển thị hệ số của mô hình tốt nhất
tidy(final_lasso) %>% filter(estimate > 0)
Giảm Chiều Dữ Liệu với R

Ayo berlatih!

Giảm Chiều Dữ Liệu với R

Preparing Video For Download...