[ML/preprocessing] Data Scaling (데이터 스케일링)
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이 되도록 스케일링