Machine Learning/Preprocessing

피처 스케일링(feature scaling)

진성01 2022. 5. 8. 23:47

수치형 데이터의 경우 feature의 종류에 따라 각각 다른 분포를 가진다. 예를 들어 키의 경우 대부분 150~190의 값을 가지고, 몸무게의 경우 40~90 사이의 값을 가진다. 이렇게 서로 다른 변수의 값 범위를 일정한 수준으로 맞추는 작업을 피처 스케일링(feature scaling)이라고 한다. 이번 글에서는 피처 스케일링에 대해 소개한다.

 

피처 스케일링의 대표적인 방법으로는 표준화와 정규화가 있다.

 

표준화(Standardization)

 

표준화는 데이터의 feature 각각이 평균이 0이고 분산이 1인 가우시안 정규분포를 가진 값으로 변환하는 것이다. 이는 공식을 이용하여 간단하게 구할 수 있다. 서포트 벡터머신(Surport Vector Machine)이나 선형 회귀(Linear Regression), 로지스틱 회귀(Logistic Regression)은 데이터가 가우시안 분포를 가지고 있다고 가정하고 구현됐기 때문에 사전에 표준화를 진행하면 예측 성능이 향상 될 수 있다.

 

 

사이킷런은 표준화를 쉽게 지원하기 위한 클래스인 StandardScaler를 지원한다. 

다음과 같이 StandardScaler를 선언하고 fit(), transform()을 이용하면 데이터를 표준화 할 수 있다. 결과를 확인해 보면 평균값이 0에 매우 가까운 숫자로 변환되었고, 분산 역시 1에 매우 가까운 수치로 변환되었다.

 

정규화(Normalization)

 

정규화는 데이터를 0과 1사이의 범위 값으로 변환하는 것이다(음수 값이 있으면 -1에서 1값으로 변환). 데이터의 분포가 가우시안 분포가 아닐 경우 정규화를 적용해 볼 수 있다.

 

사이킷런 에서는 MinMaxScaler 클래스를 이용하여 간편하게 정규화를 진행할 수 있다.

 

 

다음과 같이 MinMaxScaler를 선언하고 fit(), transform()을 이용하면 데이터를 표준화 할 수 있다. 결과를 확인해 보면 최솟값은 0, 최댓값은 1로 변환되었다. 

 

fit(), transform()을 이용하여 피처 스케일링을 진행할 때 가능하다면 전체 데이터의 스케일링을 진행 한 후 데이터셋을 나누는 것이 좋다. 여의치 않은 경우(데이터셋을 먼저 나눠야 할 경우) test데이터 변환시에는 fit()을 다시 사용하지 않고 train데이터 변환 시 사용했던 Scaler객체를 다시 이용하여 transform()을 진행해야 한다.

 

 

#이 글은 권철민 작가님의 [파이썬 머신러닝 완벽가이드]를 통해 공부한 내용을 바탕으로 정리하였습니다.