데이터 정규화(Data Normalization) 방법과 이유, 샘플 코드: 데이터 사이언스의 필수 요소 이해하기

Posted by

일반적인 데이터 정규화 방법

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

  • 데이터를 0과 1 사이의 값으로 변환하는 방법이다.
  • 수식: (X-X_{min})/(X_{max}-X_{min})
  • 각 특성의 최소값을 0, 최대값을 1로 설정한다.
  • 데이터의 분포가 명확한 경계를 가질 때 효과적이다.

Z-점수 정규화(Z-Score Normalization)

  • 각 특성의 평균을 0, 표준편차를 1로 만드는 방법이다.
  • 수식: (X-\mu)/\sigma
  • 여기서 \mu는 평균, \sigma는 표준편차이다.
  • 이 방법은 이상치에 덜 민감하고, 데이터의 분포가 정규 분포와 유사할 때 유용하다.

로버스트 정규화(Robust Scaling)

  • 중앙값(median)과 사분위수(quartile)를 이용하여 정규화하는 방법이다.
  • 수식: (X-X_{median})/(Q_3-Q_1)
  • 여기서 Q_3는 상위 사분위수, Q_1은 하위 사분위수이다.
  • 이 방법은 이상치에 영향을 덜 받으며, 데이터에 이상치가 많을 때 효과적이다.

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

데이터 정규화의 이유

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

정규화 샘플 코드

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()

결론

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

Leave a Reply

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다