누락된 값 임퓨테이션

Beginner

This tutorial is from open-source community. Access the source code

소개

많은 실제 데이터셋은 누락된 값을 포함하고 있으며, 이는 완전하고 수치적인 데이터를 가정하는 머신 러닝 알고리즘을 사용할 때 문제를 일으킬 수 있습니다. 이러한 경우, 사용 가능한 데이터를 최대한 활용하기 위해 누락된 값을 적절하게 처리하는 것이 중요합니다. 일반적인 전략 중 하나는 누락된 값을 데이터의 알려진 부분을 기반으로 채우는 것인, 이를 임퓨테이션 (imputation) 이라고 합니다.

이 튜토리얼에서는 파이썬의 인기 머신 러닝 라이브러리인 scikit-learn 을 사용하여 누락된 값을 임퓨테이션하는 다양한 전략을 살펴볼 것입니다.

VM 팁

VM 시작이 완료되면 왼쪽 상단 모서리를 클릭하여 Notebook 탭으로 전환하여 연습을 위한 Jupyter Notebook에 접근할 수 있습니다.

때때로 Jupyter Notebook 이 완전히 로드되기까지 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사를 자동화할 수 없습니다.

학습 중 문제가 발생하면 Labby 에 문의하십시오. 세션 후 피드백을 제공하면 문제를 신속하게 해결해 드리겠습니다.

필요한 모듈 가져오기

먼저, scikit-learn 라이브러리에서 필요한 모듈을 가져와야 합니다. 단변량 특징 임퓨테이션에는 SimpleImputer 클래스를, 다변량 특징 임퓨테이션에는 IterativeImputer 클래스를 사용할 것입니다.

import numpy as np
from sklearn.impute import SimpleImputer, IterativeImputer

SimpleImputer 를 이용한 단변량 특징 임퓨테이션

SimpleImputer 클래스는 단변량 방식으로 누락된 값을 임퓨테이션하기 위한 기본 전략을 제공합니다. 누락된 값을 상수 값으로 대체하거나, 각 열의 평균, 중앙값 또는 가장 빈번한 값을 사용하여 누락된 값을 임퓨테이션하는 등 다양한 전략을 선택할 수 있습니다.

평균 전략을 고려해 보겠습니다. SimpleImputer의 인스턴스를 생성하고 데이터에 맞춰 학습하여 임퓨테이션 전략을 학습합니다. 그런 다음 transform 메서드를 사용하여 학습된 전략에 따라 누락된 값을 임퓨테이션할 수 있습니다.

imp = SimpleImputer(strategy='mean')
X = [[1, 2], [np.nan, 3], [7, 6]]
imp.fit(X)
X_test = [[np.nan, 2], [6, np.nan], [7, 6]]
imputed_X_test = imp.transform(X_test)

IterativeImputer 를 이용한 다변량 특징 임퓨테이션

IterativeImputer 클래스는 누락된 값을 임퓨테이션하는 더욱 고급적인 방법입니다. 누락된 값이 있는 각 특징을 다른 특징의 함수로 모델링하고, 그 추정값을 임퓨테이션에 사용합니다. 반복적으로 특징 간의 관계를 학습하고, 이러한 관계를 기반으로 누락된 값을 임퓨테이션합니다.

imp = IterativeImputer()
X = [[1, 2], [3, 6], [4, 8], [np.nan, 3], [7, np.nan]]
imp.fit(X)
X_test = [[np.nan, 2], [6, np.nan], [np.nan, 6]]
imputed_X_test = imp.transform(X_test)

KNNImputer 를 이용한 최근접 이웃 임퓨테이션

KNNImputer 클래스는 k-최근접 이웃 접근 방식을 사용하여 누락된 값을 채우는 임퓨테이션을 제공합니다. 누락된 값이 있는 각 샘플에 대한 최근접 이웃을 찾고, 이웃의 값을 기반으로 누락된 특징 값을 임퓨테이션합니다.

from sklearn.impute import KNNImputer
nan = np.nan
X = [[1, 2, nan], [3, 4, 3], [nan, 6, 5], [8, 8, 7]]
imputer = KNNImputer(n_neighbors=2)
imputed_X = imputer.fit_transform(X)

특징 개수 유지

기본적으로 scikit-learn 임퓨터는 누락된 값만 포함하는 열을 삭제합니다. 하지만, 데이터의 형태를 유지하기 위해 빈 특징을 유지해야 하는 경우가 있습니다. 이를 위해 keep_empty_features 매개변수를 True 로 설정하면 됩니다.

imputer = SimpleImputer(keep_empty_features=True)
X = np.array([[np.nan, 1], [np.nan, 2], [np.nan, 3]])
imputed_X = imputer.fit_transform(X)

MissingIndicator 를 이용한 임퓨테이션 값 표시

MissingIndicator 변환기는 데이터 세트에서 누락된 값의 존재를 나타내는 데 유용합니다. 임퓨테이션과 함께 사용하여 어떤 값이 임퓨테이션되었는지에 대한 정보를 보존하는 데 사용할 수 있습니다. 이 변환기는 데이터 세트에서 누락된 값의 존재를 나타내는 이진 행렬을 반환합니다.

from sklearn.impute import MissingIndicator
X = np.array([[-1, -1, 1, 3], [4, -1, 0, -1], [8, -1, 1, 0]])
indicator = MissingIndicator()
mask_missing_values_only = indicator.fit_transform(X)

요약

이 튜토리얼에서는 scikit-learn 을 사용하여 누락된 값을 임퓨테이션하는 다양한 전략을 배웠습니다. SimpleImputer를 사용한 단변량 특징 임퓨테이션, IterativeImputer를 사용한 다변량 특징 임퓨테이션, KNNImputer를 사용한 최근접 이웃 임퓨테이션, 특징 개수를 일정하게 유지하는 방법, 그리고 MissingIndicator를 사용하여 임퓨테이션된 값을 표시하는 방법을 살펴보았습니다. 이러한 기법들은 누락된 데이터를 처리하고 기계 학습 알고리즘을 불완전한 데이터 세트에 적용할 수 있도록 하는 귀중한 도구가 될 수 있습니다.