데이터 스케일링(Data Scaling)은 각 변수들의 범위 혹은 분포를 같게 만드는 작업이다. 이를 통해 각 변수들이 동일한 조건(혹은 범위)을 가지게 되어, 이 변수들에 대한 상대 비교가 가능하게 된다.
데이터 분석을 하기 전 전처리 과정에서, 주어진 방법으로 스케일링하도록 하는 문제가 많이 나온다.
A) 정규화 (Normalization)
정규화는 데이터의 값들을 [0,1] 사이의 값이 되게 변환하는 것이다.
정규화 수식은,
$$ \frac {(X-Min)}{(Max - Min)}$$
구현 방법은,
1) 수식을 이용해서 직접 구현
2) sklearn.preprocessing.MinMaxScaler 이용
푸는 예를 보면,
import pandas as pd
lst = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]]
df = pd.DataFrame(lst, columns=['A','B'])
df
# 1)수식을 이용해서 직접 구현: (X-Min) / (Max-Min)
def normalize(s):
return (s-s.min())/(s.max()-s.min())
# normalize(df['A'].to_list())
dic={}
dic['A']=normalize(df['A'])
dic['B']=normalize(df['B'])
df1 = pd.DataFrame(dic)
df1
# 2) MinMaxScaler 이용
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scaler.fit(df)
arr = scaler.transform(df)
df1 = pd.DataFrame(arr, columns=df.columns)
df1
scaler.data_min_, scaler.data_max_,scaler.data_range_
(array([-1., 2.]), array([ 1., 18.]), array([ 2., 16.]))
df
B) 표준화 (Standardization)
표준화는 데이터의 값들을 평균은 0, 분산은 1이 되게 변환하는 것 (Z점수 정규화라고도 함)
수식은,
$$ \frac{(X-평균)}{표준 편차}$$
구현 방법은,
1) 수식을 직접 구현
2) sklearn.preprocessing.StandardScaler 이용
구하는 예를 보면,
df = pd.DataFrame({
'A':[1,2,3,4,5,6],
'B':[101,102,103,104,105,106]
})
df
# 1) 수식을 직접 구현 : (X - 평균) / 표준편차
import numpy as np
def standardization(s):
return (s-s.mean()) / s.std(ddof=0) #모집단이라고 가정
df1 = pd.DataFrame({
'A':standardization(df['A']),
'B':standardization(df['B'])
})
df1
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(df)
arr = scaler.transform(df)
df1 = pd.DataFrame(arr, columns=df.columns )
df1
주의: StandardScaler는 모 표준편차를 기준으로 계산 -> 표본집단에 대한 계산방법 없음
--> 표본 표준편차를 기준으로 해서 정규화를 하라고 한다면, 수식을 이용해서 직접 구현해야 함
scaler.mean_, scaler.var_
(array([ 3.5, 103.5]), array([2.91666667, 2.91666667]))
df.mean(), df.var(ddof=0)
C) 그 외의 스케일링 방법
sklearn.preprocessing 패키지에는, 정규화(MinMaxScaler), 표준화(StandardScaler) 외에 RobustScaler와 MaxAbsScaler가 있다.
sklearn.preprocessing에 있는 Scaler:
- MinMaxScaler (정규화)
- StandardScaler (표준화)
- RobustScaler
- MaxAbsScaler
RobustScaler
계산식은,
$$ \frac{(X - Median)}{IQR} $$
각 값을 최대 절댓값으로 나눈다.
사용법,
from sklearn.preprocessing import MaxAbsScaler
scaler = MaxAbsScaler()
scaler.fit(df)
arr = scaler.transform(df)
-끝-
다음 글: 1.3 데이터 스케일링 (예제 풀이)
'Information > 통계강의' 카테고리의 다른 글
2. 분포 및 가설검정 (0) | 2021.02.14 |
---|---|
1.3 데이터 스케일링 (예제 풀이) (0) | 2021.02.13 |
1.2 산포 (이론, 예제 풀이) (0) | 2021.02.12 |
1.1 대푯값 (예제 풀이) (0) | 2021.02.12 |
1.1 대푯값 (이론) (0) | 2021.02.12 |