데이터 전처리 : 특성의 스케일 조정하기
March 18, 2022, 12:28 p.m.
세상의 데이터들은 자신들만의 기준과 단위가 있습니다. 그렇기 때문에 값이 천차만별이죠. 예를 들어 어떤 옷들의 무게는 100~120g 정도 되는데 가격은 150000~250000원 정도의 분포를 가진다고 생각을 해봅시다. 이 데이터를 통해 모델을 학습시킨다면 아무래도 값의 차이가 큰 가격 데이터에 비중을 두어 학습을 진행할 가능성이 높아지겠죠?
이렇듯 특성들의 스케일을 그대로 놔두게 되면 값의 스케일에 의해 중요한 특성이 주목을 못 받을 수도 있습니다. 이런 현상을 방지하기 위해 각 특성의 스케일을 조정해서 동일하게 만들어 주는 것이 필요합니다.
이번 포스트에서는 간단하게 특성의 스케일을 조정하는 방법 2가지를 알아보겠습니다.
1. 최소 최대 변환
최소최대 변환이란 어떤 특성의 최솟값과 최대값을 구한 다음 해당 값이 최소와 최대 사이 어느정도에 분포해 있는지를 나타내는 변환입니다. 아래의 식을 이용합니다.
사이킷런을 이용해 쉽게 적용할 수 있습니다.
from sklearn.preprocessing import MinMaxScaler
mms = MinMaxScaler()
X_train_norm = mms.fit_transform(X_train)
X_test_norm = mms.transform(X_test)
최소 최대 변환은 범위가 정해진 값이 필요할 때 유용하게 사용할 수 있습니다. 하지만 값이 너무 들쭉 날쭉해서 이상치가 평균을 많이 벗어나는 이상치에 민감해지는 단점이 있습니다.
2. 표준화
두번째는 표준화입니다. 각 특성의 데이터들을 평균이 0, 표준편차가 1인 분포로 바꾸어 주는 것이죠. 이는 학습 데이터의 값 자체가 작아져 학습에 유용해지며, 최소최대변환과 달리 이상치 정보도 유지됩니다.
이 역시 사이킷런에서 쉽게 적용할 수 있습니다.
from sklearn.preprocessing import StandardScaler
std = StandardScaler()
X_train_std = std.fit_transform(X_train)
X_test_std = std.trasnsform(X_test)
저는 최소최대 변환보다 표준화를 선호하는 편입니다. 아무래도 이상치 정보도 유지가 되어 이상치에 덜 민감하기 때문이죠.
사이킷런 scikit-learn 표준화 최소최대변환