파이썬 0~1 스케일링 최소 최대 MinMaxScaler

2021. 6. 15. 21:01캐리의 데이터 세상/파이썬

반응형

빅분기 실기 예시문제 벼락치기로 풀어 보다가 복습 겸 정리합니다.

 

피처 스케일링 feature scaling

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

 

Min-Max 정규화란

일반적으로 정규화는 서로 다른 피처의 크기를 통일하기 위해 크기를 변환해주는 개념이다. 다르게 주어진 피처의 변수를 모두 동일한 크기 단위로 비교하기 위해 값은 모두 최솟값을 0, 최댓값을 1로 변환하는 방법이다. 즉 개별 데이터의 크기를 모두 똑같은 단위로 변경하는 것.

새로운 데이터 x'는 원래 값에서 피처 x의 최솟값을 뺀 값을 피처 x의 최댓값과 최솟값의 차이로 나눈 값으로 변환할 수 있다.

$$x'=\frac{x_{i}-min(x)}{max(x)-min(x)}$$

 

 

 

 

빅분기 실기 작업형 예제 적용

dataq 공지사항에 올라온 실기 작업환경 구름에서  하기 코드 넣고 마지막에 9까지 출력되는 것을 확인했습니다. 

작업형 문제 1)
mtcars 데이터셋(mtcars.csv)의 qsec 칼럼을 최소 최대 척도(Min-Max Scale)로 변환한 후 0.5보다 큰 값을 가지는 레코드 수 구하기

 

describe()나 info()등은 찍어보고 생략해도 무방. 코랩으로 연습하다가 해당 작업환경에서는 print로 감싸줘야 확인할 수 있어서 코드가 지저분함. 작명 센스가 없어서 overRecord라고. 시각화가 전혀 안 되는 실기 환경이라 눈에 잘 보이지도 않고 실행창 보는 것도 눈 아픈 아주 이상한 시험환경입니다.....

# 출력을 원하실 경우 print() 활용
# 예) print(df.head())

# 답안 제출 예시
# print(레코드 수)

import pandas as pd
df = pd.read_csv('data/mtcars.csv')
print(df.head())
print(df.describe())
print(df.info())

x = df['qsec']
x_MinMax = (x - x.min(axis=0)) / (x.max(axis=0) - x.min(axis=0))
overRecord = len(x_MinMax[x_MinMax>0.5])
print(x_MinMax.values)
print(overRecord)

dataset : 빅분기 실기 안내 공지사항에 첨부된 데이터 [공지글]

 

 

 

사이킷런 MinMaxScaler 어떻게 쓰이는지 길게 적어보고 싶었지만 공식 홈페이지에 너무나 자세하게 잘 나와있어서 각자의 작업환경에서 복붙 후 한 번씩 실행해보면 좋을 듯합니다. 대신에 정규화를 통해 이상치를 어떻게 잡아내는지 그 효과에 대한 각 정규화 별 비교 그래프가 공식 홈페이지에 나와 있길래 이미지로 덧붙입니다. 아래 scikit-learn 홈페이지의 해당 챕터 꼭 확인 후 코드 실행해 보세요. 링크는 [여기]

Compare the effect of different scalers on data with outliers

min-max-scaler
min-max scaling

 

데이터 포럼 카페 빅분기실기 준비 카테고리에 고수분들이 남겨 놓은 시험준비 흔적들을 급하게 보면서 첫 번째로 치뤄지는 빅분기 실기 작업환경에 대한 각종 코멘트들을 보며 나만 멘붕인 게 아니구나 위안 삼으며 수험료 4만 원이 아까워 일단 연습 삼아 시험 보러 가긴 갑니다.... 벼락치기니 작업형 1에 좀 더 집중을 해봐야겠습니다.

 

 

 

자료 : 책 <파이썬 머신러닝 완벽 가이드 | 위키북스> 124p 피처 스케일링과 정규화 챕터 설명 부분 참고

 

▼ 참고 글

빅데이터 분석기사 실기 준비

빅데이터 분석기사 후기

티스토리 블로그에 수학 기호 표기

반응형