특성 스케일링과 전처리
머신러닝에서 모델 성능은 데이터 전처리(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 |
2 | 0.000 | 0.000 |
3 | 0.707 | 0.385 |
4 | 1.414 | 1.345 |
평균을 0, 표준편차를 1로 맞추어 분포를 유지하면서 스케일을 조정합니다.
정규화 결과 (MinMaxScaler)
키(cm) | 몸무게(kg) | |
---|---|---|
0 | 0.00 | 0.00 |
1 | 0.25 | 0.23 |
2 | 0.50 | 0.46 |
3 | 0.75 | 0.62 |
4 | 1.00 | 1.00 |
모든 값을 0과 1 사이로 압축해 특성 간 스케일을 동일하게 맞춥니다.
올바른 스케일링 선택하기
-
표준화(Standardization)
- 평균을
0
, 표준편차를1
로 맞추어 데이터의 분포를 정규화 - 정규분포를 가정하는 알고리즘에서 주로 사용
- 예: 로지스틱 회귀, 선형 회귀, SVM
- 평균을
-
정규화(Normalization)
- 데이터 값을
[0, 1]
범위로 압축 - 거리 기반 알고리즘에서 주로 사용
- 예: KNN, 신경망
- 데이터 값을
다음 내용이 궁금하다면?
코드프렌즈 PLUS 멤버십 가입 or 강의를 등록해 주세요!