본문으로 건너뛰기
실습하기

특성 스케일링과 전처리

머신러닝에서 모델 성능은 데이터 전처리(Preprocessing)에 크게 좌우됩니다.

일반적인 전처리 방법

  • 범주형 변수 인코딩: 문자열 레이블을 숫자 값으로 변환
  • 결측값 처리: 누락된 값을 대체하거나 제거
  • 특성 변환: 로그 변환, 다항식 변환 등 수학적 변환을 적용해 데이터 분포를 개선
  • 특성 스케일링: 데이터를 정규화(Normalization) 또는 표준화(Standardization)해 비슷한 범위로 변환

특히 특성 스케일링(Feature Scaling)은 서로 다른 단위를 가진 데이터를 동일한 스케일로 맞추어 모델이 더 효율적으로 학습하도록 돕습니다.

예를 들어, 다음과 같은 데이터가 있다고 가정해 봅시다.

예시 데이터프레임
import numpy as np
import pandas as pd

# 예시 데이터프레임
df = pd.DataFrame({
"height": [150, 160, 170, 180, 190],
"weight": [50, 65, 80, 90, 120]
})

print(df)
# 출력
# height weight
# 0 150 50
# 1 160 65
# 2 170 80
# 3 180 90
# 4 190 120

위 데이터에서 키는 cm 단위로 측정되었고, 몸무게는 kg 단위로 측정되었습니다.

이 데이터를 사용해 모델을 학습하려면 두 특성을 동일한 단위로 맞춰야 합니다.

이를 위해 특성 스케일링을 사용할 수 있습니다.

특성 스케일링 적용
from sklearn.preprocessing import StandardScaler, MinMaxScaler

X = df[["height", "weight"]]

# 표준화 (평균=0, 표준편차=1)
scaler_standard = StandardScaler()
X_standard = scaler_standard.fit_transform(X)

# 정규화 (범위 [0, 1])
scaler_minmax = MinMaxScaler()
X_minmax = scaler_minmax.fit_transform(X)

print("표준화 결과:", X_standard)
print("정규화 결과:", X_minmax)

표준화 결과 (StandardScaler)

키(cm)몸무게(kg)
0-1.414-1.152
1-0.707-0.577
20.0000.000
30.7070.385
41.4141.345

평균을 0, 표준편차를 1로 맞추어 분포를 유지하면서 스케일을 조정합니다.


정규화 결과 (MinMaxScaler)

키(cm)몸무게(kg)
00.000.00
10.250.23
20.500.46
30.750.62
41.001.00

모든 값을 0과 1 사이로 압축해 특성 간 스케일을 동일하게 맞춥니다.


올바른 스케일링 선택하기

  • 표준화(Standardization)

    • 평균을 0, 표준편차를 1로 맞추어 데이터의 분포를 정규화
    • 정규분포를 가정하는 알고리즘에서 주로 사용
    • 예: 로지스틱 회귀, 선형 회귀, SVM
  • 정규화(Normalization)

    • 데이터 값을 [0, 1] 범위로 압축
    • 거리 기반 알고리즘에서 주로 사용
    • 예: KNN, 신경망

다음 내용이 궁금하다면?

코드프렌즈 PLUS 멤버십 가입 or 강의를 등록해 주세요!