[Python] 데이터 전처리 - 스케일링
기계학습을 위한 input 데이터가 2개 이상일 경우, 각각의 parameter 별로 산포가 다양하다보면 특정 parameter 에 overfitting 되거나 가중치가 극적으로 나타날 수 있다.
예를 들어, a = [0.3, 0.5, 0.8, 0.6] 이고 b = [1000, 1500, 2000, 2500] 인 경우 a 보다 b 에서 편차가 수백배 이상 크기 때문에 모델은 b 데이터에 의해 결정될 수 밖에 없다.
따라서 각각의 parameter 가 독립적이라고 가정할 경우, 모두 동일한 scale 을 가질 수 있도록 전처리를 하여 모델에 학습시킬 필요가 있다.
sklearn.preprocessing 패기지를 이용하여 여러가지 scaler 모델을 사용할 수 있다.
우리는 흔하게 사용되는 3가지 scaler 에 대해 알아보자.
1. StandardScaler()
2. MinMaxScaler()
3. RobustScaler()
1. StandardScaler
정규화 하여 평균이 0, 분산이 1 을 가지는 정규분포로 변환한다.
일반적인 회귀, 분류, 텍스트, 이미지 처리 등 다양한 분야에 많이 사용되는 방식이다.
데이터가 가우스 분포를 따르고 이상치에 민감할 때 사용하면 좋다. (이상치의 영향을 적당히 받는다는 의미.)
X_scaled = (X - mean(X)) / std(X)
2. MinMaxScaler
각 특성의 최소값(min)과 최대값(max)을 각각 0과 1 사이로 조정하는 방법이다.
MinMaxScaler는데이터의 원래 분포를 변경하지 않는 장점이 있어서 기준이나 단위가 다른 각 특성에 대해 동일한 범위로 만들 수 있다.
데이터가 가우시안분포를 따르지 않을 때 사용하는게 유리하다.
그러나 이상치가 존재할 경우, max 혹은 min에 의해 결정되기 때문에 분포가 좁아지는 문제가 발생할 수 있다.
X_scaled = (X - min(X)) / (max(X) - min(X))
3. RobustScaler
median 및 사분위수 범위(IQR) 을 사용하여 feature 를 조정하는 방법이다.
이상치(Outlier)의 영향을 받지 않는 특징이 있다. 여기서 IQR 은 Q3-Q1 의 값을 의미한다.
이상치가 많이 포함되어 있는 금융, 경제, 환경 분야에서 일반적으로 사용된다고 한다.
X_scaled = (X - median(X)) / IQR(X)
※ 사용법
scaler 의 모델을 일단 선언한 후, 학습하고자하는 input 값으로 scaler 모델에 fit 진행한다.
이후 fitting 된 scaler 모델을 통해 x_train 과 x_test 를 모두 transform 하여 값을 조정시킨 후 학습과 평가를 진행하면 된다.
주의할 점은 train 데이터 기반의 scale 모델을 만든 후에 test 데이터를 동일한 scale 로 변환해야 한다.
(fit_transform 은 fit 과 transform 이 결합된 함수)
from sklearn.preprocessing import StandardScaler
# 표준 스케일러(평균 0, 분산 1)
scaler = StandardScaler()
# 설명변수 데이터 스케일링
scaler.fit(x_train)
x_train = scaler.transform(x_train)
x_test = scaler.transform(x_test)
'Python' 카테고리의 다른 글
[Python] 2D IDW Interpolation (2차원 역거리 가중치 보간법) (1) | 2023.06.11 |
---|---|
[Python] GridSearchCV 를 이용한 하이퍼파라미터 최적값 찾기 (0) | 2023.03.19 |
[Python] Random Forest 최적화 방법 (0) | 2023.03.13 |
머신 러닝 알고리즘 : 선형 데이터 (Regression) - 뉴럴네트워크(MLP) (0) | 2023.03.09 |
머신 러닝 알고리즘 : (Regression) - 랜덤포레스트 (0) | 2023.03.09 |