Meiren

[ML/preprocessing] Data Scaling (데이터 스케일링) 본문

머신러닝(machine learning)

[ML/preprocessing] Data Scaling (데이터 스케일링)

meiren 2022. 11. 29. 18:54

When?

데이터의 값이 너무 크거나 너무 작은 경우,

( = 특성별로 값의 스케일이 다르면)

모델 학습 과정에서 0으로 수렴하거나 무한히 발산해버림

 

 

What?

데이터 값의 범위(스케일)를 조정

  • scaler.fit() : train set에만 적용, 데이터 변환을 학습
  • scaler.transform() : 실제로 데이터 변환을 수행, train & teset 모두 적용

 

MinMax

- 모든 feature가 0 ~ 1사이에 위치

- 이상치가 존재할 경우, 매우 좁은 범위로 압축될 수 있음

 

 

Standard

- N ~ (0, 1)

- 각 feature의 평균이 0, 분산이 1

- 모든 feature들이 같은 스케일을 갖게됨

- 이상치로부터 영향을 많이 받음

- 데이터의 최소/최대값을 모를 떄 사용

 

 

Robust

- 모든 특성들이 같은 크기를 갖는다 (stadard와 유사)

- 모든 feature들이 같은 스케일을 갖게됨

 

- median, quartile

- 데이터의 중앙값 = 0, IQE = 1이 되도록 스케일링

- 이상치 영향을 최소화 시킴

 

 

Normalize

- standard, ronust, minmix가 각 coumns의 통계치를 이용하는 반면

- normalizer는 row마다 각각 정규화된다

- 유클리드 거리가 1이 되도록 데이터 조정(L2 Distance)

- spherical contour(구형윤곽)을 갖게되어 좀 더 빠른 학습과 과적합 확률 낮춤

 

 

 

Log

- 왜도와 첨도를 가진 변수를 > 정규분포에 가깝게 만들어 줌 > 왜도(비대칭)와 첨도(뾰족한정도)를 줄여줌

- 큰 수치를 같은 비율의 작은 수치로 변환 > 복잡한 계산이 간편해짐

- 데이터간 편차가 큰 경우 로그를 취하면 의미있는 결과 도출 가능성 커짐

 

- 정규성을 높이고 회귀분석 등에서 정확한 값을 얻기 위함

 

 

- 로그변환 전,

seaborn의 displot으로 왜도와 첨도 확인

sns.displot(df['col'])
np.log1p(df['col'])

 

 

 

 

 

 

 

 

 

 

  • MinMaxScaler : 데이터가 0과 1 사이에 위치하도록 스케일링
  • MaxAbsScaler : 데이터가 -1과 1 사이에 위치하도록 스케일링
  • StandardScaler : 데이터의 평균 = 0, 분산 = 1이 되도록 스케일링
  • RobustScaler : 데이터의 중앙값 = 0, IQE = 1이 되도록 스케일링