본문으로 바로가기

Data Scaling (normalization, standardization)

category Data/Data preprocessing 2021. 2. 19. 16:00

Data Scaling

1) 개요

    - tree 모델처럼 scale 조정이 필요없는 몇몇 모델을 제외하고 대부분의 머신러닝 알고리즘은 feature들의 scale이 맞을 때 성능이 좋을 확률이 높다.

    - 예를 들어, 2 개의 특성을 비교할 때 1번은 1 ~ 10, 2번이 1 ~ 10만이면 knn, perceptron 등 확률분포를 사용한 알고리즘은 scale (범위)이 큰 특성에 오차를 맞추어 가중치를 최적화 한다.

    - 따라서 특성의 단위나 범위가 다르기 때문에 이를 비교가 가능하도록 하는 것이다.

 

Normalization (정규화)

1) 개요

    - 특성 값의 범위를 [0, 1] 사이에 맞추는 것이다.

    - feature 내의 가장 작은 값은 0, 가장 큰 값이 1을 가진다.

 

2) Min-max scaler

$$x' = \frac{x - x_{min}}{x_{max} - x_{min}}$$

    - min-max scaler의 경우, 데이터 내에 outlier (이상치)에 민감하여 다른 샘플이 좁은 구간에 촘촘하게 위치한다.

    - 범위가 명확한 사람의 나이와 같은 데이터에 적용하는 것을 추천한다.

출처 : https://developers.google.com/machine-learning/data-prep/transform/normalization

 

3) Feature clipping

    - min, max value를 정하고 min-max scaler 실시

 

Standardization (표준화)

1) 개요

    - 최적화 알고리즘에 널리 사용

    - 특성의 평균을 0, 표준편차를 1로 하여 정규분포와 비슷한 특성을 가지도록 한다.

    - 가중치 학습을 편하게 하고 min-max scaler에 비해 이상치에 덜 민감하다.

 

2) StandardScaler

$$x' = \frac{x-\mu}{\sigma}$$

 

코드 예시

# Normalization
from sklearn.preprocessing import MinMaxScaler
mms = MinMaxScaler()
X_train_norm = mms.fit_transform(X_train)
X_test_norm = mms.transform(X_test)

# Standardization
from sklearn.preprocessing import StandardScaler
stdsc = StandardScaler()
X_train_std = stdsc.fit_transform(X_train)
X_test_std = stdsc.transform(X_test)

# equation example
ex = np.array([0, 1, 2, 3, 4, 5])
print('Nm: ', (ex-ex.min()) / (ex.max() - ex.min()))
print('Std: ', (ex - ex.mean())/ ex.std())


참고

머신러닝 교과서 (길벗)

developers.google.com/machine-learning/data-prep/transform/normalization

bskyvision.com/849

'Data > Data preprocessing' 카테고리의 다른 글

Sampling unbalanced data  (1) 2021.02.23
Kernel method  (0) 2021.02.22
Feature Extraction (PCA, LDA)  (0) 2021.02.21
Categorical variables encoding / mean, one-hot, label  (0) 2021.01.22
Feature selection (변수 선택)  (0) 2021.01.17