Python/Sklearn

[Sklearn] 파이썬 정규화 Scaler 종류 : Standard, MinMax, Robust

jimmy_AI 2022. 2. 18. 20:40
반응형

파이썬 사이킷런 스케일러 사용 예제, 특징 정리

안녕하세요. 이번 글에서는 파이썬 scikit-learn 라이브러리에서

각 feature의 분포를 정규화 시킬 수 있는 대표적인 Scaler 종류인

StandardScaler, MinMaxScaler 그리고 RobustScaler에 대하여

사용 예제와 특징을 살펴보도록 하겠습니다.

 

여기서는 아주 간단한 예시로 0~10의 숫자가 차례로 있는 x1 column

0~10의 제곱수가 차례로 있는 x2 column의 정규화 결과를

각 Scaler에서 비교해보며 대략적인 특징을 살펴보겠습니다.

import pandas as pd
import numpy as np

df = pd.DataFrame({'x1' : np.arange(11), 'x2' : np.arange(11) ** 2})

df

 

 

StandardScaler : 평균 0, 표준편차 1 기준 정규화

StandardScaler는 각 열의 feature 값의 평균을 0으로 잡고,

표준편차를 1로 간주하여 정규화시키는 방법입니다.

 

사용 방법은 Scaler를 import한 뒤, 데이터셋을 fit_transform시켜주시면 됩니다.

이 사용법은 뒤에서 설명할 다른 Scaler에서도 동일합니다.

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
df_std = scaler.fit_transform(df)

pd.DataFrame(df_std, columns = ['x1_std', 'x2_std'])

각 데이터가 평균에서 몇 표준편차만큼 떨어져있는지를 기준으로 삼게 됩니다.

데이터의 특징을 모르는 경우 가장 무난한 종류의 정규화 중 하나입니다.

반응형

MinMaxScaler : 최솟값 0, 최댓값 1 기준 정규화

MinMaxScaler는 각 feature의 최솟값과 최댓값을 기준으로

0~1 구간 내에 균등하게 값을 배정하는 정규화 방법입니다.

from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()
df_minmax = scaler.fit_transform(df)

pd.DataFrame(df_minmax, columns = ['x1_minmax', 'x2_minmax'])

이상치에 민감하다는 단점이 있긴 하지만,

각 feature의 범위가 모두 0~1로 동등하게 분포를 바꿀 수 있다는 장점이 있습니다.

 

 

RobustScaler : 중앙값 0, 사분위수 IQR 기준 정규화

RobustScaler는 각 feature의 median(Q2)에 해당하는 데이터를 0으로 잡고,

Q1, Q3 사분위수와의 IQR 차이 만큼을 기준으로 정규화를 진행합니다.

공식 : (데이터 값 - Q2) / (Q3 - Q1)

from sklearn.preprocessing import RobustScaler

scaler = RobustScaler()
df_robust = scaler.fit_transform(df)

pd.DataFrame(df_robust, columns = ['x1_robust', 'x2_robust'])

해당 정규화 방법은 이상치에 강한 특징을 보이기에 RobustScaler라는 이름이 붙었으며,

이상치가 많은 데이터를 다루는 경우 유용한 정규화 방법이 될 수 있습니다.