-
[머신러닝] Feature Scaling 피쳐 스케일링. 언제 어떤 Scaler를 써야할까? (Min-Max, 표준화, Robust Scaling)머신러닝 배우기 2023. 12. 11. 21:43
▶︎ 피쳐스케일링이 무엇인가요?
→ 여러 연속형 피쳐들의 값의 범위들을 일치시키거나 조절하는 것
▶︎ 피쳐 스케일링을 왜 해야 하나요?
→ 피쳐들 간에 범위 차이가 클 경우, 일부 알고리즘은 큰 값을 갖는 특성에 민감하게 반응할 수 있습니다. 그래서 모든 특성들에 대해 비슷한 수치 구간 내로 이동시키는 작업을 진행합니다.
→ 특히 경사하강법을 사용하여 해를 구하는 모델에서는 정규화를 해야합니다. 그 이유를 범위 차이가 큰 두 피쳐의 목적함수에 대한 등치선도를 2차원으로 생각해봅시다. 한쪽으로 긴 타원 형태가 될 것입니다. 두 피쳐의 경사하강의 속도가 다르기 때문에 최적해를 찾기 위해 여러 작업을 거쳐야 합니다. 하지만 정규화하여 원의 형태가 되었다면 두 피쳐에 대한 갱신 속도가 같아지면서 경사하강법을 통해 좀 더 빠르게 최적해를 찾을 수 있습니다.
▶︎ 모든 모델에서 해야하나요?
→ 아닙니다. 모든 모델에서 Feature Scaling은 반드시 필요한 것은 아닙니다. 예를 들어, 의사결정 트리나 랜덤 포레스트 같은 트리 기반 알고리즘들은 피쳐 범위에 영향을 받지 않아서 스케일링을 할 필요가 없습니다. 하지만, 대부분의 선형 모델이나 거리 기반의 알고리즘(서포트 벡터 머신(SVM), K-최근접 이웃)은 값의 범위와 가중치에 따라 민감하기 때문에 Feature Scaling이 필요합니다.
▶︎ Min-Max normalization
→ 데이터의 값을 [0, 1] 범위로 변환하는 스케일링.
→ outlier 값에 민감하다. 따라서 이상치가 있으면 이 방법을 쓰는 것은 적절하지 않습니다.
→ 데이터의 분포가 특정범위로 정해져있고 (예를 들어 성적은 0~100으로 정해져있음)
→ 원본 데이터들 사이의 간격/관계/거리를 보존하고 싶을 때,
→ 사용하는 알고리즘이 거리 기반일 때 적절합니다.
Min-Max normalization ▶︎ Standardization (표준화)
→ 데이터의 평균을 0으로, 표준편차를 1로 만드는 스케일링 방법. 따라서 정규분포를 따르지 않는 분포에 적용하면 정규분포로 바뀌어서 좋습니다.
→ outlier 값에 덜 민감하다. 따라서 데이터에 outlier가 있을 경우 사용하기 좋습니다.
Standardization ▶︎ Robust Scaling 로버스트 스케일링
→ 이상치의 영향을 최소화하기 위해, 데이터의 중앙화와 척도화를 수행하는 스케일링 기법
→ 이상치가 있는 데이터셋에서 사용. 데이터의 중심과 분포를 조절
→ 데이터의 중심을 나타내는 중간값(median)과 데이터의 분포를 나타내는 IQR(Interquartile Range)를 사용하여 스케일링을 한다.
→ 계산 순서
1. 중간값 기준으로 중앙화 : 각 특성에서 median을 빼서, 데이터의 median을 0으로 이동시킨다.
Xcentered=X−median(X)
2. IQR로 척도화 : 각 특성을 해당 특성의 IQR로 나눠줍니다. ( IQR = 제 1사분위수(Q1, 25th percentile)와 제 3사분위수(Q3, 75th percentile) 사이의 범위)
Xscaled=Xcentered / IQR(X)
from sklearn.preprocessing import StandardScaler, MinMaxScaler, RobustScaler # 예제는 표준화 사용. sc = StandardScaler() # X_train 의 평균과 표준편차를 구함, 학습은 꼭꼭 train 데이터로만 해야함!!! sc.fit(X_train) # transform 은 train, test 데이터 둘다 적용하여 변환함 X_train_scaled = sc.transform(X_train) X_test_scaled = sc.transform(X_test) # train 데이터는 fit과 transform을 한 번에 하기도 함. 절대 test 데이터는 안됨!! # X_train_scaled = scaler.fit_transform(X_train)
'머신러닝 배우기' 카테고리의 다른 글
[머신러닝] 클러스터링의 대표, K-means Algorithm (1) 2023.12.12 [머신러닝] HPO 최적의 하이퍼 파라미터 찾기 GridSearch 예제 (0) 2023.12.11 [머신러닝] SVM 서포트벡터머신 쉽게 이해하기 (1) 2023.12.11 [머신러닝] 변수가 모델에 얼마나 큰 영향을 끼치니? 확인하는 두가지 방법 feature importance, permutation importance (0) 2023.12.11 [머신러닝] 하이퍼파라미터와 AutoML (1) 2023.12.08