k-최근접 이웃 대치

R에서 대치(Imputation)로 결측치 다루기

Michal Oleszak

Machine Learning Engineer

k-최근접 이웃 대치

세 열 A, B, C로 된 표. 열 A에 결측치 하나가 있음.

R에서 대치(Imputation)로 결측치 다루기

k-최근접 이웃 대치

세 열 A, B, C로 된 표. 결측이 없는 행 중 세 행이 색으로 강조됨.

결측이 있는 각 관측치에 대해:

  1. 가장 유사한 k개의 다른 관측치(기부자, 이웃)를 찾습니다.
R에서 대치(Imputation)로 결측치 다루기

k-최근접 이웃 대치

세 열 A, B, C로 된 표. 결측이 없는 세 행이 색으로 강조됨. A의 결측이 강조된 행의 같은 열 값들의 평균으로 대치됨.

결측이 있는 각 관측치에 대해:

  1. 가장 유사한 k개의 다른 관측치(기부자, 이웃)를 찾습니다.
  2. k 기부자의 집계값(평균, 중앙값, 최빈값)으로 결측을 대체합니다.
R에서 대치(Imputation)로 결측치 다루기

거리 측도

두 관측치 ab 사이의 거리:

숫자형 변수 n개에 대한 유클리드 거리:

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

요인형 변수 f개에 대한 맨해튼 거리:

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

범주형 변수 c개에 대한 해밍 거리:

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

두 점이 직선으로 연결된 좌표계.

두 점이 직각으로 꺾인 두 선으로 연결된 좌표계(사각형의 대각 점처럼).

R에서 대치(Imputation)로 결측치 다루기

Gower 거리

숫자형, 요인형, 범주형 변수 세 가지가 각기 다른 색으로 강조된 모의 데이터 프레임.

R에서 대치(Imputation)로 결측치 다루기

Gower 거리

숫자형, 요인형, 범주형 변수가 각기 다른 색으로 강조된 모의 데이터 프레임. 각 변수 유형에서 해당 거리 측도(유클리드, 맨해튼, 해밍)로 화살표가 이어지며, 세 거리 측도는 결합된 Gower 거리의 타원으로 모입니다.

R에서 대치(Imputation)로 결측치 다루기

실습: kNN 대치

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
R에서 대치(Imputation)로 결측치 다루기

기부자 가중치 부여

  • 한 관측치에 대해 선택한 k 이웃 중 일부가 더 유사합니다.
  • 더 가까운 이웃에 더 큰 가중치를 둘 수 있습니다.
  • 가중치는 각 이웃까지의 거리의 역수로 하여 가중평균으로 집계합니다.
  • 이는 숫자형 변수 대치에만 가능합니다.
nhanes_imp <- nhanes %>% 
  kNN(variable = c("TotChol", "Pulse"),
      k = 5,
      numFun = weighted.mean,
      weightDist = TRUE)
R에서 대치(Imputation)로 결측치 다루기

변수 정렬

  • kNN은 변수를 하나씩 순회하며 대치합니다.
  • 매번 관측치 간 거리를 다시 계산합니다.
  • 첫 변수에 결측이 많다면, 두 번째 변수의 거리는 많은 대치값에 기반합니다.
  • kNN 실행 전 결측 수 오름차순으로 변수를 정렬하는 것이 좋습니다.
R에서 대치(Imputation)로 결측치 다루기

실습: 변수 정렬

vars_by_NAs <- nhanes %>% 
  is.na() %>%
  colSums() %>%
  sort(decreasing = FALSE) %>% 
  names()
nhanes_imp <- nhanes %>% 
  select(vars_by_NAs) %>% 
  kNN(k = 5)
R에서 대치(Imputation)로 결측치 다루기

kNN 대치를 연습해 봅시다!

R에서 대치(Imputation)로 결측치 다루기

Preparing Video For Download...