본문 바로가기

BLOG/머신러닝

[머신러닝] 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)