본문 바로가기

Dev/Python

[Python] 데이터 스케일링 (표준화)

스케일링

  • 데이터셋을 정제할 때, 특성별로 데이터 스케일이 다르면 안되기 때문에 이 작업을 통해 모든 특성의 범위를 같게 만들어줘야함
  • 전체 데이터가 아닌 훈련 데이터에 대해서만 fit() 적용

 

scikit-learn에서 제공하는 스케일링 방법

1️⃣ StandardScaler()

  • 각 특성의 평균을 0, 분산을 1로 스케일링
  • 최솟값과 최댓값의 크기를 제한하지 않음
  • 회귀보다 분류에 유용
  • 데이터를 정규분포로 만듦
from sklearn.preprocessing import StandardScaler

# 객체 생성
scaler = StandardScaler()   

# 훈련데이터의 분포 저장
scaler.fit(df)

# 훈련 데이터 스케일링
scaler_scaled = scaler.transform(df)

2️⃣ RobustScaler()

  • 평균과 분산 대신에 중간값과 사분위값을 사용(중앙값 = 0 / IQR(1분위(25%) ~ 3분위(75%)) = 1)
  • 데이터가 넓게 분포할 수 있음
from sklearn.preprocessing import RobusterScaler

# 객체 생성
robust_scaler = RobustScaler()

# 분포 저장
robust_scaler.fit(df)

# 스케일링
robust_scaled = robust_scaler.transform(df)

3️⃣ MinMaxScaler()

  • 각 특성이 0과 1 사이에 위치하도록 스케일링
  • 최대값 = 1 / 최소값 = 0
  • 이상치에 취약함
from sklearn.preprocessing import MinMaxScaler

# 객체 생성
minmax_scaler = MinMaxScaler()

# 분포 저장
minmax_scaler.fit(df)

# 스케일링
minmax_scaled = minmax_scaler.transform(df)

4️⃣ MaxAbsScaler()

  • 0이 기준
  • 모든 값은 -1과 1사이로 표현되며, 데이터가 양수일 경우 MinMaxScaler와 같음
from sklearn.preprocessing import MaxAbsScaler

# 객체 생성
maxabs_scaler = MaxAbsScaler()

# 분포 저장
maxabs_scaler.fit(df)

# 스케일링
maxabs_scaled = maxabs_scaler.transform(df)

 

참고

 

[ML] 데이터 스케일링 (Data Scaling) 이란?

스케일링이란? 머신러닝을 위한 데이터셋을 정제할 때, 특성별로 데이터의 스케일이 다르다면 어떤 일이 벌어질까요? 예를 들어, X1은 0부터 1 사이의 값을 갖고 X2는 1000000부터 1000000000000 사이의

wooono.tistory.com

 

반응형