2019. 5. 18. 08:29ㆍ관심있는 주제/분석 고려 사항
도움이 되셨다면, 광고 한번만 눌러주세요. 블로그 관리에 큰 힘이 됩니다 ^^
Neural Network를 학습하기 전에 Normalize를 왜 해줘야 할까?
medium을 보다가 평소에 관심을 가진 주제에 대한 글이 있어서 보기로 하였습니다. 단순 번역일 것 같으니, 원본은 아래에 링크를 남겼습니다! 실제로 기존에 뉴럴 넷을 학습시킬 때는 다 데이터를 normalize를 해..
data-newbie.tistory.com
일단은 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
코드
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)
![](https://blog.kakaocdn.net/dn/dMVnCc/btqvpASxnvC/rrxOcvhSoi443EXrbkrHh1/img.png)
위에와는 달리 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
'관심있는 주제 > 분석 고려 사항' 카테고리의 다른 글
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 |