반응형
데이터 분석과 머신러닝에서 데이터 전처리는 모델의 성능을 크게 좌우하는 중요한 과정이다. 특히, 변수의 범위가 서로 다를 경우 특정 변수가 모델 학습에 과도한 영향을 미칠 수 있다. 이를 방지하기 위해 사용하는 대표적인 기법이 표준화(Standardization)와 정규화(Normalization)이다. 이번 글에서는 표준화와 정규화의 개념, 차이점, 적용 방법을 설명하고, 실습 코드와 함께 분석 방법을 소개하겠다.
1. 표준화(Standardization)란?
1.1 표준화의 개념
표준화(Standardization)는 데이터의 평균을 0, 표준편차를 1로 변환하는 기법으로, 서로 다른 단위를 가진 데이터를 동일한 척도로 변환하는 데 사용된다. 특히, 선형 회귀, 로지스틱 회귀, SVM과 같은 기법에서 중요하게 사용된다.
1.2 표준화 공식
표준화는 다음 공식을 사용하여 계산된다:
$$X_{standardized} = \frac{X - \mu}{\sigma}$$
- \(X\) : 원본 데이터
- \(\mu\) : 평균
- \(\sigma\) : 표준편차
1.3 표준화 적용 예제 및 데이터 분포 시각화
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
plt.rcParams['font.family'] ='Malgun Gothic'
plt.rcParams['axes.unicode_minus'] =False
# 데이터 생성
np.random.seed(42)
feature1 = np.random.randint(80, 150, 100) # 80~150 사이의 값
feature2 = np.random.randint(1800, 3000, 100) # 1800~3000 사이의 값
df = pd.DataFrame({"Feature1": feature1, "Feature2": feature2})
# 표준화 적용
scaler = StandardScaler()
standardized_data = scaler.fit_transform(df)
# 표준화 적용 전후 데이터 분포 시각화
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
axes[0].hist(df.values, bins=15, label=["Feature1", "Feature2"], alpha=0.7)
axes[0].set_title("표준화 전 데이터 분포")
axes[1].hist(standardized_data, bins=15, label=["Feature1", "Feature2"], alpha=0.7)
axes[1].set_title("표준화 후 데이터 분포")
plt.legend()
plt.show()
2. 정규화(Normalization)란?
2.1 정규화의 개념
정규화는(Normalization)는 데이터를 특정 범위(일반적으로 0과 1)로 변환하는 기법이다. 이는 거리 기반 알고리즘(예: KNN, K-Means, 신경망)에서 특히 유용하다.
2.2 정규화 공식
Min-Max Scaling을 이용한 정규화는 다음 공식으로 계산된다:
$$X_{normalized} = \frac{X - X_{\min}}{X_{\max} - X_{\min}}$$
- \(X_{min}\) : 데이터의 최소값
- \(X_{max}\) : 데이터의 최대값
2.3 정규화 적용 예제 및 데이터 분포 시각화
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
plt.rcParams['font.family'] ='Malgun Gothic'
plt.rcParams['axes.unicode_minus'] =False
# 데이터 생성
np.random.seed(42)
feature1 = np.random.randint(80, 150, 100) # 80~150 사이의 값
feature2 = np.random.randint(1800, 3000, 100) # 1800~3000 사이의 값
df = pd.DataFrame({"Feature1": feature1, "Feature2": feature2})
# 정규화 적용
scaler = MinMaxScaler()
normalized_data = scaler.fit_transform(df)
# 정규화 적용 전후 데이터 분포 시각화
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
axes[0].hist(df.values, bins=10, label=["Feature1", "Feature2"], alpha=0.7)
axes[0].set_title("정규화 전 데이터 분포")
axes[1].hist(normalized_data, bins=10, label=["Feature1", "Feature2"], alpha=0.7)
axes[1].set_title("정규화 후 데이터 분포")
plt.legend()
plt.show()
3. 표준화 vs 정규화
구분 | 표준화 (Standardization) | 정규화 (Normalization) |
변환 방식 | 평균을 0, 표준편차를 1로 조정 | 데이터 범위를 [0, 1] 또는 [-1, 1]로 조정 |
적용 모델 | 선형 회귀, 로지스틱 회귀, SVM | KNN, K-Means, 신경망 |
이상치 영향 | 비교적 덜 민감함 | 이상치에 민감함 |
4. 결론 및 요약
- 표준화는 평균과 표준편차를 이용해 데이터를 변환하며, 정규 분포를 따르는 데이터에 적합하다.
- 정규화는 데이터의 최소값과 최대값을 이용해 변환하며, 비정규분포 데이터 및 거리 기반 모델에 적합하다.
- 모델의 특성과 데이터의 분포에 따라 적절한 변환 기법을 선택하는 것이 중요하다.
반응형
LIST
'데이터 분석' 카테고리의 다른 글
데이터 전처리 (Data Preprocessing) (0) | 2025.03.12 |
---|---|
탐색적 데이터 분석 (EDA : Exploratory Data Analysis) (0) | 2025.03.10 |
범주형 데이터 처리 (0) | 2025.03.10 |
특징 선택(Feature Selection) (0) | 2025.03.10 |
데이터 분석에서 왜도, 첨도, 로그 변환이 중요한 이유 (0) | 2025.03.09 |