k-Nearest-Neighbors-imputering

Hantering av saknade värden med imputering i R

Michal Oleszak

Machine Learning Engineer

k-Nearest-Neighbors-imputering

En tabell med tre kolumner: A, B och C. Det saknas ett värde i kolumn A.

Hantering av saknade värden med imputering i R

k-Nearest-Neighbors-imputering

En tabell med tre kolumner: A, B och C. Det saknas ett värde i kolumn A. Tre av raderna utan saknat värde är markerade i färg.

För varje observation med saknade värden:

  1. Hitta k andra observationer (donatorer, grannar) som liknar den aktuella observationen mest.
Hantering av saknade värden med imputering i R

k-Nearest-Neighbors-imputering

En tabell med tre kolumner: A, B och C. Tre av raderna utan saknat värde är markerade i färg. Det tidigare saknade värdet i A har ersatts med medelvärdet av talen i samma kolumn i de markerade raderna.

För varje observation med saknade värden:

  1. Hitta k andra observationer (donatorer, grannar) som liknar den aktuella observationen mest.
  2. Ersätt de saknade värdena med aggregerade värden från de k donatorerna (medelvärde, median, typvärde).
Hantering av saknade värden med imputering i R

Avståndsmått

Avståndet mellan två observationer a och b:

Euklidiskt avstånd för n numeriska variabler:

$\sqrt{\Sigma_{i=1}^{n} (a_i - b_i)^{2}}$

Manhattanavstånd för f faktorvariabler:

$\Sigma_{i=1}^{f} |a_i - b_i|$

Hammingavstånd för c kategoriska variabler:

$\Sigma_{i=1}^{c} I(a_i \neq b_i)$

Ett koordinatsystem med två punkter förbundna med en rät linje.

Ett koordinatsystem med två punkter förbundna med två vinkelräta linjer, som om punkterna vore två motstående hörn i en rektangel.

Hantering av saknade värden med imputering i R

Gower-avstånd

En mockad dataram med tre typer av variabler, var och en markerad i olika färg: numeriska, faktor- och kategoriska variabler.

Hantering av saknade värden med imputering i R

Gower-avstånd

En mockad dataram med tre typer av variabler, var och en markerad i olika färg: numeriska, faktor- och kategoriska variabler. Varje variabeltyp har en pil som pekar mot motsvarande avståndsmått: euklidiskt, Manhattan- respektive Hammingavstånd. De tre avståndsmåtten pekar mot en ellips med Gower-avståndet, som är en kombination av de tre.

Hantering av saknade värden med imputering i R

kNN-imputering i praktiken

library(VIM)
nhanes_imp <- kNN(nhanes, k = 5, variable = c("TotChol", "Pulse"))
head(nhanes_imp)
  Age Gender Weight Height Diabetes TotChol Pulse PhysActive TotChol_imp Pulse_imp
1  16   male   73.2  172.0    FALSE    3.00    76       TRUE       FALSE     FALSE
2  17   male   72.3  176.0    FALSE    2.61    74       TRUE       FALSE     FALSE
3  12   male   57.7  158.9    FALSE    4.27    80       TRUE       FALSE     FALSE
4  16   male   88.9  183.3    FALSE    3.62    58       TRUE       FALSE     FALSE
5  13 female   45.1  157.6    FALSE    2.66    92       TRUE       FALSE     FALSE
6  16 female   48.7  158.4    FALSE    4.32    58      FALSE       FALSE     FALSE
Hantering av saknade värden med imputering i R

Vikta donatorer

  • Av de k valda grannarna för en observation liknar vissa den mer än andra.
  • Det kan vara lämpligt att ge närmare grannar större vikt vid aggregering av deras värden.
  • Aggregera grannarna med ett viktat medelvärde, där vikterna ges av de inverterade avstånden till respektive granne.
  • Detta är bara möjligt vid imputering av numeriska variabler.
nhanes_imp <- nhanes %>% 
  kNN(variable = c("TotChol", "Pulse"),
      k = 5,
      numFun = weighted.mean,
      weightDist = TRUE)
Hantering av saknade värden med imputering i R

Sortera variabler

  • kNN-algoritmen itererar över variabler och imputerar dem en i taget.
  • Avstånden mellan observationer beräknas varje gång.
  • Om den första variabeln hade många saknade värden baseras avståndsberäkningen för den andra variabeln på många imputerade värden.
  • Det är bra att sortera variablerna i stigande ordning efter antal saknade värden innan kNN körs.
Hantering av saknade värden med imputering i R

Sortera variabler i praktiken

vars_by_NAs <- nhanes %>% 
  is.na() %>%
  colSums() %>%
  sort(decreasing = FALSE) %>% 
  names()
nhanes_imp <- nhanes %>% 
  select(vars_by_NAs) %>% 
  kNN(k = 5)
Hantering av saknade värden med imputering i R

Nu kör vi en övning!

Hantering av saknade värden med imputering i R

Preparing Video For Download...