머신러닝을 할 때, 특성별로 데이터의 단위가 다르다면 어떻게 될까요?
변수 X1, X2, y가 존재한다고 가정합시다.
이런 경우에는, 변수 X1, X2가 y를 예측하는데 큰 영향을 주지 않는다고 생각할 수 있습니다. 또한, overflow, underflow, 발산, 수렴과 같은 문제도 발생할 수 있기에, 데이터 전처리 과정에서 데이터의 단위를 맞춰주는 데이터 스케일링 과정이 꼭 필요합니다. 데이터 스케일링을 하는 방법은 크게 4가지로 나뉩니다.
- Standard Scaler
- MinMax Scaler
- Robust Scaler
- MinAbs Sclaer
Standard Scaler는 특성들의 평균을 0, 분산을 1로 스케일링합니다.
-> 특성들을 정규분포로 변환!
from sklearn.preprocessing import StandardScaler
col_names = df.iloc[:, 1:-1].columns
scaler = StandardScaler()
df_standard = scaler.fit_transform(df.iloc[:, 1:-1])
standard = pd.DataFrame(df_standard, columns = col_names)
standard
MinMax Scaler는 데이터의 범위를 0과 1사이로 스케일링합니다.
from sklearn.preprocessing import MinMaxScaler
col_names = df.iloc[:,1:-1].columns
scaler = MinMaxScaler()
df_minmax = scaler.fit_transform(df.iloc[:,1:-1])
minmax = pd.DataFrame(df_minmax, columns = col_names)
minmax
Robust Scaler는 각 feature의 median(Q2)에 해당하는 데이터를 0으로 잡고,
Q1, Q3 사분위수와의 IQR 차이 만큼을 기준으로 정규화를 진행합니다.
from sklearn.preprocessing import RobustScaler
col_names = df.iloc[:,1:-1].columns
scaler = RobustScaler()
df_robust = scaler.fit_transform(df.iloc[:,1:-1])
robust = pd.DataFrame(df_robust, columns = col_names)
robust
from sklearn.preprocessing import MaxAbsScaler
col_names = df.iloc[:,1:-1].columns
scaler = MaxAbsScaler()
df_maxabs = scaler.fit_transform(df.iloc[:,1:-1])
maxabs = pd.DataFrame(df_maxabs, columns = col_names)
maxabs