데이터 정규화(Scaling)가 필요한 이유

40 P
QUESTION 05 #401
머신러닝 학습 전에 데이터를 정규화(0~1 사이 값으로 변환)하는 가장 큰 이유는?
다음 중 옳은 것을 고르세요

데이터 정규화가 왜 필요할까?

문제 상황: 단위가 다른 데이터

사람 정보:
         나이   연봉
A씨:  [  30,   5000 ]
B씨:  [  25,   8000 ]
C씨:  [  35,   3000 ]
         ↑      ↑
      0~100   0~1억 (만원 단위)

나이는 0~100 사이인데, 연봉은 0~1억 사이입니다. 숫자 크기가 100만 배 차이!

정규화 없이 학습하면?

머신러닝 알고리즘은 "거리"나 "크기"로 데이터를 비교합니다.

A씨와 B씨 비교:
  나이 차이: |30 - 25| = 5
  연봉 차이: |5000 - 8000| = 3000

  → 컴퓨터: "연봉이 600배 더 중요해 보이네!"
  → 사실: 두 특성은 똑같이 중요함

비유: 시험 점수의 가중치

  • 국어: 100점 만점
  • 수학: 1000점 만점 (이상한 시험)

총점 계산하면 수학이 10배 더 중요하게 반영됩니다. 공정하지 않죠!

정규화(Min-Max Scaling)

모든 값을 0~1 사이로 변환합니다.

공식: (값 - 최솟값) / (최댓값 - 최솟값)

나이 [25, 30, 35]:
  25 → (25-25) / (35-25) = 0.0
  30 → (30-25) / (35-25) = 0.5
  35 → (35-25) / (35-25) = 1.0

연봉 [3000, 5000, 8000]:
  3000 → 0.0
  5000 → 0.4
  8000 → 1.0

이제 모든 값이 0~1 사이라서 공정한 비교가 가능합니다!

표준화(Z-Score) - 다른 방법

평균 0, 표준편차 1로 변환:

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

정규화가 필요한 알고리즘

알고리즘 정규화 필요? 이유
KNN(K-Nearest Neighbors) ✅ 필수 거리 기반
SVM(Support Vector Machine) ✅ 필수 거리 기반
신경망 ✅ 필수 학습 안정성
선형 회귀 ⚠️ 권장 안정성
결정 트리 ❌ 불필요 분기 기반
랜덤 포레스트 ❌ 불필요 분기 기반

실전 코드

from sklearn.preprocessing import MinMaxScaler

X = [[30, 5000], [25, 8000], [35, 3000]]

scaler = MinMaxScaler()
X_scaled = scaler.fit_transform(X)
print(X_scaled)
# [[0.5, 0.4 ],
#  [0.0, 1.0 ],
#  [1.0, 0.0 ]]

핵심 포인트

  • 단위가 다른 특성을 공평하게 비교하기 위함
  • 큰 숫자의 편향된 영향을 막기 위함
  • 학습이 더 안정적이고 빠르게 진행됨

💡 핵심: 정규화는 모든 특성에게 "공평한 기회"를 주는 작업입니다.