[기술면접] 정규화(Normalization)
Q. 정규화를 왜 해야할까요? 정규화의 방법은 무엇이 있나요?
- ❌ 정규화(Normalization) 는 데이터가 특정한 분포를 따르게 하려는 것이 아니라 범위를 조정하는데 목적이 있다.
* 데이터가 정규분포를 따르는지를 확인하는 것을 정규성(Normality) 검정이라고 합니다.
※ 정규화(Regularization) : 과적합을 방지하기 위해 추가적인 규제(L1- 가중치의 절대값의 합, L2 규제- 가중치의 제곱의 합을 비용함수에 추가)를 부여해 일반화 성능을 개선하는 것
1. 정규화(Normalization)란?
- 정규화는 각 데이터들의 범위를 일정하게 조절하여 피처들을 비슷한 스케일로 맞춰주는 것
2. 왜 해야할까?
- 피처의 크기 차이로 인해 편향되는 것을 줄이고 각 변수들의 영향을 균형있게 학습하여 모델 성능을 높이고,
- 불필요한 추가 연산을 줄여 모델의 학습 속도를 높이기 위해
1) 거리기반의 모델(KNN, SVM 등)에서는 큰 값 범위를 가진 피처가 더 큰 영향을 미치기 때문
정규화로 모든 피처가 동일한 범위에 위치하면 거리 계산이 더 균형있게 이루어 짐
2) 경사 하강법을 사용하는 모델
- 경사하강법은 손실 함수의 최소값을 찾기 위해 반복적으로 손실 함수의 기울기를 계산하고 가중치를 업데이트
이는 최적의 가중치가 결정될 때까지 반복되는데, 데이터 스케일이 맞지 않으면 특정 피처가 지나치게 큰 영향을 주어 최적의 값을 지나치며 비효율적인 반복이 발생할 수 있다.
* 경사하강법을 사용하는 모델들
- 선형 회귀: 경사 하강법을 통해 손실 함수(평균 제곱 오차)를 최소화하도록 가중치(회귀 계수)를 최적화
- 로지스틱 회귀: 확률적 경사 하강법(전체 데이터셋 대신 무작위로 선택한 한 개의 데이터 포인트를 이용해 손실의 기울기를 계산하는 방법)을 통해 손실 함수(로그 손실 함수)를 최소화하도록 가중치를 최적화
- 신경망(다층 퍼셉트론, CNN, RNN 등): 역전파를 통해 각 층의 가중치를 경사하강법으로 학습
- 서포트 벡터 머신(특히 커널SVM): 확률적 경사 하강법
- 행렬 분해 기반 추천 시스템: 사용자와 아이템의 잠재 요인을 학습하기 위해 경사하강법을 사용하여 손실 함수(RMSE)를 최소화
3. 정규화 방법
* 주의: 동일한 기준으로 정규화 시켜줘야 하므로 test는 새로운 fit을 하지 않고 train기준으로 transform만 할 것!
1) 최소-최대 정규화(Min-Max scaling): 각 변수의 최소값을 0, 최대값을 1로 변환
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scaled_X_train = scaler.fit_transform(X_train)
scaled_X_test = scaler.transform(X_test)
2) 표준화(Z-score Normalization): 데이터의 평균을 0, 표준편차를 1로 조정, 정규 분포를 따르는 경우 효과적
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
3) Robust Scaling: 중앙값을 중심으로 IQR을 사용, 이상치의 영향을 덜 받는다
from sklearn.preprocessing import RobustScaler
scaler = RobustScaler()
4) Max Abs Scaling: 각 값의 절대 최대값을 기준으로 모든값을 -1과 1사이로 스케일링
from sklearn.preprocessing import MaxAbsScaler
scaler = MaxAbsScaler()
※ 면접 질문 모음집: https://zzsza.github.io/data/2018/02/17/datascience-interivew-questions/