데이터분석/데이터 탐색

다양한 데이터 스케일링(Data Scaling)

상선약수64 2023. 11. 5. 12:30
반응형

데이터 스케일링이란 데이터 전처리 과정 중의 하나로서, 피처(feature) 즉 속성 들마다 데이터값의 범위의 차이가 클 경우 데이터 스케일링을 해야 됩니다. 즉 데이터 스케일링을 통해 모든 피처들의 데이터 분포나 범위를 동일하게 조정해 줍니다.

 

사이킷런에서 제공하는 5가지의 스케일러입니다.

종류 설명
StandardScaler 평균 0 과 표준편차1이 되도록 정규화하는  기본적인 스케일러
MinMaxScaler 최대값 1, 최소값 0이 되도록 스케일링
MaxAbsScaler 최대 절대값이 1, 최소값이 0이 되도록 스케일링 
RobustScaler 중앙값과 IQR을 사용하여 이상치의 영향을 최소화하여 스케일링
Normalizer 행단위의 정규화하는 스케일링

 

 

가장 많이 사용되는 StandardScaler를 사용하여 실습하도록 하겠습니다.

사이킷런에서 제공되는 암진단 데이터를 로드하고 해당 데이터를 데이터프레임 형태로 변환합니다.

#데이터 스케일링
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_breast_cancer

cancer=load_breast_cancer() #암진단 데이터 불러오기 


df = pd.DataFrame(data=cancer.data, columns=cancer.feature_names)
df['target'] = cancer.target
df.head()

 

해당 데이터를 확인하면, 데이터의 범위가 차이가 많이 납니다. 예를 들어 mean compactness는 0~1 사이 데이터이고, mean perimeter은 100이 넘는 데이터가 많습니다. 이러한 데이터의 차이의 격차가 클 경우는 데이터 스케일링이 필요합니다.

데이터 확인

 

StandardScaler 모듈을 가져오고, 학습데이터와 테스트데이터로 나눕니다. 그리고 데이터 스케일링을 진행하는데, X_train 데이터 셑을 평균이 0이고 표준편차가 1인 표준정규분포로 변환하여 표준화시켜 X_train_scaled 변수가 가리킵니다.

from sklearn.preprocessing import StandardScaler #StandardScaler 모듈을 가져옴
#학습데이터와 테스트 데이터를 80%,20%로 나눔
X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target, test_size=0.2, random_state=3

std = StandardScaler() #데이터 스케일링
std.fit(X_train)
X_train_scaled = std.transform(X_train) #데이터 스케일링한 데이터 셑은 X_train_scaled

 

X_train_scaled은 행은 455개이고 30개 칼럼으로 구성된 것을 확인할 수 있습니다.

X_train_ scaled와 X_train 데이터 셑을 행이 13650개, 칼럼이 1인 데이터 셑으로 재구조화합니다.

 X_train_scaled_1 = X_train_scaled.reshape(13650,1)
 X_train_data_1 = X_train.reshape(13650,1)

 

원 데이터를 히스토그램 그려 데이터의 분포를 확인합니다.

plt.hist( X_train_data_1, bins=30, color= 'blue', alpha = 0.7, density=True)
plt.title('before data scaling')
plt.show()

원본데이터의 데이터 분포

 

데이터 표준화를 한 데이터에 대해 히스토그램을 그려봅니다.

plt.hist(X_train_scaled_1, bins=30, alpha = 0.7, density = True, color= 'green')
plt.title('StandardScaler')
plt.show()

 

표준화 된 데이터 히스토그램

 

향후 표준화 데이터를 이용하여 모델링을 하면 정확도가 높아짐을 확인할 수 있습니다.

데이터 탐색에서 데이터의 단위 또는 범위가 차이가 크게 나면 반드시 데이터 스케일링을 하셔야 합니다.