특성 스케일링과 전처리
머신러닝에서 모델 성능은 데이터 전처리(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, 신경망
- 데이터 값을
Quiz
0 / 1
머신러닝 모델에서 특성 스케일링을 적용하는 핵심 이유는 무엇인가요?
특성 스케일링이 없으면, KNN이나 경사하강법 기반 알고리즘 같은 모델은 숫자 범위가 특성에 편향될 수 있습니다.
더 작은
더 큰
동일한
무작위
학습 자료
AI 튜터
디자인
업로드
수업 노트
즐겨찾기
도움말