각 데이터 포인트가 0에서 1 사이에 위치하게 됨
Min-Max 스케일링을 사용하면 특정 특성이 다른 특성에 비해 과도하게 지배적인 영향을 미치는 것을 방지, 학습 과정에서 수렴 속도를 높힘
# 파일이랑 모듈 불러오기
import pandas as pd
import numpy as np
df = pd.read_csv('../input/bigdatacertificationkr/basic1.csv')
df.head()
out:
id age city f1 f2 f3 f4 f5
0 id01 2.0 서울 NaN 0 NaN ENFJ 91.297791
1 id02 9.0 서울 70.0 1 NaN ENFJ 60.339826
2 id03 27.0 서울 61.0 1 NaN ISTJ 17.252986
3 id04 75.0 서울 NaN 2 NaN INFP 52.667078
4 id05 24.0 서울 85.0 2 NaN ISFJ 29.269869
df.isnull().sum()
out:
id 0
age 0
city 0
f1 31
f2 0
f3 95
f4 0
f5 0
dtype: int64
# 방법 1
df['f5_1'] = ((df['f5'] - df['f5'].min()) / (df['f5'].max() - df['f5'].min()))
# 방법 2
df['f5_2'] = df['f5'].transform(lambda x: ((x - x.min()) / (x.max() - x.min())))
# 방법 3
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
df['f5_3'] = scaler.fit_transform(df[['f5']])
out:
id age city f1 f2 f3 f4 f5 f5_1 f5_2 f5_3
0 id01 2.0 서울 NaN 0 NaN ENFJ 91.297791 0.919533 0.919533 0.919533
1 id02 9.0 서울 70.0 1 NaN ENFJ 60.339826 0.570252 0.570252 0.570252
2 id03 27.0 서울 61.0 1 NaN ISTJ 17.252986 0.084129 0.084129 0.084129
3 id04 75.0 서울 NaN 2 NaN INFP 52.667078 0.483685 0.483685 0.483685
4 id05 24.0 서울 85.0 2 NaN ISFJ 29.269869 0.219708 0.219708 0.219708
sklearn의 MinMaxScaler로 여러 컬럼을 동시에 정규화하거나, 파이프라인과 함께 전처리 작업을 수행할 때 적합.# 하위 5%
lower = df['f5_1'].quantile(0.05)
# 상위 5%
upper = df['f5_1'].quantile(0.95)
lower, upper
out:
(0.03670782406038746, 0.9881662742993513)
q는 0에서 1사이 실수 값으로 데이터를 0% 100% 사이로 나누는 비율quantile(0.05)는 하위 5% (5번째 백분위수)quantile(0.95)는 상위 5% (95번째 백분위수)lower + upper
출처: https://www.kaggle.com/code/agileteam/py-t1-11-min-max-5-expected-questions