데이터 정규화

이수진·2023년 12월 2일
0
post-custom-banner

데이터 정규화는 데이터의 스케일을 조정하여 모델의 학습을 개선하고 예측 성능을 향상시키는 과정이다.
주로 머신러닝 모델에서 사용된다.

Min-Max Scaling (최소-최대 스케일링):

데이터를 특정 범위로 스케일링합니다. 일반적으로 0과 1 사이의 범위로 변환된다.

Xnorm=XXminXmaxXminX_{norm} = \frac {X-X_{min}}{X_{max} - X_{min}}

XX는 원래 데이터 포인트, XminX_{min}은 데이터의 최솟값, XmaxX_{max}는 데이터의 최댓값

from sklearn.preprocessing import MinMaxScaler

# 예시 데이터
data = {'feature1': [-1, -0.5, 0, 1],
        'feature2': [2, 6, 10, 18]}

df = pd.DataFrame(data)

# MinMaxScaler 객체 생성
scaler = MinMaxScaler()

# 데이터 변환 (fit과 transform을 한 번에 수행)
scaled_data = pd.DataFrame(scaler.fit_transform(df), columns=df.columns)

print("원본 데이터:")
print(df)

print("\nMinMax Scaling 후 데이터:")
print(scaled_data)

fit_transform 메서드를 사용해 변환된 데이터 얻는다.
참고로, 스케일러 객체를 사용하여 변환하는 것이 일반적이며, 새로운 데이터에 대해 스케일을 조정하려면 fit_transform 대신 fit 메서드를 먼저 호출한 다음 transform 메서드를 사용할 수 있다.

Standardization (표준화)

데이터를 평균이 0이고 표준편차가 1인 분포로 변환한다.

Xstd=XμσX_{std} = \frac {X-μ}{σ}

XX는 원래 데이터 포인트, μμ는 데이터의 평균, σσ는 데이터의 표준편차

from sklearn.preprocessing import StandardScaler

# 예시 데이터프레임
data = {'feature1': [-1, -0.5, 0, 1],
        'feature2': [2, 6, 10, 18]}

df = pd.DataFrame(data)

# StandardScaler 객체 생성
scaler = StandardScaler()

# 데이터프레임의 열을 표준화
standardized_df = pd.DataFrame(scaler.fit_transform(df), columns=df.columns)

print("원본 데이터:")
print(df)

print("\n표준화 후 데이터:")
print(standardized_data)

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

중앙값과 사분위 범위를 사용해 이상치의 영향을 최소화

Xrobust=XmedianIQRX_{robust} = \frac {X-median}{IQR}
from sklearn.preprocessing import RobustScaler

# 예시 데이터
data = {'feature1': [-1, -0.5, 0, 1],
        'feature2': [2, 6, 10, 18]}
df = pd.DataFrame(data)

# RobustScaler 객체 생성
scaler = RobustScaler()

# 데이터 변환 (fit과 transform을 한 번에 수행)
robust_scaled_data = pd.DataFrame(scaler.fit_transform(df), columns=df.columns)

print("원본 데이터:")
print(df)

print("\n로버스트 스케일링 후 데이터:")
print(robust_scaled_data)

로버스트 스케일링은 이상치에 영향을 받지 않고 스케일링을 수행하므로, 이상치가 있는 데이터셋에 유용하다.

Normalization (정규화)

각 데이터 포인트를 해당 벡터의 길이로 나누어 벡터를 단위 길이로 만든다.
주로 특징 벡터를 정규화한다.데이터의 방향(각도)이 중요할 때 유용하다.

Xnorm=XXX_{norm} = \frac{X}{∥X∥}
from sklearn.preprocessing import Normalizer

# 예시 데이터
data = {'feature1': [-1, -0.5, 0, 1],
        'feature2': [2, 6, 10, 18]}
df = pd.DataFrame(data)

# Normalizer 객체 생성
normalizer = Normalizer()

# 데이터 변환 (fit과 transform을 한 번에 수행)
normalized_data = pd.DataFrame(normalizer.fit_transform(df), columns=df.columns)

print("원본 데이터:")
print(df)

print("\n정규화 후 데이터:")
print(normalized_data)
profile
뇽안
post-custom-banner

0개의 댓글