min-max & 상하위 값

코딩다시시작·2024년 11월 1일

빅데이터분석

목록 보기
13/19

이론

  • Min-Max 스케일링은 데이터의 값을 일정한 범위로 변환하는 정규화 기법
  • 데이터의 분포를 0과 1 사이의 범위로 축소하여 각 특성의 값을 상대적으- 로 비교할 수 있게 보여줌
  • 이는 머신러닝 알고리즘의 성능을 향상시키기 위해 자주 사용
Xscaled=XXminXmaxXminX_{\text{scaled}} = \frac{X - X_{\text{min}}}{X_{\text{max}} - X_{\text{min}}}
  • XX는 원래 데이터 값
  • XminX_{\text{min}}은 데이터의 최소값
  • XmaxX_{\text{max}}은 데이터의 최대값

각 데이터 포인트가 0에서 1 사이에 위치하게 됨
Min-Max 스케일링을 사용하면 특정 특성이 다른 특성에 비해 과도하게 지배적인 영향을 미치는 것을 방지, 학습 과정에서 수렴 속도를 높힘

문제

1. min-max스케일링 기준 상하위 5% 구하기

2. 주어진 데이터에서 'f5'컬럼을 min-max 스케일 변환한 후, 상위 5%와 하위 5% 값의 합을 구하시오

  • 데이터셋 : basic1.csv
  • 오른쪽 상단 copy&edit 클릭 -> 예상문제 풀이 시작
  • File -> Editor Type -> Script

데이터 확인하기

# 파일이랑 모듈 불러오기	
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

min-max 정규화

# 방법 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
  • 방법 1: 단일 컬럼에 대해 수동으로 계산하여 Min-Max 스케일링을 수행할 때 적합.
  • 방법 2: 그룹별로 각기 다른 최소/최대 값을 사용해 정규화해야 할 때 유용.
  • 방법 3: sklearnMinMaxScaler로 여러 컬럼을 동시에 정규화하거나, 파이프라인과 함께 전처리 작업을 수행할 때 적합.

quntile을 이용한 상하위

# 하위 5%
lower = df['f5_1'].quantile(0.05)
# 상위 5%
upper = df['f5_1'].quantile(0.95)
lower, upper

out:

(0.03670782406038746, 0.9881662742993513)
  • quantile(q)는 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

profile
gpt로 다시 배우는 개발

0개의 댓글