Scikit-Learn 을 활용한 데이터 전처리 기법

Beginner

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

소개

이 실습에서는 scikit-learn 에서 제공하는 전처리 기법들을 살펴볼 것입니다. 전처리는 모든 머신러닝 워크플로우에서 필수적인 단계로, 원시 데이터를 학습 알고리즘에 적합한 형식으로 변환하는 데 도움이 됩니다. 표준화, 스케일링, 정규화, 범주형 특징 인코딩, 누락된 값 임퓨팅, 다항식 특징 생성 및 사용자 정의 변환기와 같은 다양한 전처리 기법들을 다룰 것입니다.

VM 팁

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

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

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

표준화

표준화는 많은 머신러닝 알고리즘에서 일반적인 전처리 단계입니다. 특징의 평균을 0 으로, 분산을 1 로 변환합니다. scikit-learn 의 StandardScaler를 사용하여 표준화를 수행할 수 있습니다.

from sklearn.preprocessing import StandardScaler
import numpy as np

## 샘플 데이터 생성
X = np.array([[1., -1., 2.],
              [2., 0., 0.],
              [0., 1., -1.]])

## StandardScaler 초기화
scaler = StandardScaler()

## 학습 데이터에 대해 scaler 를 맞춤
scaler.fit(X)

## 학습 데이터 변환
X_scaled = scaler.transform(X)

## 변환된 데이터 출력
print(X_scaled)

스케일링

특정 범위로 특징을 스케일링하는 것은 또 다른 일반적인 전처리 기법입니다. 특징들이 서로 다른 스케일을 가지고 있고, 이들을 유사한 범위로 가져오고 싶을 때 유용합니다. MinMaxScalerMaxAbsScaler를 사용하여 스케일링을 수행할 수 있습니다.

from sklearn.preprocessing import MinMaxScaler, MaxAbsScaler
import numpy as np

## 샘플 데이터 생성
X = np.array([[1., -1., 2.],
              [2., 0., 0.],
              [0., 1., -1.]])

## MinMaxScaler 초기화
min_max_scaler = MinMaxScaler()

## 학습 데이터에 대해 fit 및 transform
X_minmax = min_max_scaler.fit_transform(X)

## 변환된 데이터 출력
print(X_minmax)

## MaxAbsScaler 초기화
max_abs_scaler = MaxAbsScaler()

## 학습 데이터에 대해 fit 및 transform
X_maxabs = max_abs_scaler.fit_transform(X)

## 변환된 데이터 출력
print(X_maxabs)

정규화

정규화는 개별 샘플의 노름 (norm) 을 1 로 조정하는 과정입니다. 데이터의 크기가 중요하지 않고 방향 (또는 각도) 만 관심 있는 경우에 일반적으로 사용됩니다. scikit-learn 의 Normalizer를 사용하여 정규화를 수행할 수 있습니다.

from sklearn.preprocessing import Normalizer
import numpy as np

## 샘플 데이터 생성
X = np.array([[1., -1., 2.],
              [2., 0., 0.],
              [0., 1., -1.]])

## Normalizer 초기화
normalizer = Normalizer()

## 학습 데이터에 대해 fit 및 transform
X_normalized = normalizer.fit_transform(X)

## 변환된 데이터 출력
print(X_normalized)

범주형 특징 인코딩

범주형 특징은 머신러닝 알고리즘에 사용되기 전에 숫자 값으로 인코딩되어야 합니다. scikit-learn 의 OrdinalEncoderOneHotEncoder를 사용하여 범주형 특징을 인코딩할 수 있습니다.

from sklearn.preprocessing import OrdinalEncoder, OneHotEncoder
import numpy as np

## 샘플 데이터 생성
X = [['male', 'from US', 'uses Safari'],
     ['female', 'from Europe', 'uses Firefox']]

## OrdinalEncoder 초기화
ordinal_encoder = OrdinalEncoder()

## 학습 데이터에 대해 fit 및 transform
X_encoded = ordinal_encoder.fit_transform(X)

## 변환된 데이터 출력
print(X_encoded)

## OneHotEncoder 초기화
onehot_encoder = OneHotEncoder()

## 학습 데이터에 대해 fit 및 transform
X_onehot = onehot_encoder.fit_transform(X)

## 변환된 데이터 출력
print(X_onehot.toarray())

누락된 값의 보간

데이터 세트에서 누락된 값은 머신 러닝 알고리즘에 문제를 일으킬 수 있습니다. scikit-learn 의 impute 모듈에서 제공하는 방법을 사용하여 누락된 값을 처리할 수 있습니다. 여기서는 누락된 값을 보간하기 위해 SimpleImputer를 사용합니다.

from sklearn.impute import SimpleImputer
import numpy as np

## 누락된 값이 있는 샘플 데이터 생성
X = np.array([[1., 2., np.nan],
              [3., np.nan, 5.],
              [np.nan, 4., 6.]])

## SimpleImputer 초기화
imputer = SimpleImputer()

## 학습 데이터에 대해 fit 및 transform
X_imputed = imputer.fit_transform(X)

## 변환된 데이터 출력
print(X_imputed)

다항식 특징 생성

입력 데이터의 비선형 특징을 고려하여 모델의 복잡성을 높이는 것이 때로는 유용합니다. scikit-learn 의 PolynomialFeatures를 사용하여 다항식 특징을 생성할 수 있습니다.

from sklearn.preprocessing import PolynomialFeatures
import numpy as np

## 샘플 데이터 생성
X = np.array([[0, 1],
              [2, 3],
              [4, 5]])

## PolynomialFeatures 초기화
poly = PolynomialFeatures(2)

## 학습 데이터에 대해 fit 및 transform
X_poly = poly.fit_transform(X)

## 변환된 데이터 출력
print(X_poly)

사용자 정의 변환기 생성

일부 경우, 기존 파이썬 함수를 데이터 정리 또는 처리를 돕는 변환기로 변환하고 싶을 수 있습니다. scikit-learn 의 FunctionTransformer를 사용하여 이를 달성할 수 있습니다.

from sklearn.preprocessing import FunctionTransformer
import numpy as np

## 사용자 정의 함수 생성
def custom_function(X):
    return np.log1p(X)

## FunctionTransformer 초기화
transformer = FunctionTransformer(custom_function)

## 샘플 데이터 생성
X = np.array([[0, 1],
              [2, 3]])

## 사용자 정의 함수를 사용하여 데이터 변환
X_transformed = transformer.transform(X)

## 변환된 데이터 출력
print(X_transformed)

요약

축하합니다! 데이터 전처리 랩을 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.