라쏘 회귀

R에서의 차원 축소

Matt Pickard

Owner, Pickard Predictives, LLC

라쏘 회귀 개요

  • 감독식 특성 선택
  • L1 정규화
  • 회귀 계수에 패널티 부여
  • 계수 축소
  • 덜 중요한 계수는 0으로 수축
  • 자연스럽게 특성 선택 수행
linear_reg(engine = "glmnet", penalty = 0.001 , mixture = 1)
R에서의 차원 축소

데이터 표준화

  • 먼저 데이터 표준화: 패널티가 특성 전반에 동일하게 적용되도록 함
  • 타깃 변수에는 scale() 사용
    • 행렬을 반환하므로 as.vector()로 벡터 변환
  • 예측 변수에는 step_normalize() 사용

예시

# 타깃 변수 스케일링
df <- df %>% mutate(target = as.vector(scale(target))) 
... 
# 예측 변수 스케일링
recipe() %>% step_normalize(all_numeric_predictors()) 
R에서의 차원 축소

패널티 값 선택

  • 패널티는 최적화할 하이퍼파라미터입니다
  • 최적의 패널티 값을 탐색합니다
  • tidymodels에서 tune() 사용
linear_reg(engine = "glmnet", penalty = tune() , mixture = 1)
R에서의 차원 축소

데이터 준비

타깃 변수 스케일링
house_sales_subset_df <- house_sales_subset_df %>% 
  mutate(price = as.vector(scale(price)))
학습/테스트 세트 생성
split <- initial_split(house_sales_subset_df, prop = 0.8)
train <- split %>% training()
test <-  split %>% testing()
R에서의 차원 축소

레시피 생성

레시피 생성
lasso_recipe <- 
  recipe(price ~ ., data = train) %>% 
  step_normalize(all_numeric_predictors()) 
R에서의 차원 축소

워크플로 생성

모델 사양 생성
lasso_model <- linear_reg(penalty = 0.01, mixture = 1, engine = "glmnet")
워크플로 생성
lasso_workflow <- workflow(preprocessor = lasso_recipe, spec =  lasso_model)
R에서의 차원 축소

워크플로 적합

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에서의 차원 축소

튜닝 가능한 모델 워크플로 생성

튜닝 가능한 모델 사양 생성
lasso_model <- linear_reg(penalty = tune(), mixture = 1, engine = "glmnet")
lasso_workflow <- workflow(preprocessor = lasso_recipe, spec =  lasso_model)
교차 검증 학습 샘플 생성
train_cv <- vfold_cv(train, v = 5)
패널티 값 그리드 생성
penalty_grid <- grid_regular(penalty(range = c(-3, -1)), levels = 20)
  • 0.001~0.1의 패널티 범위를 range = c(-3, -1)로 지정합니다
R에서의 차원 축소

모델 그리드 적합

적합한 모델 그리드 생성
lasso_grid <- tune_grid(
  lasso_workflow,
  resamples = train_cv,
  grid = penalty_grid)
모델 성능 시각화
autoplot(lasso_grid, metric = "rmse")
R에서의 차원 축소

패널티 성능 플롯

패널티 성능 플롯

R에서의 차원 축소

모델 최종화

최적 모델의 패널티 값 추출
best_rmse <- lasso_grid %>% select_best("rmse")
최적 모델 재적합
final_lasso <- 
  finalize_workflow(lasso_workflow, best_rmse) %>% 
  fit(train)
최적 모델 계수 표시
tidy(final_lasso) %>% filter(estimate > 0)
R에서의 차원 축소

연습해 봅시다!

R에서의 차원 축소

Preparing Video For Download...