본문 바로가기

ML with SckitLearn

StandardScaler : 피처스케일링 정규화

반응형

서로 다른 변수의 값 범위를 일정한 수준으로 맞추는 작업을 피처 스케일링(Feature Scaling)이라고 합니다. 대표적인 방법으로 표준화(Standardization)와 정규화(Normaliaztion)가 있습니다.

 

사이킷런에서 제공하는 대표적인 피처 스케일링 클래스에는 StandardScaler와 MinMaxScler가 있습니다.

 

StandarScaler는 개별 Feature를 평균이 0이고, 분산이 1인 값으로 변환해줍니다. 가우시안 정규 분포를 가질 수 있도록 데이터를 변환하는 것은 몇 알고리즘에서는 매우 중요합니다. 특히 서포트 벡터 머신(Support Vector Machine)이나 선형 회귀(Linear Regression), 로지스틱 회귀(Logistic Regression)는 데이터가 가우시안 분포를 가지고 있다고 가정하고 구현됐기 때문에 사전에 표준화를 적용하는 것은 예측 성능 향상에 중요한 요소가 됩니다.

 

Iris Data의 평균과 분산을 확인해봅니다.

from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
import pandas as pd

iris_set = load_iris()
iris_data = iris_set.data
irisDF = pd.DataFrame(data=iris_data, columns=iris_set.feature_names)

print(irisDF.mean())
print(irisDF.var())
#print(irisDF.mean())
sepal length (cm)    5.843333
sepal width (cm)     3.057333
petal length (cm)    3.758000
petal width (cm)     1.199333
dtype: float64

#print(irisDF.var())
sepal length (cm)    0.685694
sepal width (cm)     0.189979
petal length (cm)    3.116278
petal width (cm)     0.581006
dtype: float64

 

 

StandardScaler를 적용해보면, StandardScaler객체를 생성한 후 fit()과 transform()메소드에 데이타 Set을 넣어주면 됩니다. 결과를 확인하면 모든 칼럼 값의 평균이 0에 아주 가까운 값으로, 그리고 분산은 1에 아주 가까운 값으로 변환됐음을 알 수 있습니다.

scaler = StandardScaler()
scaler.fit(irisDF)
iris_scaled = scaler.transform(irisDF)

irisDF_scaled = pd.DataFrame(data=iris_scaled, columns=iris_set.feature_names)

print(irisDF_scaled.mean())
print(irisDF_scaled.var())
#print(irisDF_scaled.mean())
sepal length (cm)   -1.690315e-15
sepal width (cm)    -1.842970e-15
petal length (cm)   -1.698641e-15
petal width (cm)    -1.409243e-15
dtype: float64

#print(irisDF_scaled.var())
sepal length (cm)    1.006711
sepal width (cm)     1.006711
petal length (cm)    1.006711
petal width (cm)     1.006711
dtype: float64

 

반응형