Data Normalization Methods size 데이터 정규화란? 다양한 정규화 방법 완전 정리 (샘플 코드 포함) AI Research, Data Science

데이터 정규화란? 다양한 정규화 방법 완전 정리 (샘플 코드 포함)

Posted by

데이터 정규화(Data Normalization)는 머신러닝 모델을 개발할 때 거의 필수적으로 사용되는 전처리 작업이다. 데이터의 크기(스케일)가 서로 다르면, 일부 변수의 영향력이 과도하게 커지거나 작아져 모델의 학습이 왜곡될 수 있다.

이 글에서는 Min-Max 정규화, Z-점수 정규화, 로버스트 스케일링의 개념과 수식, 그리고 샘플 코드와 시각화를 통해 차이점을 자세히 설명하고자 한다.


✅ 데이터 정규화란?

정규화란, 서로 다른 스케일을 가진 데이터의 범위를 통일하여,
모델이 각 특성(변수)을 동등하게 해석하고 학습할 수 있도록 돕는 전처리 기법이다.

정규화를 사용하는 이유

  1. 특성 간 스케일 차이 제거
    • 모든 특성이 동등한 범위를 가지도록 조정하여, 특정 피처가 모델에 과도한 영향을 주는 것을 방지한다.
  2. 모델 학습 속도 및 정확도 향상
    • 정규화를 하면 경사 하강법(Gradient Descent)과 같은 최적화 알고리즘이 빠르게 수렴한다.
  3. 이상치 영향 최소화
    • 특정 정규화 방식은 이상치의 영향을 줄여준다.
  4. 알고리즘 요건 충족
    • K-NN, K-Means, PCA 등 거리 기반 알고리즘은 정규화된 데이터를 전제로 설계되어 있다.

📊 정규화 방법별 비교와 수식

최소-최대 정규화(Min-Max Normalization)

  • 수식: (X-X_{min})/(X_{max}-X_{min})
  • 특징: 모든 데이터를 0~1 범위로 변환
  • 장점: 데이터 분포가 경계 내에 뚜렷할 때 유용
  • 단점: 이상치에 민감

Z-점수 정규화(Z-Score Normalization, 표준화)

  • 수식: (X-\mu)/\sigma
  • 특징: 평균을 0, 표준편차를 1로 변환
  • 장점: 이상치에 덜 민감
  • 활용 예: 정규분포를 따르는 데이터에 유용

로버스트 스케일링 (Robust Scaling)

  • 수식: (X-X_{median})/(Q_3-Q_1)
  • 특징: 중앙값과 사분위수를 사용
  • 장점: 이상치에 강한 정규화
  • 활용 예: 데이터에 극단값(Outlier)이 많을 때

정규화 방법에 따른 차이를 차트로 확인하기

데이터 정규화란? 다양한 정규화 방법 완전 정리 - 정규화 방법에 따른 차이

정규화 샘플 코드

import seaborn as sns

# 가상의 산포 데이터 A와 B 생성
np.random.seed(0)
data_A = np.random.normal(10, 2, 100)
data_B = np.random.normal(14, 3, 100)

# 데이터 프레임 생성
df = pd.DataFrame({'A': data_A, 'B': data_B})

# 최소-최대 정규화
df_min_max = pd.DataFrame(min_max_scaler.fit_transform(df), columns=['A', 'B'])

# Z-점수 정규화
df_standard = pd.DataFrame(standard_scaler.fit_transform(df), columns=['A', 'B'])

# 로버스트 정규화
df_robust = pd.DataFrame(robust_scaler.fit_transform(df), columns=['A', 'B'])

# 시각화
fig, axs = plt.subplots(4, 1, figsize=(10, 20))

# 원본 데이터
sns.kdeplot(data=df, ax=axs[0])
axs[0].set_title('Original Data')

# 최소-최대 정규화 데이터
sns.kdeplot(data=df_min_max, ax=axs[1])
axs[1].set_title('Min-Max Normalization')

# Z-점수 정규화 데이터
sns.kdeplot(data=df_standard, ax=axs[2])
axs[2].set_title('Z-Score Normalization')

# 로버스트 정규화 데이터
sns.kdeplot(data=df_robust, ax=axs[3])
axs[3].set_title('Robust Scaling')

plt.tight_layout()
plt.show()

데이터 정규화의 이유

  • 특성 간 스케일 조정: 서로 다른 스케일을 가진 데이터 특성(변수)들의 범위를 조정하여, 각 특성이 모델 학습에 미치는 영향을 동등하게 만든다.
  • 학습 효율성 향상: 특성들이 같은 스케일을 가짐으로써, 최적화 알고리즘이 더 빠르고 효과적으로 수렴할 수 있다.
  • 이상치 영향 최소화: 정규화를 통해 이상치의 영향을 줄일 수 있으며, 보다 안정적인 모델을 구축할 수 있다.
  • 알고리즘 요구사항 충족: 일부 머신러닝 알고리즘, 특히 거리 기반 알고리즘(예: K-최근접 이웃, K-Means)과 선형 모델은 특성들이 비슷한 스케일을 가질 때 최적의 성능을 발휘한다.

✅데이터 정규화는 선택이 아닌 필수

데이터를 정규화하는 것은 머신러닝과 데이터 분석에서 중요한 전처리 단계이다. 각 방법은 특정 상황과 데이터의 특성에 따라 적합하며, 데이터의 분포와 모델의 종류를 고려하여 적절한 정규화 방법을 선택해야 한다. 정규화를 통해 데이터를 표준화하면 모델의 학습 과정이 더 안정적이고 효율적이 되며, 더 나은 성능을 달성할 수 있다.


🔗 함께 보면 좋은 관련 시리즈

Leave a Reply

Your email address will not be published. Required fields are marked *