Table of Contents

ML

스케일링 (Scaling)

꼬꼬마코더 2024. 5. 28. 22:39
728x90

스케일링(Scaling)은 머신 러닝과 데이터 분석에서 특성(피처)들의 값을 일정한 범위로 조정하는 전처리 과정입니다. 데이터 스케일링을 통해 모델 학습이 더 빠르고 효율적으로 이루어지며, 특정 알고리즘의 성능이 향상될 수 있습니다. 스케일링이 중요한 이유는 각 특성의 크기나 범위가 달라서 발생하는 문제를 해결하기 위해서입니다.

주요 스케일링 방법

  1. 표준화 (Standardization)
    • 정의: 특성의 값을 평균이 0이고 표준편차가 1이 되도록 변환합니다.
    • 수식: ( z = \frac{x - \mu}{\sigma} ) 𝑧=𝑥−𝜇𝜎
      • ( x ): : 원본 특성 값
      • ( \mu ): : 특성의 평균값
      • ( \sigma ): : 특성의 표준편차
    • 장점: 표준화는 특성의 분포가 정규분포를 따를 때 특히 유용합니다.
  2. 정규화 (Normalization)
    • 정의: 특성의 값을 최소값이 0이고 최대값이 1이 되도록 변환합니다.
    • 수식: ( x' = \frac{x - x_{min}}{x_{max} - x_{min}} ) x=xmaxxminxxmin
      • ( x ): 원본 특성 값
      • ( x_{min} ): 특성의 최소값
      • ( x_{max} ): 특성의 최대값
    • 장점: 정규화는 특성 값의 범위가 다를 때 특히 유용합니다.
  3. 최대 절대값 스케일링 (MaxAbs Scaling)
    • 정의: 특성의 값을 절대값이 1이 되도록 변환합니다.
    • 수식: ( x' = \frac{x}{|x_{max}|} )  
      • ( x ): 원본 특성 값
      • ( |x_{max}| ): 특성의 절대값 중 최대값
    • 장점: 양수와 음수 값의 비율을 유지하면서 스케일링을 할 수 있습니다.
  4. 로버스트 스케일링 (Robust Scaling)
    • 정의: 특성의 중앙값이 0이 되고, IQR(Interquartile Range, 사분위 범위)가 1이 되도록 변환합니다.
    • 수식: ( x' = \frac{x - Q2}{Q3 - Q1} )
      𝑥′=𝑥−𝑄2𝑄3−𝑄1
      • ( x ): 원본 특성 값
      • ( Q2 ): 특성의 중앙값
      • ( Q1, Q3 ): 특성의 1사분위수와 3사분위수
    • 장점: 이상치(outlier)에 덜 민감합니다.

스케일링 적용 예시

import numpy as np
from sklearn.preprocessing import StandardScaler, MinMaxScaler, MaxAbsScaler, RobustScaler

# 예시 데이터
X = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# 표준화
scaler = StandardScaler()
X_standardized = scaler.fit_transform(X)
print("Standardized:\n", X_standardized)

'''
Standardized:
 [[-1.22474487 -1.22474487 -1.22474487]
 [ 0.          0.          0.        ]
 [ 1.22474487  1.22474487  1.22474487]]
 '''

# 정규화
scaler = MinMaxScaler()
X_normalized = scaler.fit_transform(X)
print("Normalized:\n", X_normalized)

'''
Normalized:
 [[0.  0.  0. ]
 [0.5 0.5 0.5]
 [1.  1.  1. ]]
 '''

# 최대 절대값 스케일링
scaler = MaxAbsScaler()
X_maxabs_scaled = scaler.fit_transform(X)
print("MaxAbs Scaled:\n", X_maxabs_scaled)

'''
MaxAbs Scaled:
 [[0.14285714 0.25       0.33333333]
 [0.57142857 0.625      0.66666667]
 [1.         1.         1.        ]]
 '''

# 로버스트 스케일링
scaler = RobustScaler()
X_robust_scaled = scaler.fit_transform(X)
print("Robust Scaled:\n", X_robust_scaled)

'''
Robust Scaled:
 [[-1. -1. -1.]
 [ 0.  0.  0.]
 [ 1.  1.  1.]]
 '''

스케일링의 필요성

  • 모델 학습 속도 향상: 스케일링을 통해 특성 값의 범위가 조정되면, 경사 하강법 등의 최적화 알고리즘이 더 빠르게 수렴할 수 있습니다.
  • 알고리즘 성능 향상: k-최근접 이웃(k-NN), 서포트 벡터 머신(SVM), 신경망(Neural Networks) 등 일부 알고리즘은 특성 값의 범위가 일치하지 않으면 성능이 저하될 수 있습니다.
  • 특성 중요도 균형: 스케일링을 통해 각 특성이 동일한 중요도로 반영되도록 할 수 있습니다. 그렇지 않으면 큰 범위를 가진 특성이 모델 학습에 과도한 영향을 미칠 수 있습니다.

요약

스케일링은 특성 값의 범위를 일정하게 조정하는 데이터 전처리 기법으로, 모델 학습의 효율성과 성능을 향상시킬 수 있습니다. 표준화, 정규화, 최대 절대값 스케일링, 로버스트 스케일링 등의 방법이 있으며, 각 방법은 특정 상황에서 유용하게 사용할 수 있습니다. 적절한 스케일링 방법을 선택하여 모델 성능을 최적화할 수 있습니다.

'ML' 카테고리의 다른 글

Classification에서 Loss Function(손실 함수)  (0) 2024.05.29
회귀(Regression)와 분류(Classification)  (0) 2024.05.28
최적화 알고리즘(Optimization Algorithms)  (0) 2024.05.28
Feature Selection  (0) 2024.05.28
모델 평가 방법  (0) 2024.05.28