hyeori

특성 스케일 맞추기 본문

머신러닝

특성 스케일 맞추기

혜오리이 2024. 5. 8. 22:25

결정 트리와 랜덤 포레스트는 특성 스케일 조정 걱정 필요 X, scale 에 영향 받지 않는다.

대부분의 머신 러닝과 최적화 알고리즘은 특성의 스케일이 같을 때 성능 ↑

스케일이 다른 특성을 맞추는 대표적인 방법 두 가지

  1. 정규화 (normalization)
    • [0,1]
    • min_max scaling

from sklearn.preprocessing import MinMaxScaler

mms = MinMaxScaler()
X_train_norm = mms.fit_transform(X_train)
X_test_norm = mms.transform(X_test)

 

2. 표준화 (standardization)

  • 경사 하강법과 같은 최적화 알고리즘에 널리 사용된다.
  • 평균 : 0, 표준편차 : 1
  • min_max scaling에 비해 이상치에 덜 민감하다.

 

3. 사이킷런에서 특성 스케일을 조정하는 다른 방법 : RobustScaler

  • 이상치가 많이 포함된 작은 데이터셋을 다룰 때 추천한다.
  • 과대적합되기 쉬울 때 선택
  • feature 마다 독립적으로 작용, 1사분위수, 3사분위수 사용해서, 스케일을 조정한다.
  • 극단적인 값과 이상치에 영향을 덜 받는다.

4. MaxAbsScaler : 각 특성별로 데이터를 최대 절댓값으로 나눈다. 각 특성의 최댓값은 1이 된다. 전체 특성 [-1,1] 범위로 설정된다.

 

5. Normalizer 클래스와 normalize() 함수

  • 함수의 특성X, sample별로 정규화를 수행
  • 희소행렬 처리 가능
  • L2의 노름이 1이 되도록 정규화
from sklearn.preprocessing import Normalizer

nrm = Normalizer()
X_train_l2 = nrm.fit_transform(X_train)

ex_2f = np.vstack((ex[1:], ex[1:]**2))
ex_2f

l2_norm = np.sqrt(np.sum(ex_2f ** 2, axis=1))
print(l2_norm) # 2차원 [  ,  ] 형태로 출력
ex_2f / l2_norm.reshape(-1, 1) # 차원 바꾸기

 

L2 노름 공식 :