Imputace pomocí stromů

Práce s chybějícími daty pomocí imputace v R

Michal Oleszak

Machine Learning Engineer

Přístup imputace pomocí stromů

Predikujte chybějící hodnoty pomocí modelů strojového učení!

  • Neparametrický přístup: žádné předpoklady o vztazích mezi proměnnými.
  • Zachycuje složité nelineární vzory.
  • Často lepší prediktivní výkon než jednoduché statistické modely.

Tento kurz: balíček missForest založený na randomForest

Práce s chybějícími daty pomocí imputace v R

Rozhodovací stromy

Schéma rozhodovacího stromu ukazující, jak modelový příklad přijímá rozhodnutí. Model přiřazuje různou pravděpodobnost diabetu různým kombinacím hodnot výšky a váhy.

Práce s chybějícími daty pomocí imputace v R

Náhodné lesy

Schéma znázorňující princip náhodných lesů. Z původních dat vznikají tři bootstrapované datové sady s náhodnou podmnožinou sloupců. Na každou je natrénován rozhodovací strom a výsledky všech stromů jsou nakonec agregovány.

Práce s chybějícími daty pomocí imputace v R

Algoritmus missForest

  1. Provést počáteční odhad chybějících hodnot pomocí imputace průměrem.
  2. Seřadit proměnné vzestupně podle počtu chybějících hodnot.
  3. Pro každou proměnnou x:
    • Natrénovat náhodný les na pozorované části x (ostatní proměnné jako prediktory).
    • Použít jej k predikci chybějící části x.
  4. Opakovat krok 3., dokud se imputované hodnoty příliš nemění.
Práce s chybějícími daty pomocí imputace v R

missForest v praxi

nhanes %>% is.na() %>% colSums()
Age     Gender     Weight     Height   Diabetes    TotChol      Pulse PhysActive 
  0          0          9          8          1         85         32         26
library(missForest)
imp_res <- missForest(nhanes)
nhanes_imp  <- imp_res$ximp
nhanes_imp %>% is.na() %>% colSums()
Age     Gender     Weight     Height   Diabetes    TotChol      Pulse PhysActive 
  0          0          0          0          0          0          0          0
Práce s chybějícími daty pomocí imputace v R

Chyba imputace

missForest() poskytuje odhad chyby imputace metodou out-of-bag (OOB):

  • Normalizovaná střední kvadratická chyba (NRMSE) pro spojité proměnné.
  • Podíl chybně klasifikovaných položek (PFC) pro kategorické proměnné.

V obou případech dobrý výsledek odpovídá hodnotě blízké 0, hodnoty kolem 1 označují špatný výsledek.

imp_res <- missForest(nhanes)
imp_res$OOBerror
      NRMSE         PFC 
0.147687025 0.003676471
Práce s chybějícími daty pomocí imputace v R

Chyba imputace

missForest() poskytuje odhad chyby imputace metodou out-of-bag (OOB):

  • Normalizovaná střední kvadratická chyba (NRMSE) pro spojité proměnné.
  • Podíl chybně klasifikovaných položek (PFC) pro kategorické proměnné.

V obou případech dobrý výsledek odpovídá hodnotě blízké 0, hodnoty kolem 1 označují špatný výsledek.

imp_res <- missForest(nhanes, variablewise = TRUE)
imp_res$OOBerror
    MSE       PFC       MSE       MSE       PFC       MSE       MSE       MSE 
0.00000   0.00000 285.79563  40.42142   0.00735   0.53444 129.03609   0.17576
Práce s chybějícími daty pomocí imputace v R

Kompromis mezi rychlostí a přesností

Trénování více náhodných lesů může být časově náročné.

Nápad: obětovat část přesnosti a zmenšit lesy pro zkrácení výpočetního času.

  • Snížit počet stromů v každém lese (argument ntree).
  • Snížit počet proměnných používaných pro větvení (argument mtry).

Vliv na výpočetní čas se liší:

  • Snížení ntree má lineární efekt.
  • Snížení mtry přinese větší zrychlení při větším počtu proměnných.
Práce s chybějícími daty pomocí imputace v R

Kompromis mezi rychlostí a přesností v praxi

Výchozí nastavení:

start_time <- Sys.time()
imp_res <- missForest(nhanes)
end_time <- Sys.time()
print(imp_res$OOBerror)
print(end_time - start_time)
      NRMSE         PFC 
0.147687025 0.003676471
Time difference of 5.496582 secs

Zmenšené lesy:

start_time <- Sys.time()
imp_res <- missForest(nhanes,
                      ntree = 10,
                      mtry = 2)
end_time <- Sys.time()
print(imp_res$OOBerror)
print(end_time - start_time)
      NRMSE         PFC 
0.162420139 0.007425743
Time difference of 0.516367 secs
Práce s chybějícími daty pomocí imputace v R

Pojďme procvičovat!

Práce s chybějícími daty pomocí imputace v R

Preparing Video For Download...