데이터 정규화

최근 편집: 2023년 5월 12일 (금) 14:31

데이터 정규화(data normalization)는 데이터를 특정한 범위나 척도로 변환하는 것을 말한다. 일반적으로는 데이터의 분포를 표준화하거나 정규화하여 데이터 간의 크기 차이나 단위 차이를 제거하고, 데이터 분포를 정규분포에 가깝게 만드는 것을 목적으로 한다.

용도

  1. 데이터 분포의 스케일을 일정하게 유지할 수 있다. 이렇게 하면 모델이 입력 데이터의 크기나 단위 차이에 덜 민감해지고, 학습 과정이 안정화될 수 있다.
  2. 모델의 성능을 향상시킬 수 있다. 데이터를 정규화하면 모델이 입력 데이터 간의 상관 관계를 더 잘 파악할 수 있게 되므로, 학습 성능이 향상될 수 있다.
  3. 모델의 일반화 성능을 향상시킬 수 있다. 데이터를 정규화하면 모델이 노이즈에 덜 민감해지고, 일반화 성능이 향상될 수 있다.

방법

정규화 방법에는 여러가지가 있으며, 주로 데이터의 평균과 분산을 이용하여 표준화(Standardization)하거나, 최소값과 최대값을 이용하여 정규화(Min-Max normalization)하는 등의 방법이 있다. 이외에도 정규화 방법은 다양하므로, 데이터의 특성과 모델에 따라 적절한 정규화 방법을 선택해야 한다.

표준화

표준화(Standardization)는 데이터를 평균이 0이고 표준편차가 1인 표준정규분포로 변환하는 방법이다. 이 방법은 다음과 같이 수식으로 나타낼 수 있다.

(x는 원래 데이터, μ는 평균, σ는 표준편차, z는 정규화된 데이터)

이 수식을 파이썬 코드로는 다음과 같이 구현할 수 있다.

import numpy as np

x = np.array([1, 2, 3, 4, 5])
mu = np.mean(x) # 평균
sigma = np.std(x) # 표준편차
z = (x - mu) / sigma # 정규화된 데이터

NumPy에서 표준화를 구현하는 방법으로는 다음이 있다.

import numpy as np

X = np.array([[1, 2], [3, 4], [5, 6], [7, 8]]) # 입력 데이터 정의
X_scaled = (X - np.mean(X, axis=0)) / np.std(X, axis=0) # 입력 데이터 표준화

print(X_scaled)

scikit-learn의 StandardScaler 모듈을 이용하면 다음과 같이 StandardScaler 모듈을 이용하여 데이터를 표준화할 수 있다.

from sklearn.preprocessing import StandardScaler

X = [[1, 2], [3, 4], [5, 6], [7, 8]] # 입력 데이터 정의
scaler = StandardScaler() # StandardScaler 객체 생성
X_scaled = scaler.fit_transform(X) # 입력 데이터 표준화

print(X_scaled)

최소-최대 정규화

최소-최대 정규화(Min-Max Normalization)는 데이터를 최소값이 0, 최대값이 1이 되도록 스케일링하는 방법이다.

import numpy as np

# 입력 데이터를 정의합니다.
X = np.array([[1, 2], [3, 4], [5, 6], [7, 8]])

# Min-Max normalization을 적용합니다.
X_normalized = (X - np.min(X, axis=0)) / (np.max(X, axis=0) - np.min(X, axis=0))

print(X_normalized)