[머신러닝] StandardScaler : 표준화 하기 (파이썬 코드)
표준화란 데이터의 평균을 0, 분산과 표준편차를 1로 만들어주는 것을 말하는데요,
표준화를 하는 이유는 다른 통계 데이터와 비교하는 데에 있어 용이하게 하기 위함입니다. 만약, 표준화를 하지 않으면 한 데이터셋과 다른 데이터셋의 평균과 분산, 표준편차는 제각각으로 서로 비교할 수 없습니다. 따라서 표준화를 통해 분포를 단순화시켜서 비교를 쉽게 할 수 있답니다.
한편, 사이킷런(Scikit-learn) 라이브러리에서 StandardScaler 함수를 제공하는데요, 아래 코드를 보면서 살펴보도록 하겠습니다.
먼저, StandardScaler 함수를 사용하여 표준화를 하는 코드는 다음과 같습니다.
from sklearn.preprocessing import StandardScaler
std_scaler = StandardScaler()
std_scaled = std_scaler.fit_transform(X_train)
먼저, StandardScaler 라이브러리를 import 해주고, 해당 함수를 불러온 뒤, 표준화를 할 데이터(X_train)를 입력하여 표준화를 해줍니다.
이렇게 입력하고 실행하면 표준화 된 데이터를 얻을 수 있는데요,
예시로, 사이킷런에서 제공하는 보스턴 주택 데이터를 이용하여 표준화를 해보겠습니다.
먼저, 필요한 데이터를 불러와 train data와 test data로 나누어보겠습니다.
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
boston_dataset = datasets.load_boston()
X_train, X_test, y_train, y_test = train_test_split(boston_dataset['data'],
boston_dataset['target'],
test_size=0.2,
random_state=0)
그리고, 위에서 살펴본 StandardScaler 함수를 통해 표준화를 한 뒤 데이터프레임으로 나타내 보겠습니다.
std_scaler = StandardScaler()
std_scaled = std_scaler.fit_transform(X_train) #x_train라는 데이터 입력
round(pd.DataFrame(std_scaled), 2)
#output :
0 1 2 3 4 5 6 7 8 9 10 11 12
0 -0.37 -0.50 -0.70 3.66 -0.42 0.94 0.69 -0.44 -0.16 -0.56 -0.48 0.37 -0.41
1 -0.40 -0.50 -0.04 -0.27 -1.24 -0.49 -1.84 0.73 -0.62 -0.57 0.34 0.21 -0.39
2 -0.40 0.77 -0.89 -0.27 -1.11 0.86 -0.52 1.23 -0.39 -0.60 -0.85 0.37 -0.18
3 -0.41 0.03 -0.47 -0.27 -0.28 -0.42 -0.09 0.86 -0.51 -0.54 -1.49 0.42 -0.04
4 2.77 -0.50 1.00 -0.27 1.07 -1.44 0.72 -1.02 1.69 1.54 0.79 -2.61 1.91
... ... ... ... ... ... ... ... ... ... ... ... ... ...
399 -0.38 -0.50 -0.54 -0.27 -0.55 -0.86 0.19 0.46 -0.51 -0.68 0.52 0.37 -0.13
400 -0.41 1.41 -1.10 -0.27 -1.03 1.26 -1.52 1.30 -0.51 -0.03 -1.49 0.36 -1.35
401 -0.40 -0.50 -0.16 -0.27 -0.08 -0.40 0.48 -0.49 -0.39 0.17 -0.30 0.40 -0.33
402 -0.39 -0.50 -0.60 -0.27 -0.94 -0.39 0.59 0.92 -0.74 -1.00 -0.26 0.38 0.84
403 -0.40 -0.50 -1.01 -0.27 -0.40 -1.05 0.69 -0.57 -0.51 -0.63 -0.85 0.43 0.27
404 rows × 13 columns
표준화를 한 결과, 데이터의 값이 바뀐 것을 살펴볼 수 있는데요,
아래와 같이 describe() 함수를 통해 평균과 분산 및 표준편차의 값이 0과 1인지 확인할 수 있답니다.
round(pd.DataFrame(std_scaled).describe(), 2)
# output :
0 1 2 3 4 5 6 7 8 9 10 11 12
count 404.00 404.00 404.00 404.00 404.00 404.00 404.00 404.00 404.00 404.00 404.00 404.00 404.00
mean -0.00 -0.00 0.00 -0.00 -0.00 -0.00 0.00 0.00 -0.00 0.00 0.00 0.00 -0.00
std 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
min -0.42 -0.50 -1.53 -0.27 -1.49 -3.95 -2.36 -1.25 -0.97 -1.26 -2.67 -4.05 -1.51
25% -0.41 -0.50 -0.86 -0.27 -0.93 -0.60 -0.83 -0.81 -0.62 -0.74 -0.48 0.20 -0.82
50% -0.39 -0.50 -0.29 -0.27 -0.16 -0.13 0.32 -0.28 -0.51 -0.47 0.29 0.37 -0.19
75% -0.00 0.35 1.00 -0.27 0.65 0.54 0.89 0.66 1.69 1.54 0.79 0.42 0.60
max 10.53 3.74 2.38 3.66 2.74 3.57 1.10 4.02 1.69 1.81 1.61 0.43 3.33
위 결과를 보면, 모든 컬럼마다 평균(mean)은 0, 표준편차(std)가 1인 것을 확인할 수 있습니다.(표준편차가 1이면 분산도 1)