Imputacja k-Najbliższych Sąsiadów

Obsługa brakujących danych z imputacją w R

Michal Oleszak

Machine Learning Engineer

Imputacja k-Najbliższych Sąsiadów

Tabela z trzema kolumnami: A, B i C. W kolumnie A brakuje jednej wartości.

Obsługa brakujących danych z imputacją w R

Imputacja k-Najbliższych Sąsiadów

Tabela z trzema kolumnami: A, B i C. W kolumnie A brakuje jednej wartości. Trzy wiersze bez braków są wyróżnione kolorem.

Dla każdej obserwacji z brakami:

  1. Znajdź k innych obserwacji (dawców, sąsiadów) najbardziej podobnych do danej obserwacji.
Obsługa brakujących danych z imputacją w R

Imputacja k-Najbliższych Sąsiadów

Tabela z trzema kolumnami: A, B i C. Trzy wiersze bez braków są wyróżnione kolorem. Brakująca wartość w A została zastąpiona średnią wartości z wyróżnionych wierszy tej kolumny.

Dla każdej obserwacji z brakami:

  1. Znajdź k innych obserwacji (dawców, sąsiadów) najbardziej podobnych do danej obserwacji.
  2. Zastąp braki zagregowanymi wartościami od k dawców (średnia, mediana, moda).
Obsługa brakujących danych z imputacją w R

Miary odległości

Odległość między dwoma obserwacjami a i b:

Odległość euklidesowa dla n zmiennych numerycznych:

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

Odległość Manhattan dla f zmiennych czynnikowych:

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

Odległość Hamminga dla c zmiennych kategorycznych:

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

Układ współrzędnych z dwoma punktami połączonymi prostą linią.

Układ współrzędnych z dwoma punktami połączonymi dwiema prostopadłymi liniami, jakby były dwoma przeciwnymi narożnikami prostokąta.

Obsługa brakujących danych z imputacją w R

Odległość Gowera

Przykładowa ramka danych zawierająca trzy typy zmiennych, każdy wyróżniony innym kolorem: zmienne numeryczne, czynnikowe i kategoryczne.

Obsługa brakujących danych z imputacją w R

Odległość Gowera

Przykładowa ramka danych z trzema typami zmiennych wyróżnionymi różnymi kolorami: numerycznymi, czynnikowymi i kategorycznymi. Każdy typ ma przypisaną strzałkę wskazującą odpowiednią miarę odległości: euklidesową, Manhattan i Hamminga. Trzy miary odległości wskazują elipsę z odległością Gowera, będącą ich kombinacją.

Obsługa brakujących danych z imputacją w R

Imputacja kNN w praktyce

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
Obsługa brakujących danych z imputacją w R

Ważenie dawców

  • Spośród k wybranych sąsiadów obserwacji, niektórzy są do niej bardziej podobni niż inni.
  • Warto przypisać większą wagę bliższym sąsiadom podczas agregacji ich wartości.
  • Agregacja sąsiadów za pomocą ważonej średniej, gdzie wagi są odwrotnościami odległości do każdego sąsiada.
  • Jest to możliwe wyłącznie przy imputacji zmiennych numerycznych.
nhanes_imp <- nhanes %>% 
  kNN(variable = c("TotChol", "Pulse"),
      k = 5,
      numFun = weighted.mean,
      weightDist = TRUE)
Obsługa brakujących danych z imputacją w R

Sortowanie zmiennych

  • Algorytm kNN imputuje zmienne kolejno, jedną po drugiej.
  • Za każdym razem obliczane są odległości między obserwacjami.
  • Jeśli pierwsza zmienna miała wiele braków, obliczenia odległości dla kolejnej zmiennej będą oparte na wielu wartościach imputowanych.
  • Przed uruchomieniem kNN warto posortować zmienne rosnąco według liczby braków.
Obsługa brakujących danych z imputacją w R

Sortowanie zmiennych w praktyce

vars_by_NAs <- nhanes %>% 
  is.na() %>%
  colSums() %>%
  sort(decreasing = FALSE) %>% 
  names()
nhanes_imp <- nhanes %>% 
  select(vars_by_NAs) %>% 
  kNN(k = 5)
Obsługa brakujących danych z imputacją w R

Ćwiczmy imputację kNN!

Obsługa brakujących danych z imputacją w R

Preparing Video For Download...