어떻게 언제 왜 Normalize Standardize Rescale 해주는지??!

2019. 5. 18. 08:29관심있는 주제/분석 고려 사항

728x90

도움이 되셨다면, 광고 한번만 눌러주세요.  블로그 관리에 큰 힘이 됩니다 ^^

 
  • Rescaling
    • 데이터의 측정 단위를 변화시키고 싶을 때 상수를 빼고 나누는 것을 의미합니다.
    • 예를 들어 온도를 섭씨에서 화씨로 변경하는 것과 같은 행위입니다.
  • Normalizing
    • 데이터의 분포를 맞춰주는 것입니다.
    • 전체 데이터를 (0,1)로 하는 것과 같은 행위입니다.
  • Standardizing
    • 평균을 빼고 편차로 나눈 값입니다.
    • 어떤 데이터가 Gaussian Distribution을 따를 때 평균을 빼고 편차를 나눠서 Standard Normal N(0,1)로 만들어주는 것입니다.
    • 만약 기존 데이터 분포가 Gaussian Distribution을 따르지 않을 경우에는 표준화를 진행해도 분포 자체의 형태는 변하지 않은 상태에서 평균이 0이고 표준편차가 1의 통계량 값을 가지는 분포가 됩니다(location과 scale만 변환)
      • (oo님의 댓글을 참고)

 

왜 변수를 Standardize / Normalize를 해야할까요?

 

Standardization

서로 다른 단위가 있을 때, 중심이 0이고 편차가 1인 분포로 만드는 것은 중요합니다.

다른 편차로 있는 변수들은 변수별로 공평하기 기여하지 못하게 하고 Bias를 생기게 할 수 있습니다.

 

예)

어떤변수는 0 ~ 1000 / 어떤 변수는 0 ~ 1 이렇게 됬을 때 한 변수의 가중치가 1000배가 되는 것을 Standardization을 통해서 해결 할 수 있습니다.

 

Normalization

Numerical Value를 변수의 범위를 왜곡하지 않고 공통 Scale로 변경시켜주는 것입니다.
머신러닝에서 굳이 Normalization을 할 필요가 없다고 합니다. 그것은 다른 범위에 변수가 있을 때 할 필요가 있다고 합니다. 
(위에 꺼랑 차이가 멀까요?)

 

예) 나이, 수입이라는 변수가 있는데, 나이(0~100) 돈(100000~)  돈은 나이보다 1000배보다 크다 .
이것을 다중 회귀 분석을 했을 때 돈의 큰 단위 때문에 본질적으로 영향을 더 받을 것입니다. 
하지만 이러한 것이 돈 때문에 예측할 수 있게 된 y값에 대해서는 반드시 중요하지 않을 수 있습니다.
따라서 동일한 범위로 가져오고 데이터를 표준화해야 합니다.

 

코드

그래서 기대했던 대로 평균은 0이 되고 표준편차는 1이 되게 하지만!
아라애에서 보면 Outlier에 영향을 받아서 2.3 , 3.6 같이 크게 나오는 것을 알 수 있습니다.

Standardization

## Standardization 

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler() 
data_scaled = scaler.fit_transform(data)


 

Normalization

Standardization과 달리 0 ~ 1로 만들어주기 때문에 범위를 명확히 정해줄 수 있습니다. 

Outlier의 영향을 억제하기보다는 더 작은 표준편차를 만드는 효과정도로 있습니다.

그래서 결국 Outlier에 강하게 영향을 받을 수 있는 구조가 됩니다 

## Normalization (Min-Max Scalar)  ( 0 ~ 1 )

from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler() 
data_scaled = scaler.fit_transform(data)

위에와는 달리 min,max를 정해놓은 0 , 1 로 만들 수 있습니다.

 

 

Robust Scalar (Scaling to median and quantiles) 

from sklearn.preprocessing import RobustScaler
scaler = RobustScaler() 
data_scaled = scaler.fit_transform(data)

“How, When and Why Should You Normalize/Standardize/Rescale Your Data?” by Swetha Lakshmanan https://link.medium.com/aPQukRK9LW
728x90