Зменшення розмірності

Feature Engineering в R

Jorge Zazueta

Research Professor and Head of the Modeling Group at the School of Economics, UASLP

Ознаки з нульовою дисперсією

Деякі набори даних містять стовпці з постійними значеннями або нульовою дисперсією. Такі ознаки можна відфільтрувати, додавши step_zv() до нашого recipe().

Таблиця, що ілюструє ознаку з нульовою дисперсією.

Feature Engineering в R

Ознаки з майже нульовою дисперсією

Ознаки з майже нульовою дисперсією включають предиктори з одним значенням та предиктори з обома характеристиками:

  • Дуже мало унікальних значень відносно кількості спостережень

  • Велике відношення частоти найпоширенішого значення до частоти другого за поширеністю

Приклад майже нульової дисперсії:

  • Для 100 спостережень є два різні значення, але одне трапляється лише один раз.

step_nzv() знаходить і прибирає предиктори з такими характеристиками.

Feature Engineering в R

Principal Component Analysis (PCA)

Початковий тривимірний набір даних із двома класами.

Тривимірний графік з двома класами даних.

Зменшений набір даних, поданий першими двома головними компонентами.

Двовимірний графік-розсіювання двох класів за першими двома головними компонентами.

Feature Engineering в R

Підготуємо recipe

Створення recipe для PCA та отримання результату через prep().

pc_recipe <- 
recipe(~., data = loans_num) %>%
  step_nzv(all_numeric()) %>%
  step_normalize(all_numeric()) %>%
  step_pca(all_numeric())
pca_output <- prep(pc_recipe)

Можна переглянути доступну інформацію, викликавши names() для pca_output.

names(pca_output)
 [1] "var_info"       "term_info"     
 [3] "steps"          "template"      
 [5] "levels"         "retained"      
 [7] "requirements"   "tr_info"       
 [9] "orig_lvls"      "last_term_info"
Feature Engineering в R

Знаходимо пояснену дисперсію

Добудьте стандартне відхилення з об'єкта pca_output і обчисліть частку поясненої дисперсії.

stdv <- pca_output$steps[[3]]$res$sdev
var_explained <- stdv^2/sum(stdv^2)
PCA = tibble(PC = 1:length(stdv),
          var_explained = var_explained, 
          cumulative = cumsum(var_explained))

Таблиця з часткою дисперсії, поясненою головною компонентою.

# A tibble: 5 × 3
     PC var_explained cumulative
  <int>         <dbl>      <dbl>
1     1        0.315       0.315
2     2        0.214       0.529
3     3        0.202       0.730
4     4        0.198       0.928
5     5        0.0722      1
Feature Engineering в R

Візуалізація поясненої дисперсії

Можна візуалізувати результат стовпчиковою діаграмою за допомогою ggplot2.

PCA %>% 
ggplot(aes(x = PC, 
           y = var_explained)) +
  geom_col(fill = "steelblue") +
  xlab("Principal components") +
  ylab("Variance explained")

Частка дисперсії, поясненої кожною головною компонентою.

Стовпчикова діаграма з часткою дисперсії, поясненою головною компонентою.

Feature Engineering в R

Давайте потренуємось!

Feature Engineering в R

Preparing Video For Download...