[Python] 최소 최대 '0~1' 범위 변환 (scaling to 0~1 range) : sklearn.preprocessing.MinMaxScaler()
Python 분석과 프로그래밍/Python 데이터 전처리 2016. 12. 16. 23:30지난번 포스팅에서는 변수들의 척도(Scale)가 서로 다를 경우에 상호 비교를 위해서 표준화하는 방법으로서
- 정규분포를 따르는 데이터의 표준정규분포로의 표준화 (z standardization)
(평균과 표준편차 이용)
- 이상치/특이값이 포함되어 있는 데이터의 표준화(scaling data with outliers)
(중앙값과 IQR(InterQuartile Range) 이용)
에 대해서 소개하였습니다.
이번 포스팅에서는 최소값(Min)과 최대값(Max)을 사용해서 '0~1' 사이의 범위(range)로 데이터를 표준화해주는 '0~1 변환'에 대해서 알아보겠습니다. 어디서 사용하나 싶을 텐데요, 요즘 각광받고 있는 인공신경망, 딥러닝 할 때 변수들을 '0~1' 범위로 변환해서 사용합니다.
Python은 '0~1' 범위 변환에 사용하는
- sklearn.preprocessing.MinMaxScaler() method와
- sklearn.preprocessing.minmax_scale() 함수를
제공합니다.
먼저, 필요한 모듈을 불러오고, 실습에 사용할 array 데이터를 만들어보겠습니다.
# importing modules In [1]: import numpy as np In [2]: import pandas as pd In [3]: from sklearn.preprocessing import MinMaxScaler
# making a trainig data array In [4]: X = np.array([[ 10., -10., 1.], ...: [ 5., 0., 2.], ...: [ 0., 10., 3.]]) ...: In [5]: X Out[5]: array([[ 10., -10., 1.],
|
'0~1' 변환을 하는 3가지 방법을 차례대로 예를 들어서 소개하겠습니다.
(1) 최소, 최대값을 구해서 '0~1' 범위로 변환 |
In [5]: X Out[5]: array([[ 10., -10., 1.],
# Scaling features to [0-1] range using the formula In [6]: X_MinMax = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0)) In [7]: X_MinMax Out[7]: array([[ 1. , 0. , 0. ],
|
(2) sklearn.preprocessing.MinMaxScaler() method를 사용한 최소.최대 '0~1' 범위 변환 |
training set에 대해 transformer API를 통해서 '0~1' 범위 변환을 훈련시키고 => 최소.최대 '0~1' 변환 모델을 test set (new data)에 대해 적용해서 '0~1' 범위 변환을 해보겠습니다.
In [5]: X Out[5]: array([[ 10., -10., 1.],
# min_max_scaler training using the transformer API In [8]: min_max_scaler = MinMaxScaler() In [9]: X_MinMax_train = min_max_scaler.fit_transform(X) In [10]: X_MinMax_train Out[10]: array([[ 1. , 0. , 0. ],
# making new test set In [11]: X_new = np.array([[9., -10., 1.], ...: [5., -5., 3.], ...: [1., 0., 5.]]) In [12]: X_new Out[12]: array([[ 9., -10., 1.],
In [13]: X_MinMax_new = min_max_scaler.transform(X_new) In [14]: X_MinMax_new Out[14]: array([[ 0.9 , 0. , 0. ],
|
(3) sklearn.preprocessing.minmax_scale() 함수를 사용한 최소.최대 '0~1' 범위 변환 |
sklearn.preprocessing.MinMaxScaler() method를 사용할 때 보다 조금 더 편한 면은 있으며, 결과는 동일합니다.
In [15]: X Out[15]: array([[ 10., -10., 1.],
# importing minmax_scale function from sklearn.preprocessing In [16]: from sklearn.preprocessing import minmax_scale
# scaling X to min~max '0~1' range In [17]: X_MinMax_scaled = minmax_scale(X, axis=0, copy=True) In [18]: X_MinMax_scaled Out[18]: array([[ 1. , 0. , 0. ],
|
다음번 포스팅에서는 이항변수화(binarization)에 대해서 알아보겠습니다.
많은 도움이 되었기를 바랍니다.