피처 스케일링(feature scaling) : 서로 다른 변수의 값 범위를 일정한 수준으로 맞추는 작업

대표적인 방법으로 표준화(Standardization)정규화(Normalization)

 

표준화 : 데이터의 피처 각각이 평균이 0이고 분산이 1인 가우시안 정규 분포를 가진 값으로 변환

정규화 : 서로 다른 피처의 크기를 통일하기 위해 크기를 변환해주는 개념, 즉 개별 데이터의 크기를 똑같은 단위로 변경

 

StandardScaler

표준화를 쉽게 지원하기 위한 클래스

개별 피처를 평균이 0이고, 분산이 1인 값으로 변환한다

가우시안 정규 분포를 가질 수 있도록 데이터를 변환하는 것은 몇몇 알고리즘에서 매우 중요

ex) RBF 커널을 이용하는 서포트 벡터 머신, 선형회귀, 로지스틱 회귀

데이터가 가우시안 분포를 가지고 있다고 가정하고 구현되기 때문에 사전에 표준화를 적용하는 것은 예측 성능 향상에 중요한 요소가 된다

from sklearn.datasets import load_iris
import pandas as pd

iris=load_iris()
iris_data = iris.data
iris_df = pd.DataFrame(data=iris.data, columns = iris.feature_names)

print('feature 들의 평균 값')
print(iris_df.mean())
print('\nfeature 들의 분산 값')
print(iris_df.var())
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(iris_df)
iris_scaled = scaler.transform(iris_df)

#transform()시 스케일 변환된 데이터 세트가 NumPy ndarrary로 반환돼 이를 DataFrame으로 변환
iris_df_scaled = pd.DataFrame(data=iris_scaled, columns = iris.feature_names)
print('feature 들의 평균 값')
print(iris_df_scaled.mean())
print('\nfeature들의 분산 값')
print(iris_df_scaled.var())

 

 

MinMaxScaler

데이터값을 0과 1사이의 범위 값으로 변환(음수 값이 있다면 -1에서 1값으로 변환)

데이터의 분포가 가우시안 분포가 아닐 경우에 MinMaxScaler를 적용해볼 수 있다

from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scaler.fit(iris_df)
iris_scaled = scaler.transform(iris_df)

 

 

학습 데이터와 테스트 데이터의 스케일링 변환 시 유의점

메서드 : fit(), transform(), fit_transform()

학습 데이터로 fit()이 적용된 스케일링 기준 정보를 그대로 테스트 데이터에 적용해야 하며, 그렇지 않고 테스트 데이터로 다시 새로운 스케일링 기준 정보를 만들게 되면 학습 데이터와 테스트 데이터의 스케일링 기준 정보가 서로 달라지기 때문에 올바른 예측 결과를 도출 하지 못할 수 있음

#Scaler 클래스의 fit(), transform()은 2차원 이상 데이터만 가능하므로 reshape(-1,1)로 차원 변경
scaler = MinMaxScaler()
scaler.fit(train_array)
train_scaled = scaler.transform(train_array)

#test array에 Scale변환을 할 때는 반드시 fit()을 호출하지 않고 transform()만으로 변환해야함
test_scaled = scaler.transform(test_array)

 

  • fit_transform

fit()과 transform()을 순차적으로 수행하는 메서드

학습 데이터에서는 상관 없지만 테스트 데이터에서는 절대 사용해서는 안된다

가능하다면 전체 데이터의 스케일링 변환을 적용한 뒤 학습과 테스트 데이터로 분리한다

 

 

 

 

'ML' 카테고리의 다른 글

평가  (0) 2022.11.07
타이타닉 생존자 예측  (0) 2022.11.07
데이터 인코딩  (0) 2022.11.07
Model Selection  (0) 2022.11.07
붓꽃 품종 예측하기  (0) 2022.11.07

+ Recent posts