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()
le.fit(df['A'])

le.classes_
df['le_A'] = le.transform(df['A'])
df
le.fit_transform(df['A'])
le.inverse_transform([1, 2, 2, 1])

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()
mms.fit(df)

df_mms = mms.transform(df)
df_mms
mms.inverse_transform(df_mms)
mms.fit_transform(df)

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)

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')
