데이터 스케일링(Data Scaling), 로그 변환

hhs012·2022년 1월 19일
1

ML

목록 보기
13/22

데이터 스케일링(Data Scaling)

: 데이터 값의 스케일(범위)를 조정해주는 것이다. 특성 별로 값의 스케일이 다르다면, 머신러닝이 제대로 작동하지 않을 수 있기 때문에 데이터 스케일링 작업을 해주어야 한다. (회귀에서 주로 사용)

scikit-learn은 다양한 scaler를 제공하며, fit 과 transform 메서드를 가진다.

scaler.fit( )

fit메소드는 train 데이터에만 적용하며 데이터의 분포를 학습한다.

scaler.transform()

transform 메서드를 train 데이터와 test 데이터에 적용해, 실제로 데이터 스케일을 조정한다.

1) StandardScaler( )

: 데이터의 평균을 0, 분산을 1이 되도록 즉, 표준 정규분포를 따르드록 스케일링

모든 특성들이 같은 스케일을 갖으며, 최소값과 최대값에 제한을 받지 않는다. 또한 이상치에 매우 민감하다.

from sklearn.processing import StandardScaler

standscaler = StandardScaler()
standscaler.fit(X_train)
#train데이터 스케일링
X_train_standard = standscaler.transform(X_train) 
#test데이터 스케일링
X_test_standard = standscaler.transform(X_test)

2) MinMaxScaler( )

: 데이터가 0~1 사이에 위치하도록 스케일링. 즉 최소값은 0, 최대값을 1로 변환.

데이터의 최소값과 최대값을 알 때 사용하며, 이상치에 매우 민감하다. 분류보다 회귀에 유용하다.

from sklearn.processing import MinMaxScaler

minmaxscaler = MinMaxScaler()
minmaxscaler.fit(X_train)
#train데이터 스케일링
X_train_minmax = minmaxscaler.transform(X_train) 
#test데이터 스케일링
X_test_minmax= minmaxscaler.transform(X_test)

3) MaxAbsScaler( )

: 모든 값을 -1~1 사이로 표현하며, 각 특성의 절대값의 최소값은 0, 최대값은 1이 되도록 스케일링

데이터의 값이 양수만 존재할 경우, minmaxscaler와 같으며 이상치에 매우 민감하다.

from sklearn.processing import MinAbsScaler

minabsscaler = MinAbsScaler()
minabsscaler.fit(X_train)
#train데이터 스케일링
X_train_minabs = minabsscaler.transform(X_train) 
#test데이터 스케일링
X_test_minabs= minabsscaler.transform(X_test)

4) RobustScaler( )

: 중앙값과 IQR(사분위 값)을 사용하여 중앙값은 0, IQR은 1이 되도록 스케일링

이상치의 영향을 최소화할 수 있다.

from sklearn.processing import RobustScaler

robustscaler = RobustScaler()
robustscaler.fit(X_train)
#train데이터 스케일링
X_train_robust = robustscaler.transform(X_train) 
#test데이터 스케일링
X_test_robust= robustscaler.transform(X_test)

로그변환(Log transformation)

: 로그변환을 통해 왜도와 첨도를 가진 변수를 정규분포에 가깝게 만들어준다.
큰 수치를 같은 비율의 작은 수치로 변환하는 것

로그변환하기 전에, seaborn의 displot으로 왜도와 첨도를 확인한다.

sns.distplot(df['col'])
#로그변환
np.log1p(df['col])

❓ 로그변환과 스케일링의 차이는?

출처) https://www.inflearn.com/questions/171024

0개의 댓글