Отбор признаков на основе дисперсии

Снижение размерности в R

Matt Pickard

Owner, Pickard Predictives, LLC

Дисперсия ненормированных данных

график средних значений с планками стандартного отклонения для нормированных кредитных данных

Снижение размерности в R

Дисперсия нормированных данных

график средних значений с планками стандартного отклонения для нормированных кредитных данных

Снижение размерности в R

Вычисление нормированных дисперсий

credit_variances <- credit_df %>% 
  summarize(across(everything(), ~ var(scale(., center = FALSE)), na.rm = TRUE)) %>%

pivot_longer(everything(), names_to = "feature", values_to = "variance") %>%
arrange(desc(variance)) credit_variances
# A tibble: 17 × 2
   feature                  variance
   <chr>                       <dbl>
 1 num_of_loan               0.996  
 2 num_of_delayed_payment    0.986   
 ...
Снижение размерности в R

Порог дисперсии

вывод значений дисперсий

Снижение размерности в R

Порог дисперсии

вывод дисперсий с обозначением первого возможного порога

Снижение размерности в R

Порог дисперсии

вывод дисперсий с обозначением первого возможного порога

Снижение размерности в R

Порог дисперсии

вывод дисперсий с обозначением первого возможного порога

Снижение размерности в R

График порога дисперсии

График порога дисперсии

Снижение размерности в R

Создание фильтра по дисперсии

low_var_filter <- credit_variances %>% 
  filter(variance < 0.1) %>% 
  pull(feature)

low_var_filter
[1] "credit_history_months"    "age"                     
[3] "num_credit_inquiries"     "credit_utilization_ratio"
[5] "num_credit_card"   
Снижение размерности в R

Подход tidymodels

Создание рецепта

low_variance_recipe <- recipe(credit_score ~ ., data = credit_df) %>%

step_zv(all_predictors()) %>%
step_scale(all_numeric_predictors()) %>%
step_nzv(all_predictors()) %>%
prep()

Применение рецепта

filtered_credit_df <- bake(low_variance_recipe, new_data = NULL)
Снижение размерности в R

Анализ результатов конкретного шага

low_variance_recipe <- recipe(credit_score ~ ., data = credit_df) %>% 
  step_zv(all_predictors()) %>% 
  step_scale(all_numeric_predictors()) %>% 
  step_nzv(all_predictors()) %>% 
  prep() 

tidy(low_variance_recipe, number = 3)
  terms                id       
  <chr>                <chr>    
1 num_credit_card      nzv_ni8L7
2 num_credit_inquiries nzv_ni8L7
Снижение размерности в R

Давайте потренируемся!

Снижение размерности в R

Preparing Video For Download...