머신 러닝 - Encoder, Scaler

이상해씨·2021년 11월 13일
0

머신 러닝

목록 보기
6/27

◾Label_Encoder

  • Label Encoder : 카테고리 피처를 코드형 숫자 값으로 변환
    • sklearn에서는 숫자만 사용가능하므로 카테고리들을 숫자로 변환해야한다.
    • 또는 숫자를 문자로 역변환 시킬 수 있다.
import pandas as pd
df = pd.DataFrame({
    'A' : ['a', 'b', 'c', 'a', 'b'],
    'B' : [1, 2, 3, 1, 0]
})
df

from sklearn.preprocessing import LabelEncoder
# 컬럼 학습
le = LabelEncoder()
le.fit(df['A'])
# 학습된 카테고리(내용) 확인
le.classes_

# 변환
le.transform(df['A'])
# 학습과 변환 한번에 수행
# le.fit_transform(df['A'])

# 데이터 추가
df['le_A'] = le.transform(df['A'])
df

# 컬럼 le_A -> 역변환
# 숫자 -> 문자
le.inverse_transform(df['le_A'])


◾Min-Max Scaler

  • min-max Scaler : x = xmin(x)max(x)min(x)x`~=~{{x-min(x)}\over{max(x)-min(x)}}
    • 수치를 0 ~ 1 범위로 정규화를 할 때 사용한다.
# 데이터 준비
df = pd.DataFrame({
    'A' : [10, 20, -10, 0, 25],
    'B' : [1, 2, 3, 1, 0]
})
df

from sklearn.preprocessing import MinMaxScaler
# 데이터 fit(적용)
mms = MinMaxScaler()
mms.fit(df)
# 데이터 확인
# max, min, range
mms.data_max_, mms.data_min_, mms.data_range_

# trasform
# 한번에 적용
# mms.fit_transform(df)
df_mms = mms.transform(df)
df_mms

# 역벽환
mms.inverse_transform(df_mms)


◾Standard Scaler

  • standard scaler : z=Xμσz = {X-\mu \over \sigma}
    • 표준정규분포를 만들 때 사용
from sklearn.preprocessing import StandardScaler
# 데이터 fit(적용)
ss = StandardScaler()
ss.fit(df)
# 데이터 확인
# 평균, 표준편차, 분산
ss.mean_, ss.scale_, ss.var_

# trasform : 표본정규분포 값 반환
# 한번에 적용
# ss.fit_transform(df)
df_ss = ss.transform(df)
df_ss

# 역벽환
ss.inverse_transform(df_ss)


◾Robust Scaler

  • robust scaler : xiQ2Q3Q1x_{i}-Q_{2} \over Q_{3}-Q_{1}
    • 중앙값을 0로 만든다.
    • 이상값에 대해 강력한 통계를 사용하여 기능을 확장
    • 중앙값을 제거하고 분위수 범위(기본값은 IQR: 사분위수 범위)에 따라 데이터를 조정합니다. IQR은 1사분위수(25분위수)와 3사분위수(75분위수) 사이의 범위
# 데이터 생성
df = pd.DataFrame({
    'A' : [-0.1, 0, 0.1, 0.2, 0.3, 0.4, 1.0, 1.1, 5.0, ]
})
df

# 3가지 형식 비교
from sklearn.preprocessing import MinMaxScaler, StandardScaler, RobustScaler
# 데이터 fit(적용)
mm = MinMaxScaler()
ss = StandardScaler()
rs = RobustScaler()

# 기본 데이터 복사
df_scaler = df.copy()

# 데이터 fit 및 transform
df_scaler["MinMax"] = mm.fit_transform(df)
df_scaler["Standard"] = ss.fit_transform(df)
df_scaler["Robust"] = rs.fit_transform(df)

# 데이터 확인
df_scaler


◾Scaler 비교

  • Robust Scaler의 데이터 사용
# box_plot으로 확인
import matplotlib.pyplot as plt
import seaborn as sns

sns.set_theme(style='whitegrid')
plt.figure(figsize=(16, 6))
sns.boxplot(data=df_scaler, orient='h')
plt.show()

  • 기본 데이터에 outlier이 있는 것 확인
  • min-max scaler : outlier에 영향을 받아 이상해질 수 있다. 최소값이 0으로 고정된다.
  • standard scaler : outlier에 영향을 받아 이상해질 수 있다.
  • robust scaler : outlier에 의한 영향이 줄어든다. 중앙값(median)이 0으로 고정되고 IQR이 1로 고정된다.
profile
후라이드 치킨

0개의 댓글