데이터분석/전처리

스케일링(scaling) 및 인버스스케일링 종류와 코드 (정규화, 역정규화)

씩씩한 IT블로그 2020. 12. 22. 11:55
반응형

 

스케일링은 컬럼별 단위차이를 줄여서 연산속도를 빠르게 하고 조건수를 줄여서 최적화 성능을 향상시킨다.

 

standard scaler

평균을 빼고 표준편차로 나누는 변환. 

각 변수가 정규분포를 따른다는 가정 후 수행하므로 정규분포가 아닐 시 최선이 아닐 수 있다.

(1) 식

 

(2) 그래프

 

min-max scaling

가장 많이 사용되는 알고리즘, 값을 0~1로 바꿔줌.

각 변수가 정규분포가 아니거나 표준편차가 매우 작을 때 효과적이다.

(1) 식

 

(2) 그래프

 

robust scaling

최소-최대 스케일과 유사하다. 최소최대 대신 IQR(InterQuartile Range)중 1분위수, 3분위수를 사용한다.

이상치의 영향을 최소화 하였기 떄문에 이상치가 있는 데이터에 효과적이다.

(1) 식

(2) 그래프

 

normalizer scaling

각 변수를 전체 n개의 변수들의 크기로 나눈다.

각 변수들의 값을 원점으로 부터 1만큼 떨어져 있는 범위 내로 변환.

(1) 식

(2) 그래프

 

정규화 및 역규화 코드

(1) 기본 순서

from sklearn import preprocessing

# preprocessing.MinMaxScaler()
# preprocessing.StandardScaler()
# preprocessing.RobustScaler()
# preprocessing.Normalizer()

# 1. 스케일러를 선택 후 스케일러 객체를 지정한다
scaler = preprocessing.MinMaxScaler()

# 2. 스케일러 객체의 fit()함수를 이용하여 필요한 파라미터를 저장한다
# scaler_fit에는 칼럼별 최대와 최소값이 저장되어있다.
scaler_fit = scaler.fit(X)

# 3. 스케일러 객체의 transform()함수를 이용하여 스케일링을 수행한다
result=scaler_fit.transform(X)

 

* 역정규화

inverse_scaled_data = scaler.inverse_transform(scaled_data)

 

(2) 함수화

def feature_engineering_scaling(scaler, X_train, X_test):
    # scaler파라미터는 아래 4개중 하나를 넣는다
    # preprocessing.MinMaxScaler()
    # preprocessing.StandardScaler()
    # preprocessing.RobustScaler()
    # preprocessing.Normalizer()
    scaler = scaler
    scaler_fit = scaler.fit(X_train)
    X_train_scaling = pd.DataFrame(scaler_fit.transform(X_train), 
                               index=X_train.index, columns=X_train.columns)
    X_test_scaling = pd.DataFrame(scaler_fit.transform(X_test), 
                               index=X_test.index, columns=X_test.columns)
    return X_train_scaling, X_test_scaling

 

* 출처 : 패스트캠퍼스 파이썬을 활용한 시계열 데이터분석 A-Z

반응형