ML_label_encoder, min-max_scaling, standard_scaler, robust_scaler

이병찬·2024년 3월 14일

ML

목록 보기
3/14

label_encoder

데이터 준비

df = pd.DataFrame(
    {'A' : ['a', 'b', 'c', 'a', 'b'],
     'B' : [1, 2, 3, 1, 0]}
)

df

label_encoder : 반복문이나 조건문이 아닌 문자데이터를 숫자데이터로 변환해주는 함수

from sklearn.preprocessing import LabelEncoder

le = LabelEncoder() # LabelEncoder 함수를 불러오고 변수로 지정
le.fit(df['A']) # LabelEncoder를 fit를 통하여 교육

le.classes_ # le가 가져온 A컬럼 데이터를 중복 없이 확인

df['le_A'] = le.transform(df['A'])
df

le.fit_transform(df['A'])
# le.fit_transform : 한번에 문자데이터를 숫자데잍로 변환

le.inverse_transform([1, 2, 2, 1])
# le.inverse_transform : fit 로 교육한 사항으로 숫자를 문자로 역변환

min-max_scaling

정의 및 데이터 준비

  • MinMaxSclaer는 매우 다른 스케일의 범위를 0과 1사이로 변환
import pandas as pd

df = pd.DataFrame(
    {'A' : [10, 20, -10, 0, 25],
     'B' : [1, 2, 3, 1, 0]}
)

df

정규화

from sklearn.preprocessing import MinMaxScaler

mms = MinMaxScaler() # MinMaxScaler 함수를 불러오고 변수로 지정
mms.fit(df) # MinMaxScaler fit를 통하여 교육

df_mms = mms.transform(df)
df_mms

mms.inverse_transform(df_mms) # 교육한 사항을 토대로 역변환

mms.fit_transform(df)
# .fit_transform : fit 로 교육한 사항으로 한번에 정규화

standard_scaler

정의 및 데이터 준비

  • 각 특성의 평균을 0, 분산을 1로 변경하여 모든 특성이 같은 크기를 가지게 함으로써 특성의 최솟값과 최댓값 크기를 제한하지 않음
  • 표준 정규분포를 따르도록 정규화
import pandas as pd

df = pd.DataFrame(
    {'A' : [10, 20, -10, 0, 25],
     'B' : [1, 2, 3, 1, 0]}
)

df

정규화

from sklearn.preprocessing import StandardScaler

ss = StandardScaler()
ss.fit(df)

from sklearn.preprocessing import StandardScaler

ss = StandardScaler()
ss.fit(df)

ss.inverse_transform(df_ss) # 교육한 사항을 토대로 역변환

ss.fit_transform(df)
# .fit_transform: fit 로 교육한 사항으로 한번에 정규화

robust_scaler

정의 및 데이터 준비_모든 scaler 적용

  • 데이터의 중앙값을 뺀 다음, 사분위수 범위(IQR, Interquartile Range)로 나누어 데이터를 스케일링하여 특히 이상치(outliers)에 덜 민감한 스케일링을 원할 때 유용
df = pd.DataFrame({
    'A' : [-0.1, 0, 0.1, 0.2, 0.3, 0.4, 1, 1.1, 5]
})

from sklearn.preprocessing import MinMaxScaler, StandardScaler, RobustScaler

mm = MinMaxScaler()
ss = StandardScaler()
rs = RobustScaler()

df_scaler = df.copy()

df_scaler['MinMaxScaler'] = mm.fit_transform(df)
df_scaler['StandardScaler'] = ss.fit_transform(df)
df_scaler['RobustScaler'] = rs.fit_transform(df)

df_scaler

모든 scaler 시각화 및 특징

  • MinMaxScaler : 아웃라이어 (=5)에 영향을 받으면 잘못된 기준이 될 수 있다
  • StandardScaler : 아웃라이어 (=5)에 영향을 받으면 잘못된 기준이 될 수 있다
  • RobustScaler : 상기 두 방법과는 다르게 아웃라이어의 영향이 적다
import seaborn as sns
import matplotlib.pyplot as plt

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

profile
비전공 데이터 분석가 도전

0개의 댓글