어떻게 언제 왜 Normalize Standardize Rescale 해주는지??!
2019. 5. 18. 08:29ㆍ관심있는 주제/분석 고려 사항
도움이 되셨다면, 광고 한번만 눌러주세요. 블로그 관리에 큰 힘이 됩니다 ^^
보통 데이터를 분석 시, https://data-newbie.tistory.com/121
일단은 Neural Network를 학습을 시 킬 때, 좀 더 학습을 빠르고 안정되게 하기위해서 해주는데요!
이번에는 좀 더 넓은 범위에서 왜 Normalize , Standardize , Rescale 해주는 지 알아봅니다!
- 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
'관심있는 주제 > 분석 고려 사항' 카테고리의 다른 글
Dataset Shift에 대한 이해 (1) - Covariate Shift (0) | 2019.12.15 |
---|---|
PySyft and the Emergence of Private Deep Learning -?? (0) | 2019.06.08 |
Overfit? or dissimilar train and test? (medium 번역 및 생각) (2) | 2019.05.08 |
Feature engineering ( 글 리뷰 및 내 생각 ) (0) | 2019.05.06 |
Design Thinking에 대하여 (0) | 2019.05.06 |