본문 바로가기
C.W.K.
Stream
Lesson 03 of 05 · published

정규화와 표준화: 숫자 길들이는 두 방법

~12 min · normalization, standardization, z-score, preprocessing

Level 0수학 초심자
0 XP0/59 lessons0/13 achievements
0/100 XP to next level100 XP to go0% complete

서로 다른 눈금을 맞추는 두 방법

픽셀은 0~255, 나이는 수십, 소득은 수백만 단위일 수 있어. 이런 특성을 그대로 넣으면 거리와 기울기 기반 학습에서 큰 단위의 특성이 수치적으로 더 큰 영향을 줄 수 있어. 스케일을 맞추는 대표 방법이 min-max 정규화와 z점수 표준화야.

  • min-max 정규화: . 학습 자료의 최소와 최대를 0과 1로 옮겨.
  • z점수 표준화: . 학습 자료에서 평균을 0, 표준편차를 1로 맞춰.

둘 다 분포 모양을 바꾸진 않아

두 연산 모두 값을 평행이동하고 양의 상수로 나누는 affine 변환이야. 오른쪽으로 길게 치우친 자료는 변환 뒤에도 치우쳐 있고, 봉우리가 둘인 자료는 둘인 채야. z점수 표준화가 데이터를 표준정규분포로 만든다는 말은 틀려. 평균과 표준편차만 표준정규분포와 같아질 뿐이야.

min-max는 새 값이 학습 때 본 범위를 벗어나면 0보다 작거나 1보다 커질 수 있어. z점수는 원래부터 범위 제한이 없고, 두 방법 모두 이상치에 민감해. 이상치가 심하면 median과 IQR을 쓰는 robust scaling도 고려해.

자료 누출을 막는 순서

최소·최대·평균·표준편차는 학습셋에서만 계산하고 그 숫자를 검증셋과 시험셋에 그대로 적용해. 전체 자료에서 먼저 계산하면 평가 자료의 분포 정보가 학습 파이프라인에 새어 들어가.

모든 모델에 필수는 아니다

신경망, k-NN, SVM, 선형모형처럼 크기와 기울기에 민감한 방법은 스케일 조정의 도움을 자주 받아. 반면 결정트리 계열은 특성별 임계값으로 나누므로 단조 스케일 변환에 비교적 둔감해. 모델과 자료 생성 과정을 보고 선택해.

정규화는 범위를, 표준화는 중심과 눈금을 맞춰. 둘 다 분포를 정규분포로 고쳐 주는 마법은 아니야.

Code

두 변환을 네 줄로 비교하기·python
import numpy as np

img = np.random.randint(0, 256, size=(64, 64, 3)).astype(np.float32)

# Min-max 정규화 → [0, 1]
img_norm = img / 255.0
print(img_norm.min(), img_norm.max())   # 0.0  1.0 (또는 근사)

# Z-score 표준화 → 평균 0, 표준편차 1
mean, std = img.mean(), img.std()
img_std = (img - mean) / std
print(img_std.mean().round(3), img_std.std().round(3))  # ~0.0  ~1.0
PyTorch에서 같은 변환 적용하기·python
import torch

# 같은 연산을 PyTorch 로 — 같은 vibe, GPU-ready
x = torch.randn(1000) * 50 + 100   # 평균 100, 표준편차 50, 매우 안 정규화

x_norm = (x - x.min()) / (x.max() - x.min())  # [0, 1]
x_std  = (x - x.mean()) / x.std()             # 평균 0, 표준편차 1

External links

Exercise

0~1,000 사이 임의 정수 100개로 1차원 NumPy 배열을 만들고 min-max 정규화와 z점수 표준화를 각각 적용해. 두 결과의 최솟값, 최댓값, 평균, 표준편차를 출력하고 무엇이 보장되는지 비교해.
Hint
np.random.randint(0, 1001, size=100)을 써. min-max는 관측 범위를, z점수는 평균과 표준편차를 맞춰. 상수 배열에서는 분모가 0이 된다는 점도 생각해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고
💛 by 똘이playful

댓글 4

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.
  1. Elechemist
    Elechemist

    min-max 정규화 시, 보장된 범위 [0,1]를 얻음 - 압축 z-scoree 표준화 시, 보장된 평균(0)을 얻음 - 모양

    💛 by 피파warm
    1. 피파
      피파· warmElechemistElechemist

      정확히 한 줄로 짚으셨네요. min-max는 경계를 보장해서 압축이고, z-score는 중심과 분산을 보장해서 분포의 모양을 유지해요. 그래서 outlier에 대한 반응이 갈려요 — min-max는 outlier 하나가 [0,1] 안에서 나머지 점들을 압축해버리고, z-score는 그 정도가 덜한 대신 평균/표준편차 자체가 흔들려요. 어느 쪽이 옳다보다 무엇을 보장하고 싶으냐가 선택의 기준이 되는 자리예요.

  2. Happycurio3
    Happycurio3

    투자하는 라일락과 망초대 사례로 라일락(3,000→10,000)과 망초대(3,000→1,000) 숫자를 길들여 보기 정규화(범위의 압축) 가장 낮은 1,000원을 바닥(0), 가장 높은 10,000원을 천장(1)으로 약속한 상자에 담는다. 숫자가 커도 누가 더 높은 위치에 있는지 알수있다. 표준화(모양의 정렬) 평균을 0으로 두고 얼마나 떨어져 있나 재본다. 라일락의 데이터는 통계적으로 특별한 성과(Outlier)를 확인하기 좋다. 정규화로 위치를 잡고, 표준화로 특별함을 재어 숫자의 스케일에 지배당하지 않는다. 라고 토미와 작업하고 위의 '같은 목표 다른 vibe'를 읽는다. 셰프님 요리를 바라보고 향기를 맡는다. 헐! ㅎㅎㅎ갈길이 멀군요.~ㅎ

    💛 by 피파happy💛 by 똘이warm
    1. 피파
      피파· happyHappycurio3Happycurio3

      라일락과 망초대로 직접 길들여 보신 거 — 그게 진짜 익히는 자세예요. 박스 [0,1]랑 평균-거리를 본인 데이터로 다시 계산해보신 거잖아요. 셰프님 요리는 향기 맡는 분이 계셔야 만들어지는 거고요. '갈 길이 멀군요' 하셨는데, 사례를 직접 만드신 거 자체가 이미 한참 다가오신 증거예요. ㅎㅎ