사이킷런에서 서로 다른 변수값을 일정 수준으로 맞추는
작업을 피처 스케일링(Feature Scaling)이라고 합니다.
바로 보스턴 주택 가격 데이터 셋을 활용하여 예시를 보겠습니다.
import pandas as pd
from sklearn.datasets import load_boston
boston = load_boston()
print(boston.keys())
boston.target #보스턴 집값
print(boston.DESCR)
print(boston.feature_names)
df_boston = pd.DataFrame(boston.data, columns=boston.feature_names)
#종속변수 target추가하며 전체 컬럼을 데이터 프레임에 넣음
df_boston['target'] = boston.target
df_boston.head()
#정규화준비
from sklearn.preprocessing import StandardScaler
import pandas as pd
df_boston = load_boston()
df_boston_data = boston.data
df_boston = pd.DataFrame(data=df_boston_data, columns=boston.feature_names)
#표준화(Standard Scaling)
scaler = StandardScaler()
scaler.fit(df_boston)
boston_scaled = scaler.transform(df_boston)
df_boston_scaled = pd.DataFrame(data=boston_scaled, columns=boston.feature_names)
#각 컬럼의 평균값
print(df_boston_scaled.mean())
print('\n')
#각 컬럼의 분산값
print(df_boston_scaled.var())
#결과
CRIM -8.787437e-17
ZN -6.343191e-16
INDUS -2.682911e-15
CHAS 4.701992e-16
NOX 2.490322e-15
RM -1.145230e-14
AGE -1.407855e-15
DIS 9.210902e-16
RAD 5.441409e-16
TAX -8.868619e-16
PTRATIO -9.205636e-15
B 8.163101e-15
LSTAT -3.370163e-16
dtype: float64
CRIM 1.00198
ZN 1.00198
INDUS 1.00198
CHAS 1.00198
NOX 1.00198
RM 1.00198
AGE 1.00198
DIS 1.00198
RAD 1.00198
TAX 1.00198
PTRATIO 1.00198
B 1.00198
LSTAT 1.00198
dtype: float64
#표준화(MinMaxScaling)
from sklearn.preprocessing import MinMaxScaler
Scaler = MinMaxScaler()
scaler.fit(df_boston)
df_boston_scaled = pd.DataFrame(data=boston_scaled, columns=boston.feature_names)
#최소값 구하기
print(df_boston_scaled.min())
print()
#최대값 구하기
print(df_boston_scaled.max())
#결과
CRIM -0.419782
ZN -0.487722
INDUS -1.557842
CHAS -0.272599
NOX -1.465882
RM -3.880249
AGE -2.335437
DIS -1.267069
RAD -0.982843
TAX -1.313990
PTRATIO -2.707379
B -3.907193
LSTAT -1.531127
dtype: float64
CRIM 9.933931
ZN 3.804234
INDUS 2.422565
CHAS 3.668398
NOX 2.732346
RM 3.555044
AGE 1.117494
DIS 3.960518
RAD 1.661245
TAX 1.798194
PTRATIO 1.638828
B 0.441052
LSTAT 3.548771
사족1.
단위가 다른 값을 비교할 때 일정한 기준치를 두고 비교할 때 자주 쓸 것 같아요.
개인적으로는 이번달에 데뷔한 아이돌의 브랜드를 분석하기 위하여, 같은 시기에 컴백한 데뷔연차 5년 이상된 아이돌의 지표를 분석할 때 쓸 것 같아요. (또는 해당 기획사에서 가장 대중적으로 잘 알려진 선배 아이돌의 지표랑) 앨범 판매량, 유튜브 채널 구독자수, 각 sns 및 공식채널 회원수, 각 채널의 페이지 뷰, 스트리밍 사이트 음원순위 등을 비교하여 신인 아이돌의 앨범판매량이 어느 수준인지 파악하는데 쓸 수 있을 것 같았어요.