🤩 Standardization & Normalization
포준화와 정규화에 대해서 알아보고, 파이썬을 통해서 간단한 예제 문제를 풀도록 하겠습니다.
파이썬 문제는 https://wikidocs.net/165631를 참고했습니다
문제
iris 데이터 셋에서, sepal length를 표준화 및 정규화해보세요. 이전과 이후의 차이를 시각화하여 비교해보세요.
베이스라인의 code here 을 채우세요.
베이스라인
from sklearn import datasets
import pandas as pd
import matplotlib.pyplot as plt
iris = datasets.load_iris() # 데이터 꺼내기
X = pd.DataFrame(iris.data, columns = iris['feature_names']) # pandas df로 변환
sepal_length = X['sepal length (cm)']
sepal_length_normalized = # code here
sepal_length_standarized = # code here
Input
fig, (ax1, ax2, ax3) = plt.subplots(ncols=3, figsize=(15,5))
ax1.hist(sepal_length, color='skyblue')
ax1.set_title('Original')
ax2.hist(sepal_length_normalized, color='skyblue')
ax2.set_title('Normalization')
ax3.hist(sepal_length_standarized, color='skyblue')
ax3.set_title('Standardization')
plt.show()
Output
베이스라인 ( 정답 - 더보기 클릭)
더보기
from sklearn import datasets
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np # 조금 편하게 하기위해서 numpy 라이브러리를 추가.
iris = datasets.load_iris() # 데이터 꺼내기
X = pd.DataFrame(iris.data, columns = iris['feature_names']) # pandas df로 변환
sepal_length = X['sepal length (cm)']
# 표준화 (Standardization)
sepal_length_standarized = (sepal_length - np.mean(sepal_length)) / np.std(sepal_length)
# 정규화 (Normalization)
sepal_length_normalized = (sepal_length - np.min(sepal_length)) / (np.max(sepal_length) - np.min(sepal_length))
표준화와 정규화에 알아보는 시간
1. 표준화 (Standardization)
- 평균을 0, 표준편차를 1로 맞추는 변환(정규 분포 형태로 데이터를 조정)
- 이상치에 덜 민감하며, 데이터의 실제 분포를 유지.
- 통계학에서 주로 사용
- 선형 모델(Linear Regression, Logistic Regression)이나 SVM(Support Vector Machine) 모델에 유용한 방법
- 수식: $ X = \frac{X - \overline{X}}{std(X)} $
2. 정규화 (Normalization)
- 최솟값을 0, 최댓값을 1로 맞추는 변환
- 데이터의 특정 범위를 강조하거나, 특정 알고리즘(KNN(K-Nearest Neighbor), NN(Neural Network)에서 성능 향상에 기여
- 딥러닝에서 주로 사용
- 수식: $ X = \frac{(X - min(X))}{max(X) - min(X)} $
3. 공통점
- 데이터의 분포 형태를 바꾸지 않고 값의 위치와 퍼진 정도만 수치적으로 변경
- 스케일링(Scaling)이라고도 부름
이 외에도 다양한 스케일링 방법이 존재하는데, 중앙값과 사분위수(IQR)를 활용하여 이상치에 강하게 데이터를 변환시켜주는 Robust Scaler, 데이터의 분위수(Quantile)를 기준으로 균등하게 분포하도록 변환 하여, 불균형 적인 데이터나, 특정 모델인(Decision Tree, Random Forest)에 성능향상을 기여하는 Quantile Transformer, 왜곡된 분포를 가진 데이터셋을 정규분포에 가깝게 변환하여 안정적인 학습을 돕는 PowerTransformer(https://ko-sick.tistory.com/32)와 같은 스케일러가 있습니다.
다만 모든 스케일러가 항상 무조건적으로 성능 향상을 보장하지는 않습니다. 스케일링 전후의 데이터의 분포를 확인하고, 모델 성능을 통해서 최적의 스케일러를 선택하여 사용하는게 좋습니다.
'공부 > 파이썬을 통한 기초통계학' 카테고리의 다른 글
Negative binomial distribution, 음이항 분포 (0) | 2025.02.27 |
---|---|
Approximation, 근사 (0) | 2025.02.25 |
Poisson Distribution, 포아송 분포 (0) | 2025.02.20 |
Binomial distribution, 이항 분포 (0) | 2025.02.19 |
Normal distribution, 정규 분포 (0) | 2025.02.18 |