Dimensies verminderen

Feature engineering in R

Jorge Zazueta

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

Kenmerken met nulvariantie

Sommige datasets hebben kolommen met constante waarden of nulvariantie. We kunnen die kenmerken filteren met step_zv() in onze recipe().

Tabel met een kenmerk met nulvariantie.

Feature engineering in R

Kenmerken met bijna nulvariantie

Kenmerken met bijna nulvariantie zijn voorspellers met één waarde én voorspellers met beide eigenschappen hieronder:

  • Heel weinig unieke waarden vergeleken met het aantal samples

  • De verhouding tussen de frequentie van de meest voorkomende waarde en die van de op één na meest voorkomende is groot

Voorbeeld van bijna nulvariantie:

  • Bij 100 observaties zijn er twee waarden, maar één komt maar één keer voor.

step_nzv() vindt en verwijdert voorspellers met deze eigenschappen.

Feature engineering in R

Principal Component Analysis (PCA)

Oorspronkelijke driedimensionale dataset met twee klassen.

Een driedimensionale grafiek met twee dataklassen.

Gereduceerde dataset met de eerste twee hoofdcomponenten.

Een tweedimensionale grafiek met twee dataklassen als scatterplot van de eerste twee hoofdcomponenten.

Feature engineering in R

Laten we een recipe preppen

Een recipe maken voor PCA en de output ophalen met prep().

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

We kunnen de beschikbare info bekijken met names() op 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 in R

Verklaarde variantie vinden

Haal de standaarddeviatie uit het object pca_output en bereken de verklaarde variantie.

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))

Een tabel met de verklaarde variantie per hoofdcomponent.

# 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 in R

Verklaarde variantie visualiseren

We kunnen de output als kolomgrafiek plotten met ggplot2.

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

Verklaarde variantie per hoofdcomponent.

Kolomgrafiek met de verklaarde variantie per hoofdcomponent.

Feature engineering in R

Laten we oefenen!

Feature engineering in R

Preparing Video For Download...